Diventa Autore per CoreTech | Scopri di più





Cosa sono i reindirizzamenti aperti?

02/10/20 CoreTech Blog

Il reindirizzamento aperto è un tipo di problema di sicurezza delle applicazioni web. Infatti, consente un reindirizzamento dal sito originale a uno dannoso da parte di cyber criminali. Gli aggressori utilizzano la reputazione aziendale per rendere più efficaci gli attacchi di phishing attraverso redirect di cui l’utente non si accorge. Se consenti i reindirizzamenti aperti, un utente malintenzionato può inviare un'e-mail di phishing contenente un collegamento con il tuo nome di dominio. La vittima verrà reindirizzata dal tuo server web al sito dell'aggressore.

Si noti che i reindirizzamenti aperti sono stati inclusi come vulnerabilità nell'elenco OWASP Top 10 nel 2013 (reindirizzamenti e inoltri non convalidati A10).

Reindirizzamento o redirect: che cos’è e cosa significa

Il reindirizzamento in inglese è chiamato “redirect”, una parola molto usata in informatica. Vediamo che cosa vuol dire. Un reindirizzamento si verifica quando il sito web, o l'applicazione web, cambia l'URL a cui si accede nel client (di solito esterno - i reindirizzamenti interni vengono solitamente chiamati in avanti). Ci sono diversi modi per reindirizzare una pagina web dal back-end. Di solito, i reindirizzamenti vengono effettuati inviando intestazioni HTTP specifiche al client, ma puoi anche creare reindirizzamenti, ad esempio, utilizzando il codice JavaScript.

Reindirizzamento del sito: redirect 301 o 302

Il reindirizzamento viene normalmente gestito dal server quando riceve una richiesta che ha per oggetto un contenuto che è stato spostato su una nuova URL. Un redirect è utile anche nei casi in cui una pagina del sito sia stata eliminata. Sia nel caso di risorse spostate, sia in quello dell’eliminazione di una risorsa, il reindirizzamento garantisce all’utente un’esperienza di navigazione piacevole, priva di errori 404. Infatti, il redirect porta l’utente alla nuova URL senza che se ne avveda. Dunque, l’operazione del reindirizzare una pagina web non viene percepita dall’utente, che procede veloce tra un luogo e l’altro del web. Ci sono due tipi di redirect: il redirect 301 corrisponde a un reindirizzamento permanente, il redirect 302 a un reindirizzamento temporaneo.

Reindirizzare una pagina web con il meta refresh

Esiste anche la possibilità di reindirizzare una pagina web attraverso il cosiddetto “meta refresh”. Si tratta di una modalità del redirect che non coinvolge il server, ma è effettuata a livello della pagina web. È più lenta perché prevede che la pagina di origine sia caricata e richiede l’inserimento di una meta tag  HTML.

Che cos'è il reindirizzamento aperto

Esiste una vulnerabilità di reindirizzamento aperto quando la destinazione del reindirizzamento è fornita dal client e non viene filtrata o convalidata. Di seguito sono riportati alcuni esempi di reindirizzamenti sicuri e reindirizzamenti non sicuri:

  • Se il sito web legittimo reindirizza il client a un URL fisso, si tratta di un reindirizzamento sicuro.
  • Se il sito web legittimo costruisce in modo sicuro l'URL di reindirizzamento in base ai parametri forniti dall'utente, si tratta di un reindirizzamento sicuro.
  • Se il sito web legittimo costruisce l'URL di reindirizzamento in base ai parametri forniti dall'utente ma non convalida / filtra sufficientemente l'input, si tratta di un reindirizzamento non sicuro (l'autore dell'attacco potrebbe manipolare l'input).
  • Se il sito web legittimo consente all'utente di specificare l'URL di reindirizzamento di destinazione, si tratta di un reindirizzamento non sicuro (reindirizzamento aperto).

Reindirizzare un sito per un cyber criminale è un attimo

La possibilità di reindirizzare un sito a un omologo truffaldino è un’occasione ghiotta per i malintenzionati del web. Gli sviluppatori che utilizzano reindirizzamenti dinamici (basati sui dati del client) dovrebbero trattare tali dati come input non attendibili. In caso contrario, il cyber criminale trova la falla per sferrare un attacco: con poco sforzo, può reindirizzare il browser a un sito dannoso utilizzando il tuo nome di dominio per ingannare la vittima.

Ad esempio, se il tuo dominio è example.com , l'autore dell'attacco potrebbe creare il seguente URL:

https://example.com/redirect.php?url=http://attacker.com

L'autore dell'attacco può quindi inviare questo URL come parte di un tentativo di phishing per reindirizzare la vittima a un sito Web dannoso attacker.com . L'aggressore spera che example.com all'inizio abbia un aspetto affidabile e lo faccia cadere nella truffa di phishing.

Un esempio di reindirizzamento aperto

Il seguente semplice codice PHP crea un reindirizzamento aperto:

$redirect = $_GET['url'];  header("Location: " . $redirect);

È una vulnerabilità di reindirizzamento aperta perché l'autore dell'attacco potrebbe fornire l’URL di un sito web dannoso nel valore del parametro URL della richiesta GET. Così l’URL di destinazione verrà inviato come intestazione della posizione , reindirizzando il client a una pagina web dannosa.

Reindirizzamento aperto: conseguenze della vulnerabilità

Una vulnerabilità di reindirizzamento aperta rende possibili molti attacchi informatici:

  • Phishing: il modo più ovvio di utilizzare un reindirizzamento aperto è portare l’utente verso un sito con lo stesso aspetto dell’originale, rubare le credenziali e tornare al sito vulnerabile come se niente fosse.
  • Cross-site Scripting (XSS): se il reindirizzamento consente l'uso di protocolli data: o javascript: e il client supporta tali protocolli nei reindirizzamenti, rende possibile all'aggressore eseguire un attacco XSS.
  • Server-Side Request Forgery (SSRF): i reindirizzamenti aperti possono essere utilizzati per eludere i filtri SSRF.
  • Bypassare i criteri di sicurezza dei contenuti: se utilizzi CSP per la protezione da XSS e uno dei domini autorizzati ha un reindirizzamento aperto, questa vulnerabilità può essere utilizzata per aggirare CSP.
  • Iniezione CRLF: se il parametro di reindirizzamento consente interruzioni di riga, l'aggressore potrebbe tentare di eseguire la suddivisione dell'intestazione della risposta.

Come prevenire i reindirizzamenti aperti

Il modo più sicuro per prevenire le vulnerabilità di reindirizzamento aperto è non utilizzare reindirizzamenti nelle applicazioni web. Se ciò non è possibile, puoi provare i seguenti approcci:

  • Utilizza un elenco di pagine di destinazione fissa. Memorizza gli URL completi in una tabella di database e chiamali utilizzando identificatori come parametri di richiesta, non gli URL stessi. Ad esempio, memorizza http://example2.com nella tabella del database con l'identificatore 42 e quindi utilizza la seguente chiamata per reindirizzare a example2.com: https://example.com / redirect. php ? redir_id = 42 .
  • Se non puoi utilizzare un elenco fisso di destinazioni di reindirizzamento, filtra gli input non attendibili (se puoi, utilizzando una whitelist, non una blacklist). Assicurati di verificare la presenza di stringhe parziali, ad esempio, http: // example.com .evil.com è un URL valido. Inoltre, non consentire tutti i protocolli tranne HTTP e HTTPS. Tieni inoltre presente che, nonostante i tuoi migliori sforzi, è possibile che gli aggressori possano trovare un modo per aggirare i tuoi filtri.

Articoli su Acunetix

Trovare le vulnerabilità dei siti web prima degli HackerL'importanza della convalida delle correzioni: lezioni da GoogleSDLC agile e sicuro - Best practiceIn che misura le aziende gestiscono la sicurezza delle applicazioni Web?Cross-Origin Resource Sharing (CORS) e intestazione Access-Control-Allow-OriginCosa sono i reindirizzamenti aperti?DevSecOps: come arrivarci da DevOpsIl bigino su SQL Injection per sviluppatoriSfruttare SSTI in ThymeleafSicurezza nginx: come proteggere la configurazione del serverRafforzamento del sistema Web in 5 semplici passaggiCos'è la sicurezza del sito Web - Come proteggere il tuo sito Web dall'hackingRapporto sulle vulnerabilità delle applicazioni Web Acunetix 2020Perché l'elenco delle directory è pericoloso?Cosa sono gli hack di Google?Cosa è l'attacco BEASTWeb Shells in Action - Rilevazione e prevenzione - parte 5Web Shells in Action - parte 4Mantenere le Web Shells sotto copertura - parte 3Introduzione alle web shell - parte 2: 101 Uso di PHPIntroduzione alle web shell - parte 1Debunking 5 miti sulla postura della sicurezza informaticaIniezioni di NoSQL e come evitarleConfigurazione passo passo di Acunetix con JenkinsCosa sono i riferimenti a oggetti diretti non sicuriAnche il più forte cade: un'iniezione SQL in Sophos XG FirewallAcunetix rilascia Business Logic RecorderCome recuperare un sito Web compromessoCome difendersi dagli hacker Black Hat durante la pandemia COVID-19Che cos'è l'inclusione remota dei file (RFI)?Apache Security - 10 consigli per un'installazione sicuraUn nuovo sguardo sugli attacchi correlati al proxy inversoVulnerabilità delle password comuni e come evitarleTutto quello che devi sapere sugli attacchi Man-in-the-MiddleChe cosa sono le iniezioni HTMLRed Teaming – 5 consigli su come farlo in modo sicuroTesta le tue competenze XSS utilizzando siti vulnerabiliPerché hacker malintenzionati hanno messo gli occhi sugli ospedaliPratiche di codifica sicura – I tre principi chiaveLa maledizione delle vecchie librerie JavaMutation XSS nella ricerca GoogleIgnorare SOP utilizzando la cache del browserCome e perché evitare reindirizzamenti e inoltri non convalidati?Dirottamento di sessione e altri attacchi di sessioneCome abbiamo trovato un altro XSS in Google con AcunetixChe cos'è un buffer overflowChe cos'è l'overflow di IntegerChe cos'è HSTS e perché dovrei usarlo?Che cosa è OS Command InjectionVulnerabilità delle entità esterne XML in Internet ExplorerCoreTech assicura protezione dei siti Web con AcunetixCoreTech distributore Acunetix a fianco dei partner per la CyberSecurityCyberSecurity applicativa, nuova opportunità per voi!