API REST e sicurezza

2

In alcune occasioni, i pen-tester mi hanno chiesto di evitare l'uso di codici di ritorno HTTP dettagliati che potrebbero rivelare informazioni a un utente malintenzionato.

Ad esempio, hanno detto che è sbagliato restituire un 404 quando la risorsa non esiste perché questo aiuta a enumerare le risorse esistenti.

Tutti gli articoli che ho letto sulle migliori pratiche per lo sviluppo di API, suggeriscono di restituire codici di errore significativi e in particolare sottolineano che un 404 deve essere restituito quando l'identificatore della risorsa in un GET non corrisponde ad un esistente risorsa.

Questo comportamento non è una vulnerabilità di sicurezza?

Vedi Codici di stato HTTP come esempio

    
posta Marco Altieri 07.05.2017 - 21:24
fonte

1 risposta

7

Se hai questo problema con Y,

it is wrong to return a 404 when the resource does not exist because this helps to enumerate the existing resources.

quindi questo significa che hai questo problema con X:

L'enumerazione delle risorse dovrebbe essere prevenuta .

Questo a sua volta potrebbe influenzare tutte le risorse o solo le risorse non autenticate. In altre parole, potresti essere in grado di mitigare il problema richiedendo l'autenticazione prima di richiedere una determinata risorsa.

Altrimenti, potresti rendere difficile indovinare la risorsa e implementare una sorta di rilevamento dello scanner (è sufficiente memorizzare le risorse che ottengono 404'ed da quale rete per un po 'di tempo potrebbe essere sufficiente. Potresti forse scaricare il problema su un'installazione di fail2ban ).

Il problema come detto ha poco senso perché non è possibile restituire una risorsa valida se ne è stata richiesta una non valida; in generale, non è possibile creare risorse sensibili e credibili dal nulla! Quindi sempre sarà un modo per distinguere tra risorse esistenti e risorse che non lo fanno. Certo, fornire le informazioni in un'intestazione di stato HTTP rende le cose più semplici per l'aggressore, ma rende anche le cose più facili per tu .

In alcuni casi potresti essere in grado di sintetizzare una risorsa inesistente. Ad esempio, dì che offri qualcosa di simile a un servizio di avatar. Quindi /users/lserni/avatar.png potrebbe restituire la mia immagine, mentre /users/someoneelse/avatar.png potrebbe restituire un'immagine casuale generata usando "qualcunoelse" come seme casuale, in modo che lo stesso qualcun altro riceva sempre lo stesso PNG. Ma come vedi, questo tipo di approccio richiede una conoscenza specifica del dominio, non ci può essere una regola valida per tutti.

    
risposta data 07.05.2017 - 22:01
fonte

Leggi altre domande sui tag