Correzione dei risultati di Web Security Scanner

Questa pagina spiega come interpretare, riprodurre e risolvere i risultati di Web Security Scanner.

I ruoli IAM per Security Command Center possono essere concessi a livello di organizzazione, cartella o progetto. La possibilità di visualizzare, modificare, creare o aggiornare risultati, asset e origini di sicurezza dipende dal livello per cui ti viene concesso l'accesso. Per saperne di più sui ruoli di Security Command Center, consulta Controllo dell'accesso.

Classi di vulnerabilità

Web Security Scanner rileva le seguenti classi di vulnerabilità:

  • Cross-site scripting (XSS)
  • Falsificazione delle richieste lato server
  • Flash injection
  • Contenuto misto
  • Librerie obsolete o vulnerabili
  • Password in chiaro
  • Convalida dell'origine non sicura
  • Intestazioni non valide
  • Intestazioni con errori di ortografia
  • Repository accessibili
  • SQL injection
  • Iniezione XML
  • Prototipazione di inquinamento

Se viene rilevata una di queste vulnerabilità, il risultato viene evidenziato per consentirti di esplorarlo in dettaglio.

Impatto sui log

Nei file di log vengono visualizzate tracce di scansioni di Web Security Scanner. Ad esempio, Web Security Scanner genera richieste per stringhe insolite come ~sfi9876 e /sfi9876. Questo processo consente alla scansione di esaminare le pagine di errore dell'applicazione. Queste richieste di pagina intenzionalmente non valide vengono visualizzate nei tuoi log.

Disattivazione dei risultati dopo la correzione

Una volta risolta una vulnerabilità, Web Security Scanner non imposta automaticamente lo stato del risultato di Security Command Center corrispondente su INACTIVE. A meno che non modifichi lo stato manualmente, lo stato dei risultati generati da Web Security Scanner in Security Command Center rimarrà ACTIVE.

Se utilizzi la versione autonoma di Web Security Scanner, dopo aver corretto una vulnerabilità e Web Security Scanner non è più in grado di rilevarla, i successivi report sulle vulnerabilità non includono la vulnerabilità. È rimasto un record della vulnerabilità nei precedenti report sulle vulnerabilità.

Web Security Scanner esegue scansioni gestite ogni settimana.

Per ulteriori informazioni sulle scansioni di Web Security Scanner, consulta Tipi di analisi.

Correzione dei risultati di Web Security Scanner

Questa sezione spiega come risolvere i diversi tipi di risultati di Web Security Scanner. Per le strategie per difendersi dagli attacchi comuni a livello di applicazione descritti in OWASP Top 10, consulta Le 10 principali opzioni di mitigazione di OWASP su Google Cloud.

XSS

Nome categoria nell'API: XSS

Il test di injection di cross-site scripting (XSS) di Web Security Scanner simula un attacco inserendo una stringa di test benigna nei campi modificabili dall'utente ed eseguendo quindi varie azioni utente. I rilevatori personalizzati osservano browser e DOM durante il test per determinare se un'injection è riuscita e valutarne il potenziale di sfruttamento.

Se la stringa JavaScript contenuta nel test viene eseguita correttamente, viene avviato il debugger di Chrome. Quando una stringa di test è in grado di essere eseguita, è possibile inserire ed eseguire JavaScript nella pagina. Se un utente malintenzionato rileva il problema, potrebbe eseguire un codice JavaScript di sua scelta come utente (vittima) che fa clic su un link dannoso.

In alcuni casi, l'applicazione sottoposta a test potrebbe modificare la stringa di test prima che venga analizzata dal browser. Ad esempio, l'applicazione potrebbe convalidare l'input o limitare le dimensioni di un campo. Quando il browser prova a eseguire questa stringa di test modificata, è probabile che interrompa e generi un errore di esecuzione JavaScript. L'errore indica un problema di iniezione, ma potrebbe non essere possibile sfruttarlo.

Per risolvere il problema, devi confermare se si tratta di una vulnerabilità XSS verificando manualmente se le modifiche della stringa di test possono essere elusioni. Per informazioni dettagliate su come verificare questa vulnerabilità, consulta Cross-site scripting.

Esistono diversi modi per risolvere il problema. La soluzione consigliata consiste nell'eseguire l'escape di tutti gli output e utilizzare un sistema di modelli che supporti l'escape automatico contestuale.

