Domanda:
È davvero un'errata configurazione della sicurezza mostrare un numero di versione?
stormtrooper
2019-08-13 13:34:53 UTC
view on stackexchange narkive permalink

La nostra applicazione web utilizza un file HTML con jQuery incorporato all'interno.Secondo la licenza jQuery ( https://jquery.org/license/), dobbiamo lasciare intatta l'intestazione della licenza, inclusi il numero di versione.

Il nostro cliente ha segnalato l'esposizione della combinazione di prodotto e versione come un rischio per la sicurezza. Stranamente, la versione bootstrap nello stesso file non viene segnalata come un rischio per la sicurezza.

Molte applicazioni utilizzano librerie con numeri di versione all'interno. È anche possibile ottenere i numeri di versione eseguendo del codice in Firebug o nella Console per gli sviluppatori di Chrome.

In quali circostanze si verifica questo "errore di configurazione della sicurezza" ( https://www.owasp.org/index. php / Top_10-2017_A6-Security_Misconfiguration) si applicano alla visualizzazione del prodotto e del numero di versione? E come possiamo risolvere questo problema senza violare la licenza jQuery?

Penso che tu abbia un errore logico in quanto la divulgazione di informazioni viene equiparata a un errore di configurazione della sicurezza.Non sono in alcun modo uguali o correlati.
"* Stranamente, la versione bootstrap nello stesso file non viene segnalata come rischio per la sicurezza. *" Potrebbero aver individuato in modo casuale il numero di versione di jQuery e averlo segnalato.Oppure potrebbero pensare che sia ridondante fare il pignolo su ogni numero di versione trovato.O il loro strumento automatico ha appena individuato quello jQuery.Proprio come il software non è mai privo di bug perché il programmatore non pensa a tutti i casi limite o non conosce ogni stranezza (o forse non ha abbastanza tempo per farlo), anche il pentesting è un affare inesatto.
Rimuovere il numero di versione dal file di licenza non ti aiuterebbe comunque, perché un utente malintenzionato può semplicemente controllare manualmente quale versione stai utilizzando.
@MechMK1 non se aggiungi codice irraggiungibile (come `if (true === false) {}`) o spazi bianchi casuali da qualche parte / ovunque, i loro abbinamenti automatici non sarebbero in grado di abbinare definitivamente una versione.
@MonkeyZeus Se usi una corrispondenza esatta ingenua, allora avresti ragione.Tuttavia, se controlli un grado di somiglianza, le piccole modifiche a jQuery 3.1.7 appariranno ancora al 99,8% come jQuery 3.1.7.
@MechMK1 È stato menzionato innumerevoli volte che se un aggressore ti prende di mira in modo specifico, niente di tutto ciò ha importanza soprattutto quando si parla di codice inviato al client come JS, ma se stai solo cercando di evitare script kiddies, anche la minima oscurità "aiuta".Il vero errore di configurazione della sicurezza è l'utilizzo di una versione vulnerabile.Anche se non stai utilizzando una versione vulnerabile, è semplicissimo fare in modo che il browser utilizzi una versione vulnerabile.Onestamente, se il tuo sito web è vulnerabile a causa di JS, stai facendo qualcosa di sbagliato dal punto di vista della sicurezza.
@MonkeyZeus Sì, ne sono consapevole, ma non era questo il punto.Gli Script Kiddies utilizzano strumenti automatizzati ben fatti, non autoprodotti male.Ogni analizzatore di webapp di base sarà in grado di identificare una versione di jQuery modificata, quindi il tentativo di offuscarla comporterà solo problemi e nessun vantaggio in termini di sicurezza.Anche se mi piacerebbe sapere come faresti in modo che un browser utilizzi una versione vulnerabile di jQuery, se il sito include una versione senza vuln conosciuti.
@MechMK1 Copia + Incolla + Invio nella finestra della console: `var script = document.createElement ('script');script.type = 'text / javascript';script.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js";document.head.appendChild (script);alert (jQuery.fn.jquery); `
Trascorrere del tempo cercando di nascondere le versioni delle librerie lato client, invece di dedicare tempo alla risoluzione di problemi di sicurezza reali, ti rende potenzialmente più vulnerabile.
@MonkeyZeus Sì, ma puoi farlo solo a te stesso, non agli altri.Ad esempio, non potresti farmi usare una versione vulnerabile di jQuery.
Non vedo alcuna indicazione su https://jquery.org/license/ che il numero di versione debba rimanere intatto.Dice che l'intestazione del copyright deve ... fintanto che hai il `Copyright 2005, 2014 jQuery Foundation, Inc. e altri contributori;Rilasciato con licenza MIT;http: // jquery.org / license` Non mi aspetterei che battessero ciglio.
@ceejayoz Come accennato in precedenza, non ti aiuterebbe comunque a oscurare la versione.
@MechMK1 Certo, ma aiuterebbe OP a togliersi di dosso lo scanner di sicurezza del cliente.
@ceejayoz "Risolvere" i problemi per impedire allo scanner di lamentarsi è una delle ** peggiori ** cose che puoi fare.Certo, eliminare una versione in un file di licenza non è sufficiente, ma è l'approccio fondamentalmente sbagliato.Cose come queste sono il motivo per cui è nato il bug Debian PRNG.
@MechMK1 Finché OP ha una versione sicura di jQuery, il risultato dello scanner qui è un * falso positivo *.Non sto sostenendo di nascondere una versione insicura;Sto dicendo che la divulgazione della versione contrassegnata può essere gestita in modo sicuro in questo modo.
@ceejayoz Sì, è vero, e in questo caso specifico non vedrei un problema con esso.Ma direi che in generale, è meglio imparare a etichettare i rapporti come falsi positivi, piuttosto che affrettarsi e implementare una "correzione".
@MechMK1 Abbastanza giusto, posso essere d'accordo.
Cinque risposte:
Sjoerd
2019-08-13 14:26:25 UTC
view on stackexchange narkive permalink

L'impatto sulla sicurezza dell'esposizione del numero di versione è che un utente malintenzionato può vedere immediatamente se la tua versione è vulnerabile a una vulnerabilità nota. Ad esempio, jQuery prima della 3.4.0 è vulnerabile a CVE-2019-11358, quindi è un'informazione utile per un utente malintenzionato sapere se il tuo jQuery è 3.3.9 o 3.4.1.

Tuttavia, con JavaScript che viene eseguito nel browser, il codice sorgente completo è accessibile dall'aggressore, quindi è impossibile nascondere se il tuo jQuery è vulnerabile. Anche se nascondi la versione, l'autore dell'attacco può confrontare il codice o semplicemente provare un exploit per determinare se sei vulnerabile. Nascondere il numero di versione può far funzionare leggermente di più, ma realisticamente ha poco.

Inoltre, ci sono altri modi per mitigare questo problema:

  • Tieniti aggiornato sulla sicurezza problemi nelle librerie che utilizzi. Iscriviti a una mailing list o a un altro metodo di pubblicazione per problemi di sicurezza.
  • Aggiorna le librerie client ogni volta che viene identificato un problema di sicurezza.

Se disponi sempre di un account non vulnerabile versione perché si aggiorna regolarmente, non è un problema che la versione venga divulgata. E puoi dire al tuo cliente che questo è il modo in cui mitighi la divulgazione di informazioni.

D'accordo, solo una piccola nota: "* Nascondere il numero di versione potrebbe farlo funzionare leggermente di più *" Direi che è un po 'più che "leggermente": per mappare il codice a un numero di versione (per ricollegarlonumero di versione in una ricerca CVE), devi avere un indice di tutte le varianti (minimizzate, magari con diversi packer) di tutte le versioni di tutte le librerie rilevanti.Un utente malintenzionato dedicato potrebbe farlo se sospetta che ci sarà una vulnerabilità sfruttabile, ma la maggior parte delle volte, i vuln delle librerie lato client non sono raggiungibili o hanno un impatto limitato.Penso che pochi aggressori si preoccuperebbero.
@Luc Direi che è semplicemente inutile, puoi accedervi tramite `$ .fn.jquery`, molto più facilmente che scartare i commenti che potrebbero comunque essere illeggibili nella maggior parte delle fonti a causa di SOP.
@Kaiido Bene, non sapevo di "$ .fn.jquery".Non sono sicuro se questa sia una fortunata coincidenza o se sia comune che anche altre biblioteche lo abbiano.Cercando nella libreria vedo il secondo più comunemente, Bootstrap, [non sembra] (https://stackoverflow.com/questions/15335537/how-to-identify-bootstrap-version) esiste una tale funzione perquello.
@Luc se stai parlando del css, allora no, non c'è qualcosa di disponibile da js (commenti a parte).Ma ogni plugin di bootstrap ha la propria VERSIONE accessibile dal costruttore: https://stackoverflow.com/questions/43233588/how-can-i-get-bootstrap-version-via-javascript
@Sjoerd Quali mailing list consiglieresti per un sistema basato sul web (Apache, nginx, JQuery, SSH, FTP, pacchetti server in generale)?
@echo ci sono strumenti progettati specificamente per monitorare le vulnerabilità nei componenti di terze parti.Due dei leader commerciali nello spazio sono gli attuali Palamida e Black Duck, ma se fai qualche ricerca su Google puoi trovare un elenco di prodotti più recenti a prezzi diversi (alcuni gratuiti, ma che richiedono un lavoro manuale sostanziale) che potrebbero soddisfare le tue esigenzemeglio.
@Echo Generalmente hanno tutti le proprie mailing list.Tuttavia oss-sec è una buona mailing list generica.
Qualcuno può farmi notare come può la libreria lato client di per sé essere una vulnerabilità in ogni caso?Affinché si verifichi un attacco, l'attaccante deve prima eseguire del codice dal lato client.A parte `eval (window.location.hash)` non vedo come una libreria che manipola HTML possa essere vulnerabile agli attacchi senza che il sito web sia già compromesso.
schroeder
2019-08-13 14:26:41 UTC
view on stackexchange narkive permalink

Conoscere il numero di versione non è un errore di configurazione della sicurezza. Il rischio di esporre i numeri di versione è una "divulgazione di informazioni". Ciò può creare un pericolo se la conoscenza di queste informazioni consente a un utente malintenzionato di creare un exploit per una vulnerabilità in quella specifica versione.

Anche se la libreria finisce per contenere una vulnerabilità, non si tratta comunque di un problema di configurazione errata della sicurezza. Sarebbe "A9-Utilizzo di componenti con vulnerabilità note".

Quindi, sembra che il cliente abbia una comprensione errata e rigida dei rischi e della situazione.

Tom
2019-08-14 09:38:59 UTC
view on stackexchange narkive permalink

È un modello di pensiero molto, molto vecchio nella sicurezza informatica che esporre il numero di versione di qualcosa sia un rischio per la sicurezza.

Presumibilmente, rende il lavoro più facile per gli aggressori, perché se conoscono la versione di qualunque cosa tu stia eseguendo, possono cercare le vulnerabilità che si applicano a quella versione.

In realtà, questo è ciò che stanno facendo i security scanner. Nessus et al hanno un database integrato di vulnerabilità in base al numero di versione. Quindi, a meno che tu non esegua mai la scansione di te stesso, nascondere queste informazioni significa spararti ai piedi.

Tranne che sia gli scanner che gli aggressori (che usano gli scanner, sai?) Hanno altri mezzi oltre a un semplice strcmp () per determinare il numero di versione di qualcosa. È un po 'più faticoso e non è sempre possibile individuare un numero esatto, ma nessun utente malintenzionato che valga nulla confonderà jQuery 3.3.0 con jQuery 2.2.1

Gli attaccanti non a livello di script kiddie hanno anche molti altri metodi per capire cosa stai eseguendo, dall'impronta digitale al semplice test automatico di alcune centinaia di exploit e al controllo di quale funziona.

Nascondere il numero di versione ti dà una piccola quantità di sicurezza aggiuntiva. Se non hai nient'altro da fare, puoi farlo o no. Finché hai problemi di sicurezza reali da risolvere, dedica il tuo tempo a quelli.

Infine, esporre il numero di versione non è un caso di configurazione errata della sicurezza. Se il tuo strumento lo segnala come tale, segnala quel bug a monte in modo che il tuo strumento possa essere risolto.

"* a meno che non esegui mai la scansione di te stesso, nascondere [numeri di versione] significa spararti ai piedi. *" Tranne che esiste un team di sviluppo che ha realizzato il software.Sanno quale versione hanno utilizzato e possono verificarne le vulnerabilità.Farlo è raro come eseguire scansioni di vulnerabilità su te stesso (quasi nessuno lo fa nemmeno), ma se devi sceglierne uno, preferirei controllare i numeri di versione da solo piuttosto che esporli a tutti.Sì, gli aggressori mirati useranno altri mezzi per ottenere le informazioni, ma ciò non significa che tu voglia renderlo facile per loro o per gli script kiddies.
Se sei un facile bersaglio per gli script kiddies, i numeri di versione esposti sono l'ultimo dei tuoi problemi.Sono d'accordo che il team di sviluppo dovrebbe controllare i vuln, ma sai una cosa?Non sono esperti di sicurezza e tu lo sei.Ha senso eseguire scansioni invece di fidarsi del team di sviluppo su questo.Idealmente, faresti ** entrambi **.
jfran3
2019-08-13 14:24:10 UTC
view on stackexchange narkive permalink

Non sono sicuro al 100% se si tratta o meno di una domanda duplicata. Se deve essere contrassegnato come tale, fallo mods, ma penso che il consiglio in questo particolare post " Esiste una versione base di jQuery che non ha vulnerabilità XSS" sarebbe utile per risolvere il problema problema per i tuoi clienti.

Uno dei fattori principali che dovrai valutare per affrontare la questione generale è se la soluzione di sicurezza proposta è un buon ROI per il tuo cliente. Vale la pena scrivere un'eccezione nella politica di sicurezza o forse implementare il codice per eliminare i numeri di versione restituiti (o come osserva il commentatore potenzialmente abbandonare jQuery) per mitigare il rischio di esporre il numero di versione? In molti casi non lo sarà, ma in altri sì, e tutto dipenderà dalla situazione individuale. Tuttavia, dovresti assolutamente verificare che le versioni che stai utilizzando non siano già compromesse utilizzando qualcosa come cvedetails o il NIST National Vulnerability Database.

Quanto al motivo per cui Bootstrap non viene segnalato, è probabile che sia dovuto allo scanner (che non hai menzionato) e ai test che stai utilizzando per la valutazione. Secondo la logica della Configurazione errata della sicurezza OWASP, anche questa potrebbe essere vista come una vulnerabilità e dovrebbe / non dovrebbe essere affrontata per lo stesso motivo. Indipendentemente da ciò, l'esposizione di tali informazioni fornisce a qualsiasi potenziale aggressore un altro punto di dati da cui condurre ricerche e potenzialmente identificare le vulnerabilità.

rackandboneman
2019-08-16 00:38:37 UTC
view on stackexchange narkive permalink

Alla fine, nasconderlo è sicurezza per oscurità.

Che è spesso calunniato come comportamento fuorviante e inutile.

Che è, se usato DA SOLO e CONTRO A ATTACCO MIRATO.

Può migliorare le misure di sicurezza "adeguate" riducendo la possibilità che tu non sia preso di mira in primo luogo da chiunque sia ancora alla ricerca di un bersaglio.

Minimizza il RISCHIO .

Una sicurezza "adeguata" è come assicurarsi che le proprie azioni siano legali, la sicurezza tramite l'oscurità è come assicurarsi di non raccogliere l'attenzione gratuita della polizia nel caso in cui ti sbagli sulla legge.



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