Does HTML Purifier (che converte & to &) previene l'inquinamento dei parametri HTTP?

0

Se un endpoint REST ( link ) legge il parametro di query p e lo passa ad un altro endpoint:

http_get("http://example.com/api2?p=".$_GET['p']); 

Sarò in grado di sfruttarlo aggiungendo il contenuto dopo p : link , che lo causerà per fare una richiesta al link ( %26 viene decodificato in & dal server), che risulterà in un exploit se l'endpoint /api2 legge il parametro admin .

Tuttavia, se utilizzo Purificatore HTML su $_GET['p'] , converte & in & , che interromperà l'attacco a meno che api2 legge amp;admin (che non è probabile nella pratica).

Significa che la fuga di & in & impedirà efficacemente l'exploit? Perché questa pagina ci avvisa di prestare attenzione a &HPP_TEST , quindi?

    
posta Avery235 17.11.2018 - 09:21
fonte

2 risposte

2

L'inquinamento dei parametri HTTP è il processo di manipolazione di un URL per bypassare la convalida dei parametri sul server o WAF. Ad esempio, viene fatto aggiungendo nuovamente un parametro, cioè rendendo la stringa della query foo=1&bar=2 a foo=1&bar=2&bar=bad-value .

Si noti che un URL inquinato è ancora un URL valido e che potrebbe anche essere inteso in quel modo, ad esempio utilizzando un modulo Web con più campi di input con lo stesso nome di campo. Per questo motivo qualsiasi tipo di protezione antinquinamento dei parametri HTTP deve sapere che tipo di URL o parametri sono effettivamente previsti.

Il caso d'uso per il purificatore HTML è completamente diverso: sanifica l'HTML fornito dall'utente prima che venga incluso in qualche HTML generato dal server. Un purificatore HTML non ha idea di come dovrebbe apparire l'URL valido nel contesto dell'applicazione e quindi non può aiutare a proteggere contro l'inquinamento dei parametri HTTP.

Ma usarlo potrebbe effettivamente peggiorare il problema: ad esempio se la stringa di query dell'URL ha i parametri foo=1&bar=2 convertendo questo in HTML risulterà in foo=1&bar=2 che comporterà invece l'estrazione di un parametro amp;bar=2 del previsto bar=2 .

    
risposta data 17.11.2018 - 10:20
fonte
0

Il motivo per cui OWASP avverte di cercare &HPP_TEST è perché è un sintomo della vulnerabilità CLIENT-SIDE hpp. L'attacco che stai descrivendo è contro SERVER-SIDE hpp. Queste sono due cose completamente diverse.

Quindi cos'è l'hpp lato client? Considera se ti mando un link come:

www.example.com?name=avery%26action=delete .

Ora il sito genererà html per quel collegamento. Ad esempio potrebbe avere <a> tag che dipendono dai parametri. Se il sito non è vulnerabile, potrebbe restituire qualcosa di innocuo come

<a href="http://www.example.com/showMessage?name=avery%26action=delete">View</a>

Ma se il sito è vulnerabile potrebbe invece rimandare html come:

<a href="http://www.example.com/showMessage?name=avery&action=delete">View</a>

<a href="http://www.example.com/showMessage?name=avery&amp;action=delete">View</a>

Quindi quello che è successo è che il server è stato manipolato nella creazione di un link che ha parametri extra. Ora se usi www.esempio come faresti normalmente, puoi fare clic sul link per scoprire che sei stato in qualche modo indotto a eliminare i tuoi dati. OWASP ti chiede fondamentalmente di controllare se il tuo server crea questo tipo di HTML dai parametri URL.

Per quanto riguarda la sicurezza dell'uso del purificatore HTML come metodo per prevenire l'hpp lato server; Dirò che sì funzionerà per il tuo caso, ma non è una soluzione così grande perché significa che non sarai mai in grado di creare funzioni che richiedono più di un parametro. È meglio fare la corretta codifica URL e la convalida dell'input.

    
risposta data 17.11.2018 - 11:55
fonte

Leggi altre domande sui tag