XSS angular callback

Nome categoria nell'API: XSS_ANGULAR_CALLBACK

Una vulnerabilità cross-site scripting (XSS) nei moduli AngularJS può verificarsi quando Angular interpola una stringa fornita dall'utente. L'inserimento di valori forniti dall'utente in un'interpolazione AngularJS può consentire i seguenti attacchi:

  • Un malintenzionato può inserire codice arbitrario nella pagina visualizzata dai browser.
  • Un utente malintenzionato può eseguire azioni per conto del browser vittima nell'origine della pagina.

Per riprodurre questa potenziale vulnerabilità, segui il link URL di riproduzione nella console Google Cloud dopo aver eseguito l'analisi. Questo link apre direttamente una finestra di dialogo di avviso o inserisce la stringa XSSDETECTED per dimostrare che l'attacco può eseguire il codice. Se la stringa viene inserita, puoi aprire gli strumenti per sviluppatori del browser e cercare XSSDETECTED per trovare la posizione esatta dell'iniezione.

XSS error

Nome categoria nell'API: XSS_ERROR

Un risultato XSS_ERROR è un potenziale bug XSS a causa di un'interruzione di JavaScript. In alcuni casi, l'applicazione sottoposta a test potrebbe modificare la stringa di test prima che il browser la analizza. Quando il browser prova a eseguire questa stringa di test modificata, è probabile che interrompa e generi un errore di esecuzione JavaScript. Questo errore indica un problema di iniezione, ma potrebbe non essere possibile sfruttarlo.

Per risolvere il problema, devi confermare se si tratta di una vulnerabilità XSS verificando manualmente se le modifiche della stringa di test possono essere elusioni. Per informazioni dettagliate su come verificare questa vulnerabilità, consulta Cross-site scripting.

Server side request forgery

Nome categoria nell'API: SERVER_SIDE_REQUEST_FORGERY

Una vulnerabilità SERVER_SIDE_REQUEST_FORGERY consente a un utente di un'applicazione web di accedere ai dati interni obbligando un server a effettuare una richiesta (come una richiesta HTTP) a un endpoint di servizio con restrizioni. Ad esempio, un utente malintenzionato può sfruttare questa vulnerabilità per recuperare i dati dal servizio di metadati di Google Cloud.

Per risolvere il problema, utilizza una lista consentita per limitare i domini e gli indirizzi IP a cui l'applicazione web può effettuare richieste.

Rosetta flash

Nome categoria nell'API: ROSETTA_FLASH

Web Security Scanner potrebbe scoprire che il valore di un parametro di richiesta viene riportato all'inizio di una risposta, ad esempio nelle richieste che utilizzano JSONP. Questa vulnerabilità è anche nota come flash injection. In determinate circostanze, un utente malintenzionato può indurre il browser a eseguire la risposta come se fosse un file Flash fornito dall'applicazione web vulnerabile.

Per risolvere il problema, non includere dati controllabili dall'utente all'inizio di una risposta HTTP.

Mixed content

Nome categoria nell'API: MIXED_CONTENT

Web Security Scanner osserva passivamente il traffico HTTP e rileva quando una richiesta di un file JavaScript o CSS viene eseguita su HTTP nel contesto di una pagina HTTPS. In questo scenario, un utente malintenzionato man in the middle potrebbe manomettere la risorsa HTTP e ottenere l'accesso completo al sito web che la carica o per monitorare le azioni intraprese dagli utenti.

Per risolvere il problema, utilizza link HTTP relativi, ad esempio sostituisci http:// con //.

Outdated library

Nome categoria nell'API: OUTDATED_LIBRARY

Web Security Scanner potrebbe rilevare che la versione di una libreria inclusa contiene un problema di sicurezza. Web Security Scanner è uno scanner basato su firme che tenta di identificare la versione della libreria in uso e la confronta con un elenco noto di librerie vulnerabili. Sono possibili falsi positivi se il rilevamento della versione non riesce o se la libreria è stata applicata manualmente.

Per risolvere il problema, esegui l'aggiornamento a una versione sicura nota della libreria inclusa.

Struts insecure deserialization

Nome categoria nell'API: STRUTS_INSECURE_DESERIALIZATION

