HTTP Response Splitting e PHP

8

Ci sono numerosi riferimenti alle vulnerabilità di HTTP Response Splitting (HRS) con PHP risolte da 4.4.2 e 5.1.2 (ad esempio link ) o per circa 9 anni.

Eppure CVE-2013-2652 ha segnalato una vulnerabilità in WebCollab utilizzando PHP, anche se il proof-of-concept ( link ) ha specificato una versione PHP di 5.4.7. L'identificazione del problema utilizza "% 0d% 0a" nella sua istruzione problema.

Ho sperimentato personalmente PHP e in effetti evito di consentire l'inserimento della sequenza esadecimale a 2 byte 0x0d0x0a, ma non impedisce l'inserimento della sequenza di 6 caratteri equivalente% -d% 0a.

Almeno sulla superficie, questa sembra essere un po 'una contraddizione. Cioè che 1) PHP non è sicuro per HRS come suggerito poiché consente di inserire la sequenza di 6 caratteri "% 0d% 0a" in un'intestazione o 2) la vulnerabilità dichiarata in CVE-2013-2652 (che "% 0d % 0a "poteva essere scritto da un'applicazione PHP) era almeno significativamente sopravvalutato.

Quale di questi è vero? (O è qualcosa di completamente diverso?)

(Note: a) Comprendo perfettamente che è meglio convalidare o disinfettare i dati forniti dall'utente indipendentemente da quali siano le altre protezioni disponibili. b) La correzione WebCollab era abbastanza semplice e fa proprio questo: convalidare l'input fornito dall'utente per i caratteri consentiti. Sono più interessato qui alla robustezza della sicurezza HRS di PHP e alla natura di qualsiasi pericolo, se esiste.)

    
posta Henry 21.12.2015 - 17:19
fonte

1 risposta

5

@tim ha ragione. L'exploit utilizza la sequenza %0D%0A%20 che è decodificata da URL a CR + LF + SPACE e grazie allo spazio extra potrebbe ignorare la protezione di divisione in alcuni browser.

C'era una volta una funzione chiamata folding di riga che consentiva che le intestazioni HTTP si estendessero su più righe preponendo ogni riga aggiuntiva con uno spazio o una scheda. Successivamente è stato rilasciato in RFC 7230 . È successo che Internet Explorer ha trattato le continuazioni dell'intestazione con gli spazi iniziali come se fossero più intestazioni individuali mentre PHP non ha ancora implementato l'RFC, lasciando IE vulnerabile allo stratagemma spaziale. Questo problema è stato risolto nel febbraio 2015 (bug # 68978 ) e infine implementato in PHP < strong> 5.4.38 , quindi la versione 5.4.7 era ancora interessata all'epoca.

Dal registro delle modifiche per la versione 5.4.38:

Removed support for multi-line headers, as they are deprecated by RFC 7230.

Puoi vedere nel commit corrispondente che header() ora respinge completamente eventuali ritorni a capo e avanzamenti di riga, indipendentemente dalla loro posizione. In conclusione, gli exploit di divisione della risposta tramite questo particolare metodo dovrebbero oggi essere obsoleti.

    
risposta data 09.01.2016 - 06:23
fonte

Leggi altre domande sui tag