Salta al contenuto principale


La Macchina del Tempo delle Vulnerabilità: vBulletin 4.x e PHP Object Injection


A volte, è utile guardare indietro per comprendere meglio le minacce attuali. Un esempio ci arriva da una vecchia, ma sempre attuale, vulnerabilità di PHP Object Injection che interessa vBulletin 4.x.

Circa un decennio fa, il popolare software per forum web, vBulletin 4.x, fu interessato da una vulnerabilità di PHP Object Injection. Questa falla critica è stata trovata e documentata dal ricercatore di sicurezza Egidio Romano (EgiX) che ha recentemente rilevato un’altra vulnerabilità su vBulletin.

Curiosamente, questa falla fu introdotta da una patch di sicurezza del 2014 che, nel tentativo di migliorare la protezione, sostituì serialize() con json_encode(), creando involontariamente un nuovo vettore di attacco: la possibilità di eseguire una PHP Object Injection.

Questa modifica potrebbe permettere agli aggressori di firmare payload serializzati codificati in base64, portando potenzialmente ad attacchi di esecuzione di codice remoto (RCE) tramite chiamate malevole a /private.php.

La vulnerabilità risiede nella funzione verify_client_string(), progettata per prevenire la manomissione dei dati lato client. Tuttavia, a causa del modo in cui json_encode() e base64_decode() gestiscono i dati, gli aggressori possono aggirare questi controlli. Un payload ben congegnato, iniettato attraverso il parametro POST messageids in /private.php, può portare alla deserializzazione di oggetti malevoli.

L’analisi ha rivelato che, combinando questa iniezione, è possibile costruire una “POP chain” (Property Oriented Programming chain). Una POP chain è una sequenza di oggetti serializzati, che grazie a chiamate a metodi magici di PHP (__wakeup(), __destruct(), __call(), ecc.) che vengono invocate automaticamente durante la deserializzazione o la manipolazione di oggetti, potrebbero permettere all’attaccante di eseguire codice arbitrario.

In questo caso specifico, è stata sfruttata la classe DateTime di PHP, che, in combinazione con le strutture di classe di vBulletin, ha consentito l’esecuzione arbitraria di codice sul server. La vulnerabilità è stata testata e confermata su vBulletin versione 4.2.3 Patch Level 2, 4.2.3 e 4.2.2 con le “security patches” applicate, su PHP versione 5.6.5. Si noti infatti che questa “POP chain” funziona solo con alcune vecchie versioni di PHP (5.3.0. – 5.3.29, 5.4.0 – 5.4.37, 5.5.0 – 5.5.21, e 5.6.0 – 5.6.5).

Questa storia evidenzia i pericoli della deserializzazione insicura e i rischi derivanti dall’applicazione di patch di sicurezza affrettate a codice legacy. Anche nei sistemi più datati, le moderne tecniche di exploit possono essere estremamente efficaci. Le vulnerabilità di vBulletin, sia quelle più datate che quelle più recenti, ci ricordano l’importanza di mantenere i sistemi aggiornati e di adottare pratiche di sviluppo sicure per proteggersi da attacchi potenzialmente devastanti.

L'articolo La Macchina del Tempo delle Vulnerabilità: vBulletin 4.x e PHP Object Injection proviene da il blog della sicurezza informatica.