Domanda:
Dovrei essere preoccupato se il mio sito web genera informazioni sullo stack?
Kevin
2015-03-24 12:35:04 UTC
view on stackexchange narkive permalink

Ho un semplice modulo di accesso sulla mia pagina web e l'URL è simile a questo:

  example.com/signup/signup.php?q=1  

Se provo qualcosa di simile:

  example.com/signup/signup.php?q=1& ()  

Sono reindirizzato a un dump dello stack simile a questo:

  eccezione "DOMException" con messaggio "Errore carattere non valido" in /<mydirectory>/a_xml.class.php:74Stack trace: # 0 / <mydirectoy> / a_xml.class.php (74): DOMDocument->createElement ('()') ... # 6 {main}  

È un grosso problema in termini di sicurezza? Ci sono attacchi che un utente malintenzionato può eseguire che gli consentiranno di deturpare o rubare il mio database? O è relativamente benigno e posso ignorarlo?

Se si aggiunge una semplice & () in fondo a una query, mostra questo stackexchange. Rimuovi l'applicazione dalla produzione, licenzia il tizio che l'ha scritta e continua da lì. Scommetto che se cambi la q = in qualcosa di divertente, riceverai dei bei consigli.
Sebbene la sicurezza per oscurità sia una cosa negativa, nessuno dice che dire a tutti come funziona il tuo sistema sia intelligente. L'oscurità * aggiunta * ad altre misure di sicurezza può aiutare un po 'o rallentare gli aggressori e farti scoprire prima la minaccia.
Mi chiedo anche questo, e le risposte finora non sembrano affrontare veramente la domanda. OVVIAMENTE qualsiasi errore che causa la visualizzazione di un'analisi dello stack è un bug che dovrebbe essere corretto. Questo caso particolare POTREBBE indicare un potenziale problema di SQL injection e, in tal caso, si tratta di un enorme buco di sicurezza e dovrebbe essere risolto. Ma la domanda era: crea una falla di sicurezza per consentire all'utente di vedere una traccia dello stack? Sento spesso persone dire che tali messaggi mostrano a un potenziale hacker informazioni sugli interni che potrebbero essere sfruttati. Ma come cosa? Quindi un hacker scopre che ho un ...
Il principio di base è "meno informazioni vengono rivelate, meglio è". Alcune persone non visualizzano nemmeno la versione del server.
... funzione chiamata "foobar". In che modo questo lo aiuta? Forse può vedere che sto usando la libreria mysqli. Suppongo che si possa dire che se scopre che sto usando una particolare versione di un pacchetto che ha una falla di sicurezza nota, potrebbe sfruttarla. Ma potrebbe comunque provare una serie di noti exploit di sicurezza, quindi nascondere quale particolare versione ho sembra una difesa debole.
Oltre a non mostrarlo all'utente, ricorda anche di provare / catturare qualcosa di sensibile per assicurarti che una traccia dello stack non possa sfuggire al sistema di registrazione.
Lascia che ti chieda questo: perché hai sentito il bisogno di disinfettare "" quando hai posto la domanda? A meno che non fosse puramente per facilitare la leggibilità, non aveva senso eliminarlo. :-)
Le directory, i nomi dei file sorgente, i nomi delle funzioni, ecc. Non sono un grosso problema in questo esempio, tanto quanto scoprire che la stringa dopo `&` viene potenzialmente passata a una chiamata `createElement` così com'è. Si tratta di informazioni preziose per un potenziale aggressore, molto più di qualsiasi nome di file, numero di riga o altro. Fondamentalmente, poiché non è possibile prevedere facilmente ciò che tutti i possibili messaggi di errore * stessi * diranno in anticipo, non si desidera visualizzarli e si corre il rischio di esporre inaspettatamente i dettagli di un difetto prima di scoprirlo da soli.
@Jay Ricordo che alcuni mesi prima a scuola, il nostro insegnante ci ha insegnato la sicurezza e stavamo "hackerando" in un ambiente di apprendimento e potevamo fare così tanto solo conoscendo la struttura della directory. Non ricordo più come si chiama il metodo o come farlo.
@chloe et al: Ok, ho capito: perché rischiare di dire qualcosa a un hacker? Anche se non vedo un modo per sfruttarlo, forse l'hacker sa qualcosa che io non so. Ma qualcosa di più specifico?
@Jay, Lo stacktrace contiene i valori degli argomenti ... Ora cosa succede se nel tuo stack hai un metodo che prende la tua stringa di connessione sql come argomento? Le informazioni su stack di chiamate e file potrebbero aiutare l'hacker a sfruttare una violazione altrove, lavora più velocemente e sarà più difficile da rilevare e fermare in tempo.
@Chloe: Bruce Schneier ha una storia, ha configurato il suo server (credo di posta) per mentire sul suo numero di versione. Fu costretto a cambiarlo per non riportare affatto un numero di versione, dal volume di posta trionfante da persone che avevano notato che Schneier stava eseguendo una versione nota per essere sfruttata ;-)
@SteveJessop: Perché non è semplicemente passato a una versione che non è stata sfruttata o.O
@LightnessRacesinOrbit: Presumo perché non voleva dover continuare a cambiarlo. Inoltre mi aspetto che ci sia un rischio reale, l'unica versione non sfruttata è l'ultima, e il punto era non dire la verità.
@Steve: Dovrebbe mantenere tutti i servizi aggiornati. :( Che modo terribile per "proteggere" il suo sistema. Pensavo che fosse un esperto?
@LightnessRacesinOrbit: ovviamente ha tenuto aggiornato il servizio, è sul tapis roulant della toppa come chiunque altro. Sto parlando del numero di versione che riporta, non di quale versione sia realmente. Ovviamente un utente malintenzionato dedicato sonderà comunque il servizio per capire quale versione sia indipendentemente da ciò che riporta. Non credo che fosse una seria misura di sicurezza, solo igiene.
Sei risposte:
Alasjo
2015-03-24 12:55:36 UTC
view on stackexchange narkive permalink

Negli ambienti di produzione (contrariamente allo sviluppo), le tracce dello stack e i messaggi di errore dovrebbero essere registrati su file invece di essere scaricati sullo schermo. Questo perché un utente malintenzionato potrebbe apprendere cose sul tuo sistema che potrebbero aiutare a comprometterlo.

Informazioni come sistema operativo, versione del server web, versione PHP e altro. Alcune tracce dello stack possono contenere variabili di sistema / ambiente che non dovrebbero essere rese pubbliche!

L'utente / visitatore dovrebbe ottenere una bella pagina di errore HTTP invece di un messaggio che non è di alcuna utilità per il visitatore.

[CWE-209: esposizione di informazioni tramite un messaggio di errore] (http://cwe.mitre.org/data/definitions/209.html) e [CWE-756: pagina di errore personalizzata mancante] (http: //cwe.mitre .org / data / definition / 756.html).
E le tracce di stack in produzione sono così anni '90
Aggiungendo alla lista nel secondo paragrafo (sebbene sia implicito nel primo paragrafo), un attaccante può apprendere quali sono i tuoi bug e sfruttarli prima che tu abbia la possibilità di notarli. Nel caso dell'OP, possiamo vedere che è possibile che la stringa dopo `&` venga passata direttamente a una chiamata `createElement`. Un utente malintenzionato può immediatamente iniziare a sperimentare. D'altra parte, se è solo registrato, sebbene sia ancora un punto debole, almeno non viene annunciato, e presumendo che presti attenzione ai tuoi registri di errore (cosa che dovresti) hai la possibilità di risolverlo prima che qualcuno se ne accorga.
Informazioni come il sistema operativo, la versione del server web, la versione PHP e altro sono spesso incluse direttamente nelle intestazioni HTTP, senza bisogno di una traccia dello stack.
Sono d'accordo con questa risposta, ma mi sembra che il motivo principale per cui non vengono mostrati sui siti di produzione è che non sono un'utile schermata di errore.
Quindi la sicurezza attraverso l'oscurità è utile dopo tutto, chi lo sapeva.
kasperd
2015-03-24 16:24:04 UTC
view on stackexchange narkive permalink

Ci sono due diversi aspetti in questo:

  • Il bug che causa la traccia dello stack è una vulnerabilità di sicurezza.
  • Il framework è configurato per mostrare le tracce dello stack agli estranei.

Il messaggio di errore Invalid Character Error suona molto come un escape dimenticato, che molto spesso può essere sfruttato in qualche modo. Quindi dovresti essere preoccupato per la traccia dello stack perché è un sintomo di una possibile vulnerabilità di sicurezza.

L'altra domanda è se dovresti essere preoccupata per le tracce dello stack che vengono mostrate agli estranei. Da un lato nascondere le informazioni sulle parti interne di un sistema può essere visto come sicurezza attraverso l'oscurità. Nella maggior parte dei casi sarei d'accordo con questo, ma non in caso di tracce dello stack.

Le tracce dello stack vengono visualizzate solo quando c'è un problema, quindi se c'è mai una traccia dello stack c'è un rischio significativo che c'è un bug, e se c'è un bug c'è un rischio significativo che possa essere sfruttato. Quindi tenere le tracce dello stack lontano da estranei è una buona idea. Inoltre, se la traccia dello stack contiene non solo i nomi delle funzioni chiamate ma anche i valori dei parametri, può facilmente perdere chiavi, password, cookie o altri tipi di credenziali.

Per entrambi i motivi sopra, è importante fare attenzione a dove vengono visualizzate le tracce dello stack.

È tuttavia importante che le tracce dello stack siano disponibili a coloro che hanno bisogno di risolvere il problema. Quindi la registrazione delle tracce dello stack è importante. Se quei casi in cui le tracce dello stack sono indicazioni di effettive vulnerabilità di sicurezza, si desidera risolverli il prima possibile. Anche se un messaggio di errore non descrittivo non darà molto a un utente malintenzionato con cui lavorare, semplicemente rendendosi conto di quali personaggi funzionano e quali no, possono comunque capire come sfruttarlo.

+1 per essere stata l'unica risposta finora a notare che, oltre allo stack dump, questa sembra sicuramente una vulnerabilità di injection.
dotancohen
2015-03-26 16:54:28 UTC
view on stackexchange narkive permalink

Ci sono due problemi qui e l'OP chiede del problema meno importante.

Visualizzazione della traccia

Questo è il problema che l'OP chiede di. Ci sono dibattiti riguardo a quanto di un problema che mostra una traccia sia in generale e questo particolare esempio mostra bene che la visualizzazione di una traccia può essere un problema di sicurezza . Il motivo è che ci consente (tu, io e l'hacker) dell'esistenza del secondo problema.

Non filtrare l'input dell'utente

Questo è un problema reale . Non solo so (grazie alla traccia) che la tua applicazione sta passando l'input utente non filtrato e non convalidato alle funzioni PHP native, so anche che DOMDocument->createElement () è la funzione in questione. Ora inizierò ad attaccare questo sito e tutti i siti che posso identificare con questa azienda per altri problemi di filtraggio, come SQL injection, XSS, CSRF, fino alla nausea.

Grazie. Questa è la risposta più corretta e richiama l'attenzione sul fatto che gli stack dump possono variare da completamente innocui a indicativi di problemi importanti. Troppo spesso nella sicurezza otteniamo risposte binarie e trattiamo tutti i problemi di sicurezza allo stesso modo. Siamo sempre limitati nelle risorse in ciò che possiamo fare, quindi il triage è estremamente importante.
Rob
2015-03-24 20:12:28 UTC
view on stackexchange narkive permalink

Notare che le tracce dello stack includono parametri. Se ci sono chiamate di funzione che passano le password come argomenti, queste finiranno nelle tracce dello stack.

È ovviamente un disastro se un utente può fargli visualizzare la password di un altro. Meno ovviamente, le password degli utenti sono ora contenute nei file di registro; il che farà impazzire i tuoi utenti. Per lo meno, devi assicurarti che la registrazione della password non avvenga.

Loko
2015-03-24 16:22:30 UTC
view on stackexchange narkive permalink

Nel tuo esempio, le persone possono vedere la struttura delle tue directory che potrebbero utilizzare per potenziali attacchi. Saresti sorpreso di quanto un "hacker" possa fare con pochissime informazioni. Quindi in generale è un grosso problema in termini di sicurezza. Come sta dicendo Alasjo, non è nemmeno facile da usare e una pagina di errore è una buona alternativa.

Ad esempio, in alcuni casi la visualizzazione di errori agli utenti potrebbe portare a: Path Traversal

L'attraversamento del percorso è anche noto come attacco ../ (punto punto barra), arrampicata su directory e backtracking.

gentwo
2015-03-27 11:09:21 UTC
view on stackexchange narkive permalink

Sebbene sia stato accennato nei commenti sopra, potrebbe essere utile notare che una ragione

"Informazioni come sistema operativo, versione del server web, versione PHP e altro. Alcune tracce dello stack possono contenere variabili di sistema / ambiente che non dovrebbero essere rese pubbliche! " (Vedi il commento sopra di @Alasjo e @Danny Beckett)

è negativo, perché conoscere lo stack software utilizzato per costruire la tua applicazione, consente agli aggressori di sfruttare le falle di sicurezza in quei componenti (i problemi di sicurezza nel software comune è informazioni ampiamente pubblicizzate (vedere https://cve.mitre.org/)) oltre a qualsiasi difetto / difetto nella tua applicazione reso evidente nelle tracce dello stack.

Ad esempio, poiché so che il tuo sito utilizza PHP ora, potrei provare tutti i difetti di sicurezza relativi a PHP (nel caso in cui non hai patchato l'installazione di PHP per risolvere quel difetto ... mantieni il tuo software livelli di patch dello stack aggiornati, giusto? :-)) anche se la tua applicazione non ha esposto nessuno dei suoi difetti nella traccia dello stack.



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