window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = finestra if (w.LeadBooster) { console.warn('LeadBooster esiste già') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() thecodest, Author at The Codest - Page 9 of 18

Recentemente abbiamo scritto di sicurezza delle applicazioni web quando si tratta di vulnerabilità XSS. Questa volta vogliamo attirare la vostra attenzione su un altro pericolo.

La vulnerabilità discussa in questo articolo è presente da molto tempo e, a causa della sua semplicità, è spesso sottovalutata o addirittura sconosciuta da alcuni. sviluppatori di applicazioni web.

Quasi tutte le applicazioni web contengono collegamenti che, se cliccati, si aprono in una nuova scheda, in modo da non chiudere la scheda con la pagina originale. Questo è un comportamento preferito perché i creatori vogliono che l'utente trascorra il maggior tempo possibile nell'applicazione.

Un attacco che sfrutta questa vulnerabilità è il cosiddetto "reverse tabnabbing". Si tratta di un attacco in cui una pagina collegata alla pagina di destinazione è in grado di sostituirla con, ad esempio, un sito di phishing.

Scenario di attacco

  1. Supponiamo che la vittima utilizzi Facebook, noto per l'apertura di link tramite target="_blank",
  2. Creare una finta pagina virale,
  3. Creare un sito web di phishing che assomigli alla pagina di accesso di Facebook,
  4. Mettere il seguente codice sulla pagina virale, ad esempio, tramite una vulnerabilità XSS trovata.
    window.opener.location = 'https://phishing-website/facebook.com';
  5. La vittima clicca sul link di Facebook alla pagina virale,
  6. La pagina virale reindirizza la scheda di Facebook al sito web di phishing, chiedendo all'utente di accedere nuovamente.

Quindi, possiamo cambiare la scheda padre dalla pagina di destinazione infetta tramite l'oggetto finestra dell'API Web. In genere, un attacco prevede l'utilizzo di diverse vulnerabilità scoperte e truffe di phishing in parallelo.

Il problema

Quando si apre una nuova scheda nel browser utilizzando un collegamento con l'opzione target="_blank" abbiamo accesso al nostro "referrer" dalla nuova scheda. Più precisamente, all'attributo apripista della proprietà Finestra che restituisce un riferimento alla finestra che l'ha aperta, la nostra pagina madre.

Questo è dovuto al comportamento del Finestra.open() funzione. Con l'accesso a questo attributo, possiamo facilmente sostituire la nostra pagina madre. Si noti che alcuni browser moderni possono rendere finestra.apertura nella scheda di destinazione come nullo per evitare questo comportamento.

Codice di esempio

<code> <a href="https://github.com" target="_blank">Vai a GitHub - link infetto</a>
costitutivo
 se (link)
   link[0].onclick = () => {
     if (window) window.opener.location = 'https://stackoverflow.com'
   }

Qui sopra potete vedere il link infetto che in origine apre una nuova scheda con una pagina GitHub, ma nel frattempo cambia la nostra pagina "madre" in quella di Stackoverflow.

Esempio dal vivo

1. Collegamenti HTML

Aggiungi rel="noopener noreferrer" alla <a> tag.

Il rel definisce la relazione tra una risorsa collegata e il documento corrente.

noopener indica al browser di navigare verso la destinazione senza concedere l'accesso al genitore che l'ha aperta. Scheda di destinazione Finestra.opener sarà nullo.

noreferrer impedisce al browser, quando si naviga verso la destinazione, di inviare al genitore l'indirizzo o qualsiasi altro valore come referrer tramite l'opzione referente Intestazione HTTP. Si noti che il nome di questa intestazione HTTP è intenzionalmente scritto in modo errato come "referrer".

2. JavaScript collegamenti

Per il modello JavaScript Finestra.open è possibile aggiungere i valori noopener e noreferrer nel finestraCaratteristiche del parametro Finestra.open ma i diversi browser possono rispondere in modo diverso, per cui si consiglia di rendere la funzione Finestra.opener come nullo dopo aver utilizzato Finestra.open() funzione.

Per saperne di più:

API Rails e CORS. Un pizzico di consapevolezza

Strategie di recupero dei dati in NextJS

7 motivi per cui il vostro negozio online ha bisogno di Magento

Se avete trovato interessante questo articolo, seguite Lukasz su Github: https://github.com/twistezo

it_ITItalian