Web Security Scanner potrebbe rilevare che la tua applicazione web utilizza una versione di Apache Struts vulnerabile agli attacchi di iniezione di comandi da remoto. Le versioni di Struts interessate possono analizzare in modo errato l'intestazione HTTP Content-Type non valida di un utente malintenzionato. Questa vulnerabilità consente di eseguire comandi dannosi privilegiando il server web.

Di seguito sono riportate le versioni vulnerabili di Apache Struts:

  • Versioni 2.3.x precedenti alla 2.3.32
  • Versioni 2.5.x precedenti alla 2.5.10.1

Per risolvere il problema, esegui l'upgrade di Apache Struts alla versione più recente.

Per ulteriori informazioni sulla vulnerabilità di Apache Struts, consulta CVE-2017-5638.

Cacheable password input

Nome categoria nell'API: CACHEABLE_PASSWORD_INPUT

Web Security Scanner potrebbe rilevare che per l'inserimento di una password l'applicazione web utilizza un elemento <input> in cui l'attributo type non è impostato su password. Di conseguenza, i browser potrebbero memorizzare nella cache la password inserita dall'utente nella normale cache del browser anziché in uno spazio di archiviazione sicuro delle password.

Per risolvere il problema, nell'elemento <input> aggiungi l'attributo type e impostalo su password, ad esempio <input type="password">. Questo attributo nasconde i caratteri inseriti dall'utente nel campo della password.

Clear text password

Nome categoria nell'API: CLEAR_TEXT_PASSWORD

Web Security Scanner potrebbe rilevare che l'applicazione sembra trasmettere un campo password in chiaro. Un utente malintenzionato può intercettare il traffico di rete e sniffare il campo della password.

Per proteggere le informazioni sensibili che passano tra client e server, prendi sempre le seguenti precauzioni:

  • Utilizza certificati TLS/SSL.
  • Utilizza sempre HTTPS per le pagine che includono campi per la password.
  • Assicurati che gli attributi di azione modulo puntino sempre a un URL HTTPS.

Insecure allow origin ends with validation

Nome categoria nell'API: INSECURE_ALLOW_ORIGIN_ENDS_WITH_VALIDATION

Web Security Scanner potrebbe rilevare che un endpoint HTTP o HTTPS tra siti convalida solo un suffisso dell'intestazione della richiesta Origin prima di rifletterlo all'interno dell'intestazione della risposta Access-Control-Allow-Origin. Se la convalida non è configurata in modo corretto, l'endpoint potrebbe concedere l'accesso a un dominio dannoso con lo stesso suffisso di un dominio incluso nella lista consentita. Ad esempio, se lo strumento di convalida dell'endpoint corrisponde a domini come *google.com, potrebbe concedere erroneamente l'accesso a maliciousdomaingoogle.com.

Per risolvere il problema, verifica che il dominio principale previsto faccia parte del valore dell'intestazione Origin prima di rifletterlo nell'intestazione della risposta Access-Control-Allow-Origin. Per i caratteri jolly nel sottodominio, anteponi il punto al dominio principale, ad esempio .endsWith(".google.com").

Insecure allow origin starts with validation

Nome categoria nell'API: INSECURE_ALLOW_ORIGIN_STARTS_WITH_VALIDATION

Web Security Scanner potrebbe rilevare che un endpoint HTTP o HTTPS tra siti convalida solo un prefisso dell'intestazione della richiesta Origin prima di rifletterlo all'interno dell'intestazione della risposta Access-Control-Allow-Origin. Se la convalida non è configurata correttamente, l'endpoint potrebbe concedere l'accesso a un dominio dannoso che ha lo stesso prefisso di un dominio incluso nella lista consentita. Ad esempio, se lo strumento di convalida dell'endpoint controlla solo se il dominio richiedente contiene google.com, potrebbe concedere erroneamente l'accesso a google.com.maliciousdomain.com.

Per correggere questo risultato, verifica che il dominio previsto corrisponda completamente al valore dell'intestazione Origin prima di rifletterlo nell'intestazione della risposta Access-Control-Allow-Origin, ad esempio .equals(".google.com").

Session ID leak

Nome categoria nell'API: SESSION_ID_LEAK

Web Security Scanner potrebbe trovare un identificatore di sessione nell'intestazione della richiesta Referer delle richieste interdominio della tua applicazione web. I domini che ricevono Referer possono utilizzare l'identificatore di sessione per impersonare un utente (utilizzando il relativo token) o identificare in modo univoco l'utente.

