Articles

DOM založené Cross Site Scripting

Posted on

méně známá XSS technika

  • DOM je zkratka pro Document Object Model
  • XSS je zkratka pro cross-site scripting
  • hlavní rozdíl mezi DOM založeným XSS a jinými zranitelnostmi XSS je, že užitečné zatížení je vloženo na straně klienta spíše než na straně serveru
  • Dom založené XSS zranitelnosti proto musí být zabráněno na straně klienta

Cross-site scripting (XSS) nejprve zranitelnosti stal se známý prostřednictvím Cert Advisory CA-2000-02 (škodlivé HTML tagy vložené do klientských webových požadavků), ačkoli tyto chyby zabezpečení byly dříve využívány. Takže XSS už nějakou dobu existuje. A jak byste očekávali, na toto téma již bylo několik článků v laboratořích, včetně skriptování mezi weby-podceňované nebezpečí a skriptování mezi weby a zabránění vstřikování skriptů-Stručný průvodce. Tento článek se však zaměřuje převážně na DOM založené cross-site skriptování, termín poprvé vytvořil v roce 2005 Amit Klein. On propagoval definici DOM založené cross-site skriptování (XSS) a vymezil ji od jiných cross-site skriptování zranitelnosti. Chcete-li porozumět Dom založené cross-site skriptování, musíte nejprve hlubší pochopení DOM.

co je DOM?

objektový model dokumentu je programové rozhraní, které definuje strukturu dokumentů. Pro naše účely je důležité, že DOM poskytuje objektově orientované znázornění dokumentů HTML, konkrétně:

  • jak je prvek HTML reprezentován jako objekt
  • jaké jsou atributy prvku HTML
  • jaké metody lze použít pro přístup k prvku HTML
  • jaké jsou události prvku HTML

to znamená, že DOM určuje, jak lze prvky HTML najít, přidat, změnit nebo odstranit v prohlížeči. To znamená, že DOM nabízí příležitost pro manipulaci s HTML stránkami. V dnešní době se pro tento druh manipulace obvykle používá JavaScript.

je třeba poznamenat, že každý prohlížeč implementuje standard DOM odlišně. To může ovlivnit, zda konkrétní DOM XSS útok funguje v konkrétním prohlížeči.

co je DOM založený XSS?

zranitelnost XSS založená na DOM vzniká, když se DOM používá ke generování dynamického obsahu obsahujícího vstup uživatele, který lze zpracovat bez kontroly. Tento druh útoku se provádí pomocí JavaScriptu v prohlížeči uživatele. Zde jsou místa, která (škodlivý) Uživatelský vstup přinášejí do DOM, označena jako zdroj. Místa, ve kterých lze (škodlivý) vstup uživatele provést v DOM, jsou označena jako dřez.

příklad jednoduché chyby zabezpečení skriptování mezi weby:

<!DOCTYPE html><html> <body> <script> var source = "Hello " + decodeURIComponent(location.hash.split("#")); //Source var divElement = document.createElement("div"); divElement.innerHTML = source; //Sink document.body.appendChild(divElement); </script> </body></html>

tuto chybu zabezpečení lze například spustit pomocí následujícího požadavku GET:

GET www.vulnerable-website.example#<img src="test" onerror="alert('XSS')">

vidíme, že tento příklad je vyžadován metodou decodeURIComponent. Je to proto, že moderní prohlížeče kódují speciální znaky v URL a útok by nefungoval bez dekódování těchto speciálních znaků. Obsah proměnné source se přidá k prvku div pomocí innerHTML. Toto je problematický prvek v kódu, protože jeho přiřazení k innerHTML způsobí, že hodnota, která je s ním obsažena, bude interpretována jako HTML. Pokud hodnota obsahuje JavaScript, provede se to také.

je třeba zdůraznit, že to nemění odpověď serveru. Škodlivá modifikace vzniká pouze tehdy, když je kód JavaScript spuštěn na straně klienta, který DOM následně změní.

nejznámější zdroje a dřezy jsou uvedeny níže. Je třeba poznamenat, že to v žádném případě není vyčerpávající seznam.

zdroje

  • dokument.URL
  • dokument.referrer
  • umístění
  • umístění.href
  • místo.hledat
  • umístění.hash
  • umístění.název cesty

dřezy

  • eval
  • setTimeout
  • setInterval
  • dokument.napište
  • prvek.innerHTML

prevence DOM založené XSS

protože existují případy, kdy užitečné zatížení nikdy ve skutečnosti dělá to na server, prevence této chyby zabezpečení není úkolem na straně serveru. Výše uvedený příklad je jeden takový případ. Důvodem je, že obsah, který se objeví po znaku#, není prohlížečem odeslán na server.

prvním a nejdůležitějším doporučením je vyhnout se používání uživatelem řízených dat pro dynamické generování obsahu, kdykoli je to možné. Pokud je to zcela nevyhnutelné, nejlepším způsobem, jak zabránit XSS založenému na DOM, je použití zabezpečených výstupních metod (sink), které zabraňují spuštění jakéhokoli zlomyslně vloženého kódu. Ve výše uvedeném úryvku kódu je jediným způsobem, jak zajistit, aby byl kód Bezpečný, nahradit .innerHTML .textContent. Je to proto, že – na rozdíl od innerHtml – prvky HTML v metodě textContent nejsou provedeny.

Dom založený XSS prevence Cheat Sheet od OWASP má spoustu užitečných tipů pro vývoj bezpečných dynamických webových stránek s JavaScriptem. Najdete zde také popisy kódování závislého na kontextu, které je vyžadováno vždy, když není možné přepnout na zabezpečenou výstupní metodu.

rozdíly od ostatních zranitelností XSS

nejdůležitější rozdíl je v tom, kde je útok vložen do kódu. Na rozdíl od jiných zranitelností skriptování mezi weby není kód vložen na straně serveru, ale spíše na straně klienta. To znamená, že užitečné zatížení nelze nalézt v kódu odpovědi. Chyby zabezpečení XSS založené na DOM lze proto detekovat pouze za běhu nebo kontrolou DOM webu.

ve většině případů není nalezení zranitelností XSS založených na DOM snadné. Jeden užitečný přístup, který používá přístup statické analýzy kódu, je popsán v článku Burp based-xss.

o autorovi

Andrea Hauser

Andrea Hauser vystudovala bakalářský titul FHO v oboru informačních technologií na Univerzitě aplikovaných věd Rapperswil. Svou ofenzivní práci zaměřuje na testování bezpečnosti webových aplikací a realizaci kampaní sociálního inženýrství. Její výzkumné zaměření je vytváření a analýza deepfakes. (ORCID 0000-0002-5161-8658)

odkazy

  • http://www.webappsec.org/projects/articles/071105.html
  • https://support.portswigger.net/customer/portal/articles/2325926-using-burp-scanner-to-test-for-dom
  • https://www.cert.org/historical/advisories/CA-2000-02.cfm
  • https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet
  • https://www.w3.org/DOM/

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.