Domanda:
Esiste un rischio per la sicurezza durante l'esecuzione di app Web in debug = "true"?
Troy Hunt
2010-12-16 06:56:35 UTC
view on stackexchange narkive permalink

Questa è una copia della domanda originale su Stack Overflow che non è stata molto apprezzata ed è probabilmente più pertinente qui:

Ci sono molti motivi di prestazioni per cui le app non dovrebbe essere eseguito in modalità debug = "true" ( buona carrellata da Scott Gu), ma ci sono vettori di attacco esposti da questa pratica? Non è una questione di "dovresti o non dovresti", questo è molto chiaro, è una questione se introduce vulnerabilità specifiche.

Sono incline a pensare che la capacità di rilevarlo da remoto combinato con i problemi di prestazioni noti potrebbe portare a un exploit contro la disponibilità del servizio, ma vorrei qualcosa di un po 'più definito. Qualcuno sa di un attacco specifico che può essere orchestrato contro un'app che esegue debug = "true"?

Dipende quasi interamente dalla lingua, dal framework e dall'applicazione di cui parli. Cosa stai usando?
ASP.NET, come da tag :)
Sei risposte:
Troy Hunt
2010-12-22 04:16:45 UTC
view on stackexchange narkive permalink

Ho ricevuto alcuni commenti interessanti su questa domanda sia qui che su Stack Overflow. Ci sono state molte risposte relative alle tracce dello stack (un problema di errori personalizzati, non un problema di debug) e alle prestazioni (non [direttamente] un problema di sicurezza).

La risposta più convincente è che le costanti di compilazione condizionale ( #se DEBUG ...) potrebbe causare un comportamento imprevisto, ma anche questo è più un rischio di funzionalità (codice non intenzionale eseguito in un ambiente live), che un rischio per la sicurezza.

Sospetto che la modalità di debug possa aprirsi alcuni percorsi verso altri exploit basati sul sovraccarico di prestazioni che pone sull'app e sulla capacità di rilevarlo da remoto (forse rischio di continuità del servizio). Ho scritto le mie conclusioni come parte della OWASP Top 10 per sviluppatori .NET, parte 6: Configurazione errata della sicurezza.

Quindi, per completezza, la risposta sembra essere questa non esiste un chiaro rischio per la sicurezza derivante dall'esecuzione in modalità di debug, ma certamente non è una buona idea per le app di produzione dati i fattori sopra menzionati.

iivel
2010-12-16 08:23:04 UTC
view on stackexchange narkive permalink

Consentendo ai potenziali aggressori l'accesso potenziale al codice sorgente, alle tracce dello stack, ecc., certamente consente loro di focalizzare / restringere un attacco al sistema.

Suppongo anche (sebbene non abbia testato it) che poiché debug = true causa l'errore di compilazione piuttosto che il customerror del sito previsto, potresti essere esposto al bug crypto .net customerror.

http://blogs.technet.com/ b / srd / archive / 2010/09/17 / comprensione-della-asp-net-vulnerability.aspx

Grazie per il feedback, ma COME fa la modalità debug a esporre il codice sorgente o la traccia dello stack? Gli errori personalizzati sono un argomento a parte: supponiamo che siano attivi e non siano presenti YSOD o traccia dello stack esposte nella risposta web.
@TroyHunt Quando si scrive in PHP, la traccia dello stack e gli errori possono essere inviati al client ... questo è probabilmente il caso anche di altri linguaggi.
Steve
2010-12-16 22:45:23 UTC
view on stackexchange narkive permalink

La cosa più importante da tenere a mente quando debug = true è che i simboli sono lì. L'applicazione può essere precompilata con debug = true, ma questo fa parte del processo di distribuzione. Per esempio. lo fai compilare dal server di compilazione o sulla tua macchina locale e trasferisci gli assembly. (tutti stanno precompilando le proprie applicazioni prima della distribuzione in produzione, giusto ?! :)) Debug ha anche alcune ottimizzazioni di runtime disattivate. Un attacco ovvio sarebbe un DoS. Se gli errori personalizzati sono disattivati, puoi anche trovare ulteriori informazioni sullo stack di chiamate, più che se gli errori personalizzati sono disattivati ​​e i simboli non sono presenti.

Penso che tu abbia ragione sulla precompilazione: sono abbastanza sicuro che fosse così nella v2 / precedente, che è stata modificata (quindi ho rimosso la mia risposta).
@AviD Credo che tu abbia ragione, ma solo se l'applicazione è distribuita come codice sorgente.
goodguys_activate
2010-12-16 22:54:03 UTC
view on stackexchange narkive permalink

Penserei che se customErrors = off e debug = true, a un utente malintenzionato verrebbero inviate ancora più informazioni.

È più sicuro dire customErrors = on o customErrors = RemoteOnly. In questo modo un utente remoto riceverà sempre la pagina di errore ASP.NET generica. Ulteriori informazioni su MSDN

Credo che tu abbia quello al contrario. customerrors dovrebbe essere remoteOnly o on.
nealmcb
2010-12-17 02:37:15 UTC
view on stackexchange narkive permalink

Questo dipende quasi interamente dal linguaggio / framework / ambiente di distribuzione.

Per python / django, è molto esplicitamente il caso che DEBUG = True sia un problema di sicurezza. Vedi ad es. le note sulla mancata visualizzazione delle variabili di configurazione per "SECRET", "PASSWORD", "PROFANITIES" o "SIGNATURE" - vedere http://docs.djangoproject.com/en/dev/ref/settings/#debug

Vero, ma il contesto era per ASP.NET che è leggermente diverso da Python :)
Nathan B.
2010-12-21 02:15:03 UTC
view on stackexchange narkive permalink

È negativo dal punto di vista della fuga di informazioni, non è necessario ripeterlo. Inoltre, in modalità debug, il timeout di esecuzione della richiesta è di circa 5 ore, quindi puoi eseguire il debug dell'applicazione senza ottenere timeout. (Il valore di timeout normale è 110 secondi per impostazione predefinita) Quindi, se gli aggressori trovano un codice che impiega troppo tempo per eseguire, l'attacco potrebbe trasformarsi in un Denial of Service.

Certo, ma cosa stai perdendo? Lasciando da parte la questione delle impostazioni di errore personalizzate, la sola modalità di debug è una "perdita"? Ok, il fatto che l'app sia in fase di debug può essere divulgato effettuando una richiesta HTTP DEBUG, ma a parte questo, c'è davvero qualche perdita di informazioni?
Hai ragione, non trapelare molte informazioni se configuri errori personalizzati. Ma comunque stai trapelando il fatto che esegui il debug delle tue applicazioni sui server di produzione, è improbabile che tu abbia un test ben definito, un ciclo di rilascio, è probabile che tu abbia codice di debug sul tuo server, ecc.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 2.0 con cui è distribuito.
Loading...