Per correggere questo risultato, memorizza gli identificatori di sessione nei cookie, anziché nell'URL. Inoltre, proteggi i cookie con i seguenti attributi:

  • HTTPOnly: un attributo che rende i cookie inaccessibili agli script lato client.
  • Sicuro: un attributo che rende i cookie trasmissibili solo tramite HTTPS.

Invalid content type

Nome categoria nell'API: INVALID_CONTENT_TYPE

Web Security Scanner potrebbe rilevare che è stata caricata una risorsa che non corrisponde all'intestazione HTTP Content-Type della risposta. In questo scenario, l'applicazione restituisce contenuti sensibili con un tipo di contenuti non valido o senza un'intestazione X-Content-Type-Options: nosniff.

Per risolvere il problema, verifica quanto segue:

  • Le risposte JSON vengono fornite con l'intestazione Content-Type application/json
  • Altre risposte sensibili vengano fornite con i tipi MIME appropriati
  • Pubblica i contenuti con l'intestazione HTTP X-Content-Type-Options: nosniff

Invalid header

Nome categoria nell'API: INVALID_HEADER

Web Security Scanner potrebbe rilevare che un'intestazione di sicurezza contiene un errore di sintassi e genera un'intestazione con valori non corretti o non validi. Di conseguenza, il browser ignora queste intestazioni.

Le intestazioni valide sono descritte nelle sezioni seguenti.

Intestazione Referrer-Policy

Un criterio dei referrer valido contiene uno dei seguenti valori:

  • Una stringa vuota
  • no-referrer
  • no-referrer-when-downgrade
  • same-origin
  • origin
  • strict-origin
  • origin-when-cross-origin
  • strict-origin-when-cross-origin
  • unsafe-url

Intestazione X-Frame-Options

Un'intestazione X-Frame-Options valida può avere solo i seguenti valori:

  • DENY: non consentire l'inquadratura
  • SAMEORIGIN: consenti l'inquadratura se l'URL di primo livello ha la stessa origine
  • ALLOW-FROM URL

Chrome non supporta ALLOW-FROM URL. Non sono consentite più opzioni X-Frame-Options.

Intestazione X-Content-Type-Options

Un'intestazione X-Content-Type-Options valida può avere solo un valore: nosniff.

Intestazione X-XSS-Protection

Un'intestazione X-XSS-Protection valida deve iniziare con 0 ("disattivata") o 1 ("attivata"). Dopodiché, solo se attivi la protezione, puoi aggiungere fino a due opzioni:

  • mode=block mostra una pagina vuota invece di filtrare l'XSS
  • report=URL invia segnalazioni a URL

Separa le opzioni con il punto e virgola, ad esempio 1; mode=block; report=URI. Assicurati di non avere un punto e virgola finale.

Misspelled security header name

Nome categoria nell'API: MISSPELLED_SECURITY_HEADER_NAME

Web Security Scanner potrebbe trovare un nome di intestazione di sicurezza con errori ortografici. Se errata, l'intestazione di sicurezza è inefficace e deve essere corretta.

Per riprodurre questa vulnerabilità, controlla la presenza di errori ortografici nella scheda Rete degli strumenti per sviluppatori del browser.

Mismatching security header values

Nome categoria nell'API: MISMATCHING_SECURITY_HEADER_VALUES

Web Security Scanner potrebbe rilevare che la risposta contiene intestazioni di risposta duplicate e relative alla sicurezza con valori in conflitto. Alcune intestazioni HTTP relative alla sicurezza hanno un comportamento indefinito se dichiarate due volte in una risposta con valori non corrispondenti.

Per risolvere il problema, mantieni solo una di queste intestazioni non corrispondenti.

Repository accessibile

Web Security Scanner potrebbe trovare un repository GIT o SVN accessibile nell'applicazione. Questa condizione può causare perdite di configurazione e del codice sorgente.

Per riprodurre la vulnerabilità, fai clic sull'URL di riproduzione nel rapporto dei risultati.

XXE reflected file leakage

Nome categoria nell'API: XXE_REFLECTED_FILE_LEAKAGE

