OpenSTAManager Global Search Amplified Time-Based Blind SQL Injection — CVE-2026-24417
by Łukasz Rybak (lukasz-rybak) · 2026-07-05
- Severity
- High
- CVE
- CVE-2026-24417
- Category
- web
- Affected product
- OpenSTAManager (devcode-it/openstamanager)
- Affected versions
- < 2.9.8
- Disclosed
- 2026-07-05
- Patch status
- patched
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-05 |
| Last Updated | 2026-04 |
| Author / Researcher | Łukasz Rybak (lukasz-rybak) |
| CVE / Advisory | CVE-2026-24417 |
| Category | web |
| Severity | High |
| CVSS Score | Not specified in source |
| Status | PoC |
| Tags | sql-injection, time-based-blind, openstamanager, php, denial-of-service, ajax, authenticated |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | OpenSTAManager (devcode-it/openstamanager) |
| Versions Affected | < 2.9.8 |
| Language / Platform | PHP web application; PoC written in Bash (curl) |
| Authentication Required | Yes (any valid authenticated user) |
| Network Access Required | Yes |
Summary
OpenSTAManager’s global search AJAX endpoint (/ajax_search.php) dispatches the user-supplied term parameter to more than ten module-specific search handlers (Articoli, Ordini, DDT, Fatture, Preventivi, Anagrafiche, Impianti, and others), each of which concatenates term directly into a SQL LIKE clause without using the framework’s prepare() sanitizer. Because a single request fans out across all vulnerable modules, an injected time-based payload executes repeatedly in one HTTP call, multiplying the delay far beyond a normal single-injection point — turning what would be a blind SQLi into both a data-exfiltration primitive and a resource-exhaustion / denial-of-service vector. The PoC demonstrates the amplified timing effect and boolean-based data extraction from the DATABASE() function.
Vulnerability Details
Root Cause
The term GET parameter is minimally sanitized (only forward-slash escaping) in /ajax_search.php before being passed unchanged to at least seven module search handlers that build SQL LIKE clauses via string concatenation instead of prepare().
Attack Vector
- Authenticate to the OpenSTAManager instance with any valid account.
- Send a GET request to
/ajax_search.php?term=...containing a boolean/time-based SQL payload appended to a closing quote (e.g." AND 0 OR SLEEP(1) OR "). - Because the payload is injected identically into ~10 module queries, the SLEEP executes repeatedly per request, amplifying the observable delay (tests showed ~72s for a single-second SLEEP payload).
- Use the amplified timing channel with
SUBSTRING(DATABASE(),N,1)comparisons to blind-extract database contents.
Impact
Full database exfiltration (credentials, PII, financial data) plus a request-amplification denial-of-service effect that can exhaust server resources with disproportionately expensive single requests (504 Gateway Timeout observed on the live demo instance).
Environment / Lab Setup
Target: OpenSTAManager < 2.9.8 (PHP/MySQL), e.g. http://localhost:8081
Attacker: curl
Proof of Concept
PoC Script
See
poc_search_sqli.shin this folder.
| |
The script logs in, sends a SLEEP(1) payload via the term parameter to /ajax_search.php and times the amplified response, sends a SLEEP(0) baseline for comparison, and finally issues a boolean data-extraction probe against DATABASE().
Detection & Indicators of Compromise
GET /ajax_search.php?term=%22%20AND%200%20OR%20SLEEP(...)%20OR%20%22 ... response time >> baseline (amplified across modules)
Signs of compromise:
- A handful of requests to
ajax_search.phpeach taking many multiples of normal response time (amplification signature, unlike a single-module SQLi). - Elevated database CPU/thread count correlated with individual authenticated sessions hitting the search endpoint.
- SQL function names (
SLEEP,SUBSTRING,DATABASE) present in decodedtermparameter values in logs.
Remediation
| Action | Detail |
|---|---|
| Primary fix | Replace direct $term concatenation with prepare() in every affected module’s search.php (Articoli, Ordini, DDT, Fatture, Preventivi, Anagrafiche, Impianti, etc.) — upgrade to a patched OpenSTAManager release once available. |
| Interim mitigation | Add request-timeout/rate limiting on ajax_search.php and a WAF rule blocking SQL meta-characters/functions in the term parameter. |
References
Notes
Mirrored from https://github.com/lukasz-rybak/CVE-2026-24417 on 2026-07-05.
| |