
OpenSIS SQLi Injection
OpenSIS Iniezione SQL autenticata
Esiste una vulnerabilità di iniezione SQL in Ajax.php, ForWindow.php, ForExport.php, Modules.php, functions/HackingLogFnc.php. Questa scoperta riguarda OpenSis Community Edition dalla 9.1 alla 8.0 e possibilmente versioni precedenti.
In uno degli esempi, Ajax.php, si può vedere che gli IP possono essere registrati e inseriti nel database se si incontrano attività dannose. Una cosa da notare è che se viene inviato l'header “X-Forwarded-For”, l'applicazione prenderà quel valore al posto del valore $_SERVER['REMOTE_ADDR']. Poiché $ip viene concatenato direttamente nell'istruzione SQL senza alcuna forma di sanitizzazione, è possibile eseguire un'iniezione SQL.

Nella prova di concetto seguente, l'iniezione del payload, ' AND SLEEP(7) AND '1'='1, ha causato all'applicazione di attendere 7 secondi, indicando che l'iniezione SQL è riuscita.

Il controllo del log del database conferma ulteriormente questa vulnerabilità.

Infine, l'utilizzo di SQLMap, uno strumento automatizzato per l'iniezione SQL, ha confermato la vulnerabilità.

Le righe di codice interessate aggiungono direttamente il valore da $_SERVER['HTTP_X_FORWARDED_FOR'] a un'istruzione SQL.
• Ajax.php (Righe 260-275)
• Modules.php (Righe 1005-1023)
• ForExport.php (Righe 135-147)
• ForWindow.php (Righe 124-136)
• functions/HackingLogFnc.php (Righe 47-68)
• Invece di costruire dinamicamente query SQL concatenando direttamente l'input dell'utente nell'istruzione SQL, utilizzare query parametrizzate (note anche come prepared statements). Le query parametrizzate separano il codice SQL dall'input dell'utente, riducendo significativamente il rischio di attacchi di iniezione SQL.
• Implementare tecniche robuste di validazione e sanitizzazione dell'input per garantire che i dati forniti dall'utente siano conformi ai formati previsti e non contengano codice SQL dannoso. Convalidare tipo, lunghezza e formato dei dati di input e sanificare gli input sfuggendo ai caratteri speciali o utilizzando liste bianche (whitelist) per consentire solo caratteri o pattern specifici.
• Non utilizzare $_SERVER[‘HTTP_X_FORWARDED_FOR’] per registrare gli IP.