Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconAuthenticate with module_support write permission
-
DeliveryOpen a shared credential record
-
ExploitSubmit crafted expires value to share_generate_link
-
InstallBreak out of unquoted INTERVAL expression
-
C2Infer query results from response delays
-
ExecuteExtract and crack password hashes/credentials
-
ImpactEscalate 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L
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.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.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
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.
Apply vendor patch.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
SQL injection exploits the way applications construct database queries by mixing user input directly into SQL statements.
Stored cross-site scripting in ITFlow's inbound email-to-ticket parser (cron/ticket_email_parser.php) lets a remote, una
Cross Site Scripting vulnerability in ITFlow.org before commit v.432488eca3998c5be6b6b9e8f8ba01f54bc12378 allows a remto
SQL injection in ITFlow versions prior to 26.07 allows an authenticated user with the Technician role or higher who has
Insecure Direct Object Reference (IDOR) in ITFlow allows a low-privileged authenticated agent to exfiltrate plaintext cr
An SQL injection vulnerability in Itflow through 25.06 has been identified in the "role_id" parameter when editing a pro
EUVD-2026-82470
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB