
Un'implementazione in Rust dell'exploit CVE-2018-7600 che prende di mira le installazioni vulnerabili di Drupal 7 (<= 7.57)
Un'implementazione in Rust dell'exploit CVE-2018-7600 che prende di mira installazioni Drupal 7 vulnerabili (<= 7.57). Questa CLI riproduce il seguente flusso PoC: avvelena un form renderizzabile in cache tramite il percorso user/password, estrae un form_build_id, quindi attiva il payload in cache attraverso l'endpoint file/ajax per ottenere l'esecuzione remota di codice tramite l'invocazione di una funzione PHP.
CVE-2018-7600 è una vulnerabilità di esecuzione remota di codice che colpisce Drupal 7 (e Drupal 8 in un contesto diverso). In Drupal 7, il problema deriva da una sanitizzazione insufficiente quando determinati array renderizzabili vengono memorizzati nella cache e successivamente renderizzati. Iniettando metadati di rendering appositamente costruiti in un endpoint che viene memorizzato nella cache, un attaccante può causare l'esecuzione di funzioni PHP arbitrarie quando i dati in cache vengono successivamente renderizzati o richiesti.
#post_render è una funzione PHP arbitraria (ad esempio passthru).?q=user/password con i parametri dell'array renderizzabile appositamente costruiti, così che Drupal memorizzi nella cache il form avvelenato.form_build_id, il PoC attiva il payload chiamando /file/ajax/name/#value/<form_build_id> con il form_build_id nel corpo della richiesta POST. Quando Drupal renderizza l'elemento in cache, il callback #post_render viene eseguito con markup controllato dall'attaccante, consentendo l'esecuzione di comandi.Questa CLI Rust implementa la sequenza in due fasi (poison e trigger) contro un sito Drupal 7 target: costruisce i parametri di richiesta, analizza la risposta HTML per form_build_id, e quindi attiva l'endpoint file/ajax per eseguire la funzione specificata dall'attaccante.
Poiché il client disabilita la verifica dei certificati (per replicare il PoC originale che passava verify=False), lo strumento funzionerà contro target che utilizzano certificati TLS autofirmati o altrimenti non validi. Questo comportamento può essere modificato nel codice sorgente se si preferisce richiedere certificati validi.
Utilizzo di base (comando predefinito: whoami, funzione predefinita: passthru):
cargo run -- -u http://target.com/
Esegui un comando e una funzione personalizzati:
cargo run -- -u http://target.com/ -c "whoami" -f "passthru"
Utilizza un proxy HTTP/S (formato: http://127.0.0.1:8080/):
cargo run -- -u http://target.com/ -p http://127.0.0.1:8080/
Riepilogo delle opzioni della CLI:
-u, target: URL del sito Drupal target (ad es. http://target.com/).-c, --command: Comando da eseguire sul target (predefinito: whoami).-f, --function: Funzione PHP da usare come vettore d'attacco (predefinito: passthru).-p, --proxy: URL proxy opzionale attraverso cui instradare le richieste.Esempio del flusso completo:
user/password, inserendo il callback #post_render e il #markup contenente il comando.form_build_id all'interno di form#user-pass.?q=file/ajax/name/#value/<form_build_id> con il form_build_id per attivare il rendering ed eseguire il comando.Questo strumento è destinato esclusivamente a scopi educativi e di test di penetrazione autorizzati. Utilizzalo in modo responsabile e solo su sistemi di tua proprietà o per i quali hai ricevuto esplicita autorizzazione.