
Proof-of-concept per CVE-2024-43018: SQL injection in Piwigo 13.8.0 tramite parametri max_level e min_register non sanificati, consentendo divulgazione di informazioni e potenziale esecuzione di codice.
Durante l'indagine per la tesi https://hdl.handle.net/10316/118126 e https://hdl.handle.net/10316/118059 è stata scoperta una nuova vulnerabilità nell'applicazione Piwigo. Questa vulnerabilità deriva dalla mancanza di sanitizzazione di alcuni parametri in una ricerca filtrata dal seguente punto, HOST/admin.php?page=user_list.
Più specificamente, Piwigo 13.8.0 e versioni precedenti è vulnerabile a SQL Injection nei parametri max_level e min_register. Questi parametri vengono utilizzati nella funzione ws_user_gerList dal file include\ws_functions\pwg.users.php e questa stessa funzione, che viene chiamata dal file ws.php a un certo punto, può essere utilizzata per cercare utenti in modo avanzato in /admin.php?page=user_list. Ciò potrebbe portare a diverse conseguenze come "Esecuzione di Codice" e "Divulgazione di Informazioni" manipolando le query SQL, quindi questi parametri devono essere sanitizzati prima di essere utilizzati in qualsiasi query SQL. Ciò riguarda la versione 12.2.0 e potrebbe riguardare versioni future, poiché è stata segnalata una vulnerabilità simile in versione 13.8.0.
I parametri menzionati (max_level e min_register) sono raggruppati in una variabile che li utilizzerà nell'esecuzione di una query SQL:

Prima entra nella pagina HOST/admin.php?page=user_list

Seguendo la richiesta inviata tramite Firefox, possiamo vedere che esistono diversi parametri

Se manipoliamo i parametri 'max_level' e 'min_register' per includere un apice e poi reinviamo la richiesta, apparirà un errore MYSQL (mostrando anche la query SQL eseguita), il che prova l'esistenza di una vulnerabilità di SQL Injection in entrambi i campi.
'max_level'

'min_register'

Ad oggi, gli sviluppatori hanno messo in atto una correzione per questo problema che è semplicemente un approccio di whitelist, come menzionato in: https://github.com/Piwigo/Piwigo/issues/2197. Questa ovviamente non è la soluzione migliore, poiché sarebbe meglio aggiungere query parametrizzate, ma poiché non è possibile (per motivi logistici menzionati dagli sviluppatori) è consigliabile utilizzare un Web Application Firewall per aggiungere un ulteriore livello di protezione.