Come bypassare la convalida della richiesta .Net 4.5, per un attacco XSS?

7

.Net ha una funzione chiamata richiesta di convalida che rileva input dannosi e blocca la richiesta.

Per sua natura, la richiesta di convalida non è una scienza precisa. OWASP consiglia vivamente di fare affidamento solo sulla convalida delle richieste come difesa in profondità, non come limite di sicurezza.

Sto aggiornando un corso di formazione sulla sicurezza .net e mi piace includere un esempio del perché non si debba fare affidamento sulla convalida della richiesta. Certo, potrei dire ai tirocinanti "non farlo" - ma un esempio è molto potente.

Ho riscontrato che la convalida della richiesta in .Net 4.5 è stata rafforzata e che i miei precedenti metodi di esclusione non funzionano più. Esistono modi pubblicamente noti per aggirare la convalida della richiesta .Net 4.5, per XSS? Il link più recente che ho trovato è stato questo .

    
posta paj28 26.01.2015 - 13:44
fonte

3 risposte

8

Esiste un'area in cui è possibile aggirare la convalida della richiesta, a seconda dell'architettura e della funzione dell'applicazione in esame, motivo per cui Microsoft non consiglia di fare affidamento su di essa.

  • I dati che entrano nell'applicazione tramite un altro canale (ad esempio un'API) non saranno influenzati dalla convalida della richiesta e potrebbero quindi causare problemi XSS se tali dati sono resi senza ulteriori controlli.
  • La convalida delle richieste aiuta solo dove i dati sono inseriti in un contesto HTML, dove è collocato in un contesto JavaScript, ad esempio non fornirà una buona protezione.
  • La convalida della richiesta non copre tutti i dati inviati dal client. Ad esempio, se l'applicazione elabora i dati dalle intestazioni HTTP dell'utente (ad esempio, Agente utente) può rendere il sito vulnerabile a XSS.
  • I dati possono accedere all'applicazione tramite aree come il caricamento di file, che di nuovo non attiveranno sempre la convalida della richiesta.

Aggiornamento Un altro che potrebbe ignorare la convalida della richiesta è l'uso di determinati caratteri Unicode al posto di quelli bloccati. In alcuni casi, MS SQL Server convertirà questi caratteri nell'equivalente ASCII quando i dati vengono salvati nel database. Ciò può consentire a un'applicazione ASP.Net di essere vulnerabile a XSS anche con un vettore HTML. per esempio

se salvato e restituito, potrebbe risultare in xss.

    
risposta data 26.01.2015 - 20:51
fonte
4

Se il contesto di pagina dell'XSS è un tag su un attributo di input, ad es.

<input type="text" name="address" value="<xsshere>"/>

Quindi funziona il seguente payload:

" onfocus="alert(1)" autofocus="
    
risposta data 26.01.2015 - 21:26
fonte
2

Vorrei notare che se si utilizzano i provider di binding predefiniti in ASP.net MVC e il post JSON in un controller, il JSON inviato non attiverà alcuna convalida della richiesta, anche quando è presente contenuto "pericoloso".

Questo potrebbe essere dimostrato relativamente banalmente con un semplice modulo ASP.net che pubblica in modo standard e attiverà la convalida. Prendendo gli stessi dati pubblicati e pubblicandoli nella stessa azione di JSON tramite fiddle (per esempio) non si otterrebbe la stessa validazione.

Esempio annotato qui:

link

E ha anche commentato nel sito OWASP sulla convalida della richiesta:

link

There are known, documented bypasses (such as JSON requests) that will not be addressed in future releases, and the request validation feature is no longer provided in ASP.NET vNext.

    
risposta data 09.08.2017 - 15:23
fonte

Leggi altre domande sui tag