Web Security Scanner potrebbe rilevare una vulnerabilità XXE (XML External Entity) in un'applicazione web che analizza il codice XML degli input utente. Un utente malintenzionato può fornire un XML contenente un'entità esterna. Questa entità esterna può fare riferimento a contenuti a cui ha accesso l'applicazione, ad esempio file sulla macchina host dell'applicazione. Quando l'analizzatore sintattico XML dell'applicazione elabora il codice XML dannoso, può far trapelare i contenuti dei file nell'host.

Per correggere questo risultato, configura i parser XML in modo da non consentire le entità esterne.

Per maggiori informazioni su questa vulnerabilità, consulta Elaborazione di entità esterne XML (XXE).

SQL injection

Nome categoria nell'API: SQL_INJECTION

Web Security Scanner potrebbe rilevare una vulnerabilità di SQL injection. Gli utenti malintenzionati possono creare input che manipolano la struttura delle query della query SQL sottostante in esecuzione sul server. Questi input consentono di esfiltrare i dati dal database e, in alcuni casi, di modificarli. Per risolvere questo risultato, utilizza le query con parametri per impedire che l'input utente influenzi la struttura della query SQL.

Per maggiori informazioni su questa vulnerabilità, consulta SQL injection.

Prototype pollution

Nome categoria nell'API: PROTOTYPE_POLLUTION

Web Security Scanner potrebbe rilevare una vulnerabilità prototipo di inquinamento in un'applicazione web le cui proprietà degli oggetti sono assegnati a valori controllabili da utenti malintenzionati. Gli aggressori possono creare input che rendono l'applicazione vulnerabile al cross-site scripting (XSS) o ad altre vulnerabilità lato client.

Per correggere questo risultato, elimina la proprietà proto deprecata e rendi immutabile l'oggetto Object.prototype. Se questa mitigazione è incompatibile con il tuo codice, modifica la parte di codice vulnerabile in modo da copiare solo i valori previsti dagli input controllabili da utenti malintenzionati.

Verificare il problema

Quando Web Security Scanner segnala un problema, devi verificarne la posizione. Questa sezione spiega come utilizzare i report sui risultati per riprodurre e verificare le vulnerabilità.

  1. Vai alla pagina Web Security Scanner nella console Google Cloud.

    Vai a Web Security Scanner

  2. Seleziona un progetto. Viene visualizzata una pagina con un elenco delle scansioni gestite e personalizzate.

  3. In Scan configs (Configurazioni di scansione), seleziona la scansione contenente il risultato che vuoi verificare. Si apre una pagina con i dettagli dell'analisi.

  4. Vai alla scheda Risultati, espandi una categoria e seleziona un risultato per visualizzarne i dettagli.

  5. Il metodo di verifica varia in base alla categoria di risultati. Utilizza un browser di prova e segui le istruzioni riportate di seguito.

    • Cross-site scripting: se si segue l'URL di riproduzione, nel browser viene visualizzato un popup vuoto, che indica che il codice benefico della scansione è stato inserito correttamente in uno script.
    • Libreria obsoleta: se segui l'URL vulnerabile viene restituita una pagina con il testo "Sfruttato", a indicare che il codice benefico della scansione è stato inserito correttamente in uno script.
    • Contenuti misti Seguendo l'URL della pagina HTTPS viene restituito un avviso relativo a una vulnerabilità di contenuti misti. Il report sui risultati identifica la risorsa vulnerabile nell'URL della risorsa gestita tramite HTTP.
    • Flash injection: Web Security Scanner potrebbe restituire risultati in questa categoria, ma la maggior parte dei browser moderni è protetta da Flash injection. È improbabile che questi risultati possano essere sfruttati.
    • Prototype pollution: segui l'URL nel campo Reproduction URL (URL di riproduzione) e cerca le modifiche all'oggetto Object.prototype introdotte dal payload, con i seguenti snippet JavaScript.
      • ({}).__secret_injected_property
      • ({}).__defineGetter__.__secret_injected_property
      • ({}).hasOwnProperty.__secret_injected_property

L'applicazione dei criteri di sicurezza del contenuto (CSP) potrebbe comunque impedire l'esecuzione del codice JavaScript. Questa condizione può rendere più difficile la riproduzione dell'XSS. Se riscontri questo problema, controlla la console dei log del browser per i dettagli relativi alla violazione CSP che si è verificata.