Che cosa fa il token URL in phpMyAdmin se non impedisce CSRF?

2

Ho visto che esisteva un exploit di sicurezza per phpMyAdmin che utilizza la falsificazione di richieste tra siti (CSRF) . Ho sempre pensato che il parametro ?token= in tutti gli URL phpMyAdmin impedisse questo, ma poi ho letto questo:

To prepare a CSRF attack URL, the attacker should be aware of the name of targeted database and table.

Questo implica che l'attaccante non ha bisogno di conoscere il token. Ho provato questo copiando il link per il pulsante di rilascio tabella per un DB di test nel mio phpMyAdmin, rimuovendo il parametro ?token= . Con mia sorpresa ha fatto cadere il tavolo.

Questo parametro token ha lo scopo di prevenire CSRF? In caso contrario, quale scopo serve?

    
posta Goose 04.01.2018 - 17:01
fonte

1 risposta

3

Il parametro token URL è effettivamente un token CSRF anti. Si tratta di messaggio di commit che corregge la vulnerabilità :

Bring back token validation to GET requests

This is necessary to avoid CSRF on SQL queries. This is really more a short term fix, proper fix (to be implemented in master) is to avoid accepting SQL queries from GET requests.

Da questo, possiamo capire che la vulnerabilità era il risultato di due errori in combinazione:

  1. Accettare query SQL - un'operazione di modifica dello stato - da richieste GET. Ciò si discosta dalla filosofia dietro i verbi HTTP e in generale una cattiva idea.
  2. Non controlla il token CSRF per le richieste GET.

Sembra che phpMyAdmin inizialmente non distingua bene GET e POST. Per esempio. il token si trova in un parametro URL, non in un campo modulo nascosto e il codice utilizza $_REQUEST per controllarlo.

Poi qualcuno ha provato a risolverlo, disabilitando le richieste GET che cambiano stato e il controllo dei token per le richieste GET poiché non era più necessario. Sfortunatamente, non sono riusciti al primo, ma non al secondo, e quindi la vulnerabilità è nata.

    
risposta data 04.01.2018 - 17:58
fonte

Leggi altre domande sui tag