CVE-2026-35168
OpenSTAManager: SQL Injection via Aggiornamenti Module
OpenSTAManager is an open source management software for technical assistance and invoicing. Prior to version 2.10.2, the Aggiornamenti (Updates) module in OpenSTAManager contains a database conflict resolution feature (op=risolvi-conflitti-database) that accepts a JSON array of SQL statements via POST and executes them directly against the database without any validation, allowlist, or sanitization. An authenticated attacker with access to the Aggiornamenti module can execute arbitrary SQL statements including CREATE, DROP, ALTER, INSERT, UPDATE, DELETE, SELECT INTO OUTFILE, and any other SQL command supported by the MySQL server. Foreign key checks are explicitly disabled before execution (SET FOREIGN_KEY_CHECKS=0), further reducing database integrity protections. This issue has been patched in version 2.10.2.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
8.8
OpenSTAManager: SQL Injection via Aggiornamenti Module
OpenSTAManager is an open source management software for technical assistance and invoicing. Prior to version 2.10.2, the Aggiornamenti (Updates) module in OpenSTAManager contains a database conflict resolution feature (op=risolvi-conflitti-database) that accepts a JSON array of SQL statements via POST and executes them directly against the database without any validation, allowlist, or sanitization. An authenticated attacker with access to the Aggiornamenti module can execute arbitrary SQL statements including CREATE, DROP, ALTER, INSERT, UPDATE, DELETE, SELECT INTO OUTFILE, and any other SQL command supported by the MySQL server. Foreign key checks are explicitly disabled before execution (SET FOREIGN_KEY_CHECKS=0), further reducing database integrity protections. This issue has been patched in version 2.10.2.
- Record
CVE-2026-35168- CVSS 3.1
- 8.8 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-89
- Updated
- 2026-11-02
EUVDEUVD-2026-18336
8.8
OpenSTAManager is an open source management software for technical assistance and invoicing. Prior to version 2.10.2, the Aggiornamenti (Updates) module in OpenSTAManager contains a database conflict resolution feature (op=risolvi-conflitti-database) that accepts a JSON array of SQL statements via POST and executes them directly against the database without any validation, allowlist, or sanitization. An authenticated attacker with access to the Aggiornamenti module can execute arbitrary SQL statements including CREATE, DROP, ALTER, INSERT, UPDATE, DELETE, SELECT INTO OUTFILE, and any other SQL command supported by the MySQL server. Foreign key checks are explicitly disabled before execution (SET FOREIGN_KEY_CHECKS=0), further reducing database integrity protections. This issue has been patched in version 2.10.2.
- Record
EUVD-2026-18336- CVSS 3.1
- 8.8 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-2fr7-cc4f-wh98
8.8
OpenSTAManager: SQL Injection via Aggiornamenti Module
Description
The Aggiornamenti (Updates) module in OpenSTAManager <= 2.10.1 contains a database conflict resolution feature (op=risolvi-conflitti-database) that accepts a JSON array of SQL statements via POST and executes them directly against the database without any validation, allowlist, or sanitization.
An authenticated attacker with access to the Aggiornamenti module can execute arbitrary SQL statements including CREATE, DROP, ALTER, INSERT, UPDATE, DELETE, SELECT INTO OUTFILE, and any other SQL command supported by the MySQL server. Foreign key checks are explicitly disabled before execution (SET FOREIGN_KEY_CHECKS=0), further reducing database integrity protections.
Affected Code
File: modules/aggiornamenti/actions.php, lines 40-82
case 'risolvi-conflitti-database':
$queries_json = post('queries'); // Line 41: User input from POST
// ...
$queries = json_decode($queries_json, true); // Line 50: JSON decoded to array
// ...
$dbo->query('SET FOREIGN_KEY_CHECKS=0'); // Line 69: FK checks DISABLED
$errors = [];
$executed = 0;
foreach ($queries as $query) {
try {
$dbo->query($query); // Line 76: DIRECT EXECUTION
++$executed;
} catch (Exception $e) {
$errors[] = $query.' - '.$e->getMessage(); // Line 79: Error details leaked
}
}
$dbo->query('SET FOREIGN_KEY_CHECKS=1'); // Line 82: FK checks re-enabled
Key Issues
- No query validation: The SQL statements from user input are executed directly via
$dbo->query()without any validation or filtering. - No allowlist: There is no restriction on which SQL commands are permitted (e.g., only
ALTER TABLEorCREATE INDEX). - Foreign key checks disabled:
SET FOREIGN_KEY_CHECKS=0is executed before the user queries, allowing data integrity violations. - Error message leakage: Exception messages containing database structure details are returned in the JSON response (line 79).
- No authorization check: The action only requires module-level access, with no additional authorization for this destructive operation.
Root Cause Analysis
Data Flow
- Attacker sends POST request to
/editor.php?id_module=<Aggiornamenti_ID>withop=risolvi-conflitti-databaseandqueries=["<arbitrary SQL>"] editor.phpincludesactions.php(root), which checks module permission ($structure->permission == 'rw') at line 472- Root
actions.phpincludes the module'sactions.phpat line 489 modules/aggiornamenti/actions.phpreads thequeriesPOST parameter (line 41)- JSON-decodes it into an array of strings (line 50)
- Iterates over each string and executes it as a SQL query via
$dbo->query()(line 76)
Why This Is Exploitable
- The feature is intended for resolving database schema conflicts during updates
- However, there is no restriction on what SQL can be executed
- Any authenticated user with
rwpermission on the Aggiornamenti module can exploit this - The default admin account always has access to this module
Proof of Concept
Prerequisites
- A valid user account with access to the Aggiornamenti module
Step 1: Authenticate
POST /index.php HTTP/1.1
Host: <target>
Content-Type: application/x-www-form-urlencoded
op=login&username=<user>&password=<pass>
Save the PHPSESSID cookie.
Step 2: Detect Aggiornamenti Module ID
Navigate to the application dashboard and inspect the sidebar links. The Aggiornamenti module URL contains id_module=<ID>. Default value in a standard installation: 6.
Step 3: Execute Arbitrary SQL
Request (captured in Burp Suite):
POST /editor.php?id_module=6&id_record=6 HTTP/1.1
Host: 127.0.0.1:8888
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Accept-Encoding: gzip, deflate, br…
- Record
GHSA-2fr7-cc4f-wh98- CVSS 3.1
- 8.8 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-89
- Updated
- 2026-11-02
NVD
8.8
OpenSTAManager is an open source management software for technical assistance and invoicing. Prior to version 2.10.2, the Aggiornamenti (Updates) module in OpenSTAManager contains a database conflict resolution feature (op=risolvi-conflitti-database) that accepts a JSON array of SQL statements via POST and executes them directly against the database without any validation, allowlist, or sanitization. An authenticated attacker with access to the Aggiornamenti module can execute arbitrary SQL statements including CREATE, DROP, ALTER, INSERT, UPDATE, DELETE, SELECT INTO OUTFILE, and any other SQL command supported by the MySQL server. Foreign key checks are explicitly disabled before execution (SET FOREIGN_KEY_CHECKS=0), further reducing database integrity protections. This issue has been patched in version 2.10.2.
- Record
CVE-2026-35168- CVSS 3.1
- 8.8 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-89
- Updated
- 2026-11-02
OSV
8.8
OpenSTAManager: SQL Injection via Aggiornamenti Module
OpenSTAManager is an open source management software for technical assistance and invoicing. Prior to version 2.10.2, the Aggiornamenti (Updates) module in OpenSTAManager contains a database conflict resolution feature (op=risolvi-conflitti-database) that accepts a JSON array of SQL statements via POST and executes them directly against the database without any validation, allowlist, or sanitization. An authenticated attacker with access to the Aggiornamenti module can execute arbitrary SQL statements including CREATE, DROP, ALTER, INSERT, UPDATE, DELETE, SELECT INTO OUTFILE, and any other SQL command supported by the MySQL server. Foreign key checks are explicitly disabled before execution (SET FOREIGN_KEY_CHECKS=0), further reducing database integrity protections. This issue has been patched in version 2.10.2.
- Record
CVE-2026-35168- CVSS 3.1
- 8.8 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-89
- Updated
- 2026-11-02
OSVGHSA-2fr7-cc4f-wh98
8.8
OpenSTAManager: SQL Injection via Aggiornamenti Module
Description
The Aggiornamenti (Updates) module in OpenSTAManager <= 2.10.1 contains a database conflict resolution feature (op=risolvi-conflitti-database) that accepts a JSON array of SQL statements via POST and executes them directly against the database without any validation, allowlist, or sanitization.
An authenticated attacker with access to the Aggiornamenti module can execute arbitrary SQL statements including CREATE, DROP, ALTER, INSERT, UPDATE, DELETE, SELECT INTO OUTFILE, and any other SQL command supported by the MySQL server. Foreign key checks are explicitly disabled before execution (SET FOREIGN_KEY_CHECKS=0), further reducing database integrity protections.
Affected Code
File: modules/aggiornamenti/actions.php, lines 40-82
case 'risolvi-conflitti-database':
$queries_json = post('queries'); // Line 41: User input from POST
// ...
$queries = json_decode($queries_json, true); // Line 50: JSON decoded to array
// ...
$dbo->query('SET FOREIGN_KEY_CHECKS=0'); // Line 69: FK checks DISABLED
$errors = [];
$executed = 0;
foreach ($queries as $query) {
try {
$dbo->query($query); // Line 76: DIRECT EXECUTION
++$executed;
} catch (Exception $e) {
$errors[] = $query.' - '.$e->getMessage(); // Line 79: Error details leaked
}
}
$dbo->query('SET FOREIGN_KEY_CHECKS=1'); // Line 82: FK checks re-enabled
Key Issues
- No query validation: The SQL statements from user input are executed directly via
$dbo->query()without any validation or filtering. - No allowlist: There is no restriction on which SQL commands are permitted (e.g., only
ALTER TABLEorCREATE INDEX). - Foreign key checks disabled:
SET FOREIGN_KEY_CHECKS=0is executed before the user queries, allowing data integrity violations. - Error message leakage: Exception messages containing database structure details are returned in the JSON response (line 79).
- No authorization check: The action only requires module-level access, with no additional authorization for this destructive operation.
Root Cause Analysis
Data Flow
- Attacker sends POST request to
/editor.php?id_module=<Aggiornamenti_ID>withop=risolvi-conflitti-databaseandqueries=["<arbitrary SQL>"] editor.phpincludesactions.php(root), which checks module permission ($structure->permission == 'rw') at line 472- Root
actions.phpincludes the module'sactions.phpat line 489 modules/aggiornamenti/actions.phpreads thequeriesPOST parameter (line 41)- JSON-decodes it into an array of strings (line 50)
- Iterates over each string and executes it as a SQL query via
$dbo->query()(line 76)
Why This Is Exploitable
- The feature is intended for resolving database schema conflicts during updates
- However, there is no restriction on what SQL can be executed
- Any authenticated user with
rwpermission on the Aggiornamenti module can exploit this - The default admin account always has access to this module
Proof of Concept
Prerequisites
- A valid user account with access to the Aggiornamenti module
Step 1: Authenticate
POST /index.php HTTP/1.1
Host: <target>
Content-Type: application/x-www-form-urlencoded
op=login&username=<user>&password=<pass>
Save the PHPSESSID cookie.
Step 2: Detect Aggiornamenti Module ID
Navigate to the application dashboard and inspect the sidebar links. The Aggiornamenti module URL contains id_module=<ID>. Default value in a standard installation: 6.
Step 3: Execute Arbitrary SQL
Request (captured in Burp Suite):
POST /editor.php?id_module=6&id_record=6 HTTP/1.1
Host: 127.0.0.1:8888
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Accept-Encoding: gzip, deflate, br…
- Record
GHSA-2fr7-cc4f-wh98- CVSS 3.1
- 8.8 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-89
- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
devcode-it/openstamanagerPackagist |
through 2.10.1 | 2.10.2 |
devcode-it/openstamanagerPackagist |
before 2.10.2, plus listed versions 2.3.0v2.10-betav2.10.1v2.4v2.4.1 Show 45 moreShow lessv2.4.10v2.4.11v2.4.12v2.4.13v2.4.14v2.4.15v2.4.16v2.4.17v2.4.17.1v2.4.18v2.4.19v2.4.2v2.4.20v2.4.21v2.4.22v2.4.23v2.4.24v2.4.25v2.4.26v2.4.27v2.4.28v2.4.29v2.4.3v2.4.30v2.4.31v2.4.32v2.4.33v2.4.34v2.4.35v2.4.36v2.4.37v2.4.38v2.4.39v2.4.4v2.4.40v2.4.41v2.4.42v2.4.43v2.4.44v2.4.45v2.4.46v2.4.47v2.4.48v2.4.49v2.4.5 |
2.10.2 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-35168 is a high vulnerability (CVSS 8.8) in Devcode Openstamanager, published April 2, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.68%, the 52nd percentile. Fixed in devcode-it/openstamanager 2.10.2.
References
github.com/devcode-it/openstamanager/security/advisories/GHSA-2fr7-cc4f-wh98
github.com/devcode-it/openstamanager/commit/43970676bcd6636ff8663652fd82579f737abb74
github.com/devcode-it/openstamanager/releases/tag/v2.10.2
nvd.nist.gov/vuln/detail/CVE-2026-35168
github.com/advisories/GHSA-2fr7-cc4f-wh98
github.com/CVEProject/cvelistV5/tree/main/cves/2026/35xxx/CVE-2026-35168.json
github.com/devcode-it/openstamanager
Left out here: 39 versions and the rest of 2 source descriptions. The JSON record has them.