Skip to main content

ITFlow CVE-2026-54597

| EUVDEUVD-2026-82470 HIGH
SQL Injection (CWE-89)
2026-09-17 GitHub_M
8.3
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Recon
    Authenticate with module_support write permission
  2. Delivery
    Open a shared credential record
  3. Exploit
    Submit crafted expires value to share_generate_link
  4. Install
    Break out of unquoted INTERVAL expression
  5. C2
    Infer query results from response delays
  6. Execute
    Extract and crack password hashes/credentials
  7. Impact
    Escalate to administrative takeover

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Parameterized queries, prepared statements
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Persistence

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires an authenticated ITFlow account holding module_support write permission AND access to a credential record, then invocation of the share_generate_link handler in agent/ajax.php. The concrete flaw: the 'expires' GET parameter is only string-context escaped by sanitizeInput but is inserted UNQUOTED into the 'item_expire_at = NOW() + INTERVAL + $item_expires' MySQL expression in the shared_items INSERT, so a crafted expression plus interval unit executes conditional queries whose results leak via response-time differences. Limiting factors: exploitation is authenticated (not anonymous), needs the specific module_support write role rather than any low-privilege login, is a time-based BLIND channel (slow, latency-inferred, no direct data return), and affects only ITFlow versions prior to 26.07. Exploitation is not possible on default configurations without the module_support write grant and credential-record access.

Impact

CVSS 3.1 base 8.3 (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L) rates this High, but the real-world profile is more constrained than the raw number suggests. Exploitation requires PR:L - an authenticated ITFlow user who additionally holds module_support write permission AND access to a specific credential record, so this is a privileged insider / compromised-support-account escalation, not an anonymous internet threat. No EPSS score, SSVC decision data, or POC availability was supplied in the intelligence, and there is no CISA KEV entry, so this is 'no public exploit identified at time of analysis.' However, the vendor security advisory (GHSA-m63v-j7fw-hq2h) plus the fixing commit (63d86917) provide a precise, near-recipe root cause: the expires GET parameter is passed through sanitizeInput (string-context escaping only) then inserted UNQUOTED into a MySQL INTERVAL expression, so classic string escaping is bypassed entirely - the diff replacing sanitizeInput with intval() confirms the injection point and makes weaponization straightforward for anyone reading the patch. Net: a real, patch-diff-verified SQLi worth prioritizing where module_support write is delegated broadly, but the PR:L gate and time-based blind (slow, low-bandwidth) extraction temper the vendor's I:H/A:L impact claim. The 'Hashicorp' tag is spurious - the 'encrypted vault data' referenced is ITFlow's own credential vault, not HashiCorp Vault.

Exploit ScenarioDerived

A support-tier ITFlow user (or an attacker who has phished/compromised such an account) opens a client credential record and invokes the share_generate_link handler in agent/ajax.php, supplying a crafted value in the expires parameter that breaks out of the unquoted INTERVAL expression. By embedding conditional time-delay subqueries (e.g. SLEEP-based branches) and observing HTTP response latency, they perform time-based blind extraction of password hashes, SMTP credentials, API keys, encrypted vault contents, and database metadata, then crack the recovered hashes offline to seize administrative control. No public POC was provided, but the fixing commit diff plainly exposes the vulnerable INSERT statement and the missing integer coercion.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 17, 2026

Time-based blind SQL injection in ITFlow versions prior to 26.07 allows an authenticated user who holds module_support write permission and has access to a credential record to execute conditional queries against the underlying MySQL database through the expires parameter of the share_generate_link handler in agent/ajax.php, inferring results from response delays and ultimately exposing password hashes, SMTP credentials, API keys, encrypted vault data, and database metadata. Although the vendor-scored CVSS 3.1 base is 8.3, the independent assessment (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N) notes the real-world profile is more constrained than that number suggests: exploitation is not anonymous, requires the specific module_support write grant plus credential-record access, and runs over a slow latency-inferred blind channel rather than returning data directly. The issue is fixed in ITFlow 26.07, and no public exploit code or confirmed active exploitation was identified at time of analysis.

RemediationAI

Apply the vendor fix by upgrading to ITFlow 26.07 or later (release at https://github.com/itflow-org/itflow/releases/tag/v26.07), which corresponds to commit 63d86917ae0438548d21d4e28e4d3c55176f5cbf and PR https://github.com/itflow-org/itflow/pull/1289 and per the advisory GHSA-m63v-j7fw-hq2h; the patch is a small change that casts expires with intval() and hard-codes the HOUR interval unit, so backporting it to an older branch is straightforward for teams that cannot immediately upgrade. Until the patch is applied, revoke module_support write permission from all accounts that do not strictly need it and remove credential-record access from those users, accepting that administrators will lose the ability to generate share links from the affected handler; alternatively block or filter requests to agent/ajax.php where the expires parameter contains anything other than a bare integer, though this requires a WAF or reverse-proxy rule and can be bypassed by unusual encodings. Because the channel is time-based and blind, exfiltration is slow and may not generate obvious application-log entries, so enable MySQL slow and general query logging and alert on abnormally long responses from agent/ajax.php. If a vulnerable instance was exposed to untrusted module_support users, rotate the credentials the injection can reach, including user password hashes via forced resets, SMTP passwords, API keys, and vault encryption material, and review the shared_items table for unexpected rows.

Affected VersionsENISA

itflow < 26.07

Affected Packages

euvd itflow fix: 26.07

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The root cause is CWE-89 SQL injection in PHP code that uses the mysqli extension. The share_generate_link handler reads the expires GET parameter and passes it through sanitizeInput, which performs string-context escaping only; that is sufficient when input is placed inside quoted SQL literals, but the value is then inserted unquoted into the INSERT INTO shared_items statement as item_expire_at = NOW() + INTERVAL + $item_expires. Because the MySQL INTERVAL syntax expects a numeric quantity followed by a unit keyword, an attacker who controls the whole expires string can supply a crafted numeric expression and an interval unit that appends conditional subqueries, so the database evaluates attacker-chosen predicates and the caller distinguishes true from false by measuring how long the request takes. MySQL time-based blind injection against INTERVAL is less common than the classic SLEEP-in-WHERE pattern, but the mechanism is the same: the injected branch runs a costly or delayed expression only when a guessed condition is true. The affected CPE is cpe:2.3:a:itflow-org:itflow:* for all releases below 26.07, and the CVSS vector PR:L confirms an authenticated principal is required. The upstream fix commit 63d86917ae0438548d21d4e28e4d3c55176f5cbf replaces sanitizeInput with intval() on the expires parameter, switches the branch comparisons from strings such as 1 HOUR and 24 HOUR to plain integers 1, 24, 168 and 730, and hard-codes the HOUR unit in the INTERVAL clause, which removes the attacker's control over both the expression and the unit.

Know when Itflow gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 8.3 HIGH
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L
vuln.today AI 7.1 HIGH

Network-reachable web handler, low complexity, but requires an authenticated module_support-write account (PR:L); blind read yields high confidentiality, limited integrity via the INSERT and no meaningful availability impact.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
Low

Lifecycle Timeline

2
Patch available
Sep 17, 2026 - 22:04 EUVD
CVE Published
Sep 17, 2026 - 20:34 cve.org
HIGH 8.3

DescriptionCVE.org

ITFlow provides an IT documentation, ticketing and accounting system for small managed service providers. Prior to version 26.07, an authenticated user with module_support write permission and access to a credential record can perform time-based blind SQL injection through the expires parameter of the share_generate_link handler in agent/ajax.php. sanitizeInput applies string-context escaping, but expires is inserted unquoted into the item_expire_at MySQL INTERVAL expression, allowing a crafted expression and interval unit to execute conditional database queries whose results are inferred from response delays. This can expose password hashes, SMTP credentials, API keys, encrypted vault data, and database metadata and support administrative takeover after credential cracking. This issue is fixed in version 26.07.

Technical POC Analysis

CWE-89 (SQL injection via improper neutralization of special elements).

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

ITFlow versions prior to 26.07 contain a time-based blind SQL injection that an authenticated user with module_support write permission and access to a credential record could exploit to extract sensitive secrets such as password hashes, SMTP credentials, API keys, and vault data. Although exploitation requires specific privileges and a slow inference channel, and no public exploit identified at time of analysis, successful abuse could expose credentials used across the organization and enable further compromise. Leadership should prioritize patching and tightening access to the affected support module and credential records.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.3%
Top 76% exploitable
Prevalence
Low
niche open-source IT documentation/ticketing suite for small MSPs
Data Quality
6 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

42
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +42
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

SQL injection exploits the way applications construct database queries by mixing user input directly into SQL statements.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy