Perché qualcuno dovrebbe bloccare tutti i metodi diversi da GET e POST in un'applicazione RESTful?

13

TL; DR:

C'è una ragione valida per chiedere a un fornitore di software di smettere di usare i metodi% PUT e DELETE in un'applicazione web e usare solo GET e POST ? L'applicazione utilizza framework per whitelist percorsi e metodi di richiesta consentiti.

In altre parole, c'è qualche differenza dal punto di vista della sicurezza nel consentire la cancellazione di un record tramite i metodi DELETE o POST senza cambiare il codice e i controlli di sicurezza in esso?

Domanda completa

I nostri clienti hanno configurato la propria istanza Tomcat con quanto segue, in base allo standard aziendale:

<security-constraint> 
    <web-resource-collection> 
        <web-resource-name>restricted methods</web-resource-name> 
        <url-pattern>/*</url-pattern> 
        <http-method>CONNECT</http-method> 
        <http-method>PUT</http-method> 
        <http-method>DELETE</http-method> 
        <http-method>OPTIONS</http-method> 
        <http-method>TRACE</http-method> 
    </web-resource-collection> 
    <user-data-constraint> 
        <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
    <auth-constraint /> 
</security-constraint> 

Questo, tra la configurazione Http Header Security Filter , ha interrotto la nostra applicazione.

La nostra applicazione fornisce le stesse funzionalità Sicurezza intestazione HTTP in Spring Security. Inoltre, la nostra applicazione è RESTful, quindi utilizziamo ampiamente i metodi PUT e DELETE per il caricamento di file. Nelle versioni future, stiamo anche pianificando di utilizzare websocket (ma da una ricerca, non usano CONNECT, che è per il proxy).

Il nostro cliente ha affermato che dovrà generare un'eccezione di criterio nella produzione per rimuovere le righe incriminate dalla configurazione di Tomcat e far funzionare l'applicazione.

La politica delle eccezioni di sicurezza viene attivata quando le applicazioni del fornitore non soddisfano i requisiti di sicurezza in modo che 1) la risoluzione del problema non possa essere eseguita all'interno delle pianificazioni e 2) non venga rilevata alcuna vulnerabilità evidente. Le politiche di eccezione richiedono l'approvazione della direzione.

Tuttavia, le eccezioni della politica di sicurezza richiedono che il nostro cliente coinvolga il fornitore entro 6 mesi in "risoluzione del problema di sicurezza". Entro 6 mesi, il venditore deve fornire costi e scadenze per rispettare la politica di sicurezza.

Ciò significa che torneranno da me chiedendo un preventivo per far funzionare l'applicazione con il filtro dei metodi HTTP abilitato e il filtro HTTP Header Security.

Non voglio fare loro un favore e cambiare tutte le chiamate Ajax dai pattern RESTful a GET / POST solo, nemmeno per denaro, se possibile. Vorrei invece dimostrare che la loro implementazione della sicurezza non è solo incompatibile, ma ridondante, per quanto riguarda le implementazioni di sicurezza all'interno dell'applicazione.

Se creiamo un precedente per fare a questo cliente un favore con richieste PUT e DELETE, dovremo affrontare richieste come "essere compatibile con il mio quadro / politica / ambiente" da una vasta base di clienti (tutte le banche e le istituzioni finanziarie) . In futuro, ciò potrebbe rivelarsi contrario alla nostra gestione dei costi.

La domanda è, come nel TLDR, potrebbe utilizzare solo i metodi PUT e DELETE , indipendentemente dalle funzionalità di sicurezza dell'applicazione, rappresentare un rischio per la sicurezza?

Se è dimostrato che l'unico verbo HTTP non rappresenta un rischio per la sicurezza, sarò in grado di generare una politica di eccezione permanente e confrontare il personale IT con argomentazioni solide.

Modifica

Lavoro in una fabbrica di software che distribuisce la stessa istanza di prodotto a un gran numero di clienti e al nostro cloud. Utilizziamo pienamente tutti gli strumenti che abbiamo a bordo, incluso il modello REST. Stiamo pianificando di utilizzare HATEOAS, WebSockets, download di file ripristinabili e tutto ciò che la tecnologia web ci può offrire per offrire un'esperienza migliore. Sì, sembra una linea di marketing. In ogni caso, la sicurezza è ancora una preoccupazione nei nostri prodotti.

    
posta usr-local-ΕΨΗΕΛΩΝ 14.12.2018 - 17:36
fonte

3 risposte

23

Sospetto che si tratti di qualcuno che applica zelanti "best practice" che non capiscono.

Errore di manomissione del verbale HTTP

La ragione per cui questa best practice esiste è a causa del Tampering Attack del Verbale HTTP. Da questo articolo :

Many Web server authentication mechanisms use verb-based authentication and access controls. For example, an administrator can configure a Web server to allow unrestricted access to a Web page using HTTP GET requests, but restrict POSTs to administrators only. However, many implementations of verb-based security mechanisms enforce the security rules in an unsecure manner, allowing access to restricted resources by using alternative HTTP methods (such as HEAD) or even arbitrary character strings.

Quindi qualcuno ha deciso che, poiché alcune app sono scritte male, tutte le app dovrebbero essere bannate dall'accettare i verbi HTTP diversi da GET o POST, perché ... sai ... mumble mumble SECURITY !!

La mia opinione (possibilmente incompleta / errata, per favore pubblica commenti) :

  • Il contenuto puro HTML / CSS / js deve essere limitato a GET e POST perché sono l'unico verbi consentiti nelle specifiche HTML .
  • Le API
  • (AJAX, REST) devono poter utilizzare qualsiasi verbo dalle specifiche HTTP , che disse:
    • Tieni presente che anche se il tuo livello applicazione applica correttamente i controlli di accesso basati sui verbi, il tuo server web potrebbe non farlo, quindi devi ai tuoi clienti effettuare alcuni test di sicurezza e assicurarti che l'app imponga l'autenticazione e l'accesso corretti controlli su tutti i verbi che supporti. Ti consiglio di seguire la guida ai test OWASP .

Sembra che la tua app sia soddisfacente e che il tuo cliente abbia una politica di sicurezza eccessivamente zelante.

Per inciso, HEAD è un esempio interessante; alcuni scanner di sicurezza sembrano lamentarsi se la tua app risponde alle richieste HEAD, poiché alcune app restituiscono intestazioni valide senza richiamare i corretti controlli dell'autorizzazione. Tuttavia, la maggior parte delle app progettate correttamente elaborerà un GET completo e restituirà solo le intestazioni, incluso il content-length: corretto. Pertanto, per le app che utilizzano i framework moderni, probabilmente non è possibile ignorare la logica di autenticazione sul controller GET. Fai alcuni test rapidi! (Grazie a @ usr-local-ΕΨΗΕΛΩΝ per averlo indicato nei commenti. Vedi questo Stack Overflow post per dettagli su come Spring MVC gestisce questo.)

    
risposta data 14.12.2018 - 18:03
fonte
0

Probabilmente, DELETE e PUT sono più sicuri di GET / POST perché non possono essere usati negli attacchi CSRF. Inoltre, DELETE e PUT dovrebbero essere protetti comunque contro CSRF, perché non è corretto basare la sicurezza della tua applicazione partendo dal presupposto che ogni implementazione del browser là fuori segue gli standard. Ma non è raro che le applicazioni non abbiano quella protezione, quindi forse è questo il pensiero alla base del divieto, anche se sto raggiungendo qui un po '.

O forse hanno semplicemente disabilitato tutti i metodi di cui non avevano bisogno (che è una buona pratica) e nel tempo hanno trasformato da default in una regola non violenta.

    
risposta data 15.12.2018 - 03:46
fonte
0

Raccomando di coinvolgere presto il tuo team legale aziendale, al fine di avere qualcuno che si concentra sugli aspetti commerciali delle discussioni a venire.

As part of the security exception policy, our customer's staff is obligated to engage the vendor in "fixing the security issue" within 6 months.

This means that they will return to me asking to make the application work with enabled HTTP method filtering and HTTP Header Security filter.

I don't want to do them a favour and change all Ajax calls from RESTful patterns to GET/POST only, not even for money.

Il tuo cliente sta ovviamente gestendo la propria burocrazia, facendo rispettare una politica inflessibile. Credi di avere tre possibili percorsi:

  1. Convinci a cambiare la loro politica.
  2. Apporta le modifiche indesiderate.
  3. rischiare di perderli come clienti.

Anche se ti sembra una decisione logica e tecnica, il cambiamento delle politiche richiede una buona dose di dispute politiche. La persona con cui hai a che fare dall'altra parte della discussione può o non può avere la posizione nella sua azienda necessaria per fare una tale richiesta con successo. Potrebbe non voler sprecare il suo tempo combattendo la sua stessa burocrazia per il cambiamento. La sua vita potrebbe essere considerevolmente più facile se cambia i venditori e usa il prodotto di qualcun altro che è già conforme alle loro politiche. Peggio ancora per te, la vita del suo capo sarà quasi certamente più facile se cambia solo i venditori.

Sarebbe irresponsabile da parte tua pensare che puoi riuscire a far cambiare loro politica senza fare una seria pianificazione per gli altri risultati.

I buoni clienti sono abbastanza difficili da trovare. Lo devi alla tua azienda per valutare attentamente il rischio di perdere uno su questo.

    
risposta data 17.12.2018 - 17:25
fonte

Leggi altre domande sui tag