Articles

DOM alapú Cross Site Scripting

Posted on

a kevésbé ismert XSS technika

  • DOM jelentése Document Object Model
  • az XSS jelentése Cross-site scripting
  • a fő különbség a DOM alapú XSS és más XSS sebezhetőségek között az, hogy a hasznos teher a kliens oldalon van beágyazva, nem pedig a szerver oldalon
  • a Dom alapú XSS sebezhetőségeket ezért meg kell akadályozni a kliens oldalon

először a webhelyek közötti szkriptek (XSS) sebezhetőségei a CERT tanácsadó CA-2000-02 (rosszindulatú HTML-címkék beágyazva az ügyfél webes Kéréseibe) révén vált ismertté, bár ezeket a sebezhetőségeket korábban kihasználták. Tehát az XSS már egy ideje létezik. És ahogy az várható volt, már számos Labs cikkek a témában, beleértve a Cross Site Scripting – az alábecsült veszély és a Cross-Site-Scripting és megelőzése Script Injection – egy rövid útmutató. Ez a cikk azonban nagyrészt a DOM alapú cross-site scriptingre összpontosít, ezt a kifejezést először 2005-ben találta ki Amit Klein. Nyilvánosságra hozta a Dom alapú cross-site scripting (XSS) definícióját, és lehatárolta a többi Cross-site scripting sebezhetőségtől. A Dom alapú webhelyek közötti szkriptek megértéséhez először a DOM mélyebb megértésére van szükség.

mi az A DOM?

A Dokumentumobjektum-modell egy programfelület, amely meghatározza a dokumentumok szerkezetét. Céljaink szempontjából az a releváns, hogy a DOM biztosítja a HTML dokumentumok objektum-orientált ábrázolását, konkrétan:

  • hogyan jelenik meg egy HTML elem objektumként
  • mik a HTML elem attribútumai
  • milyen módszerekkel lehet elérni egy HTML elemet
  • mik a HTML elem eseményei

ez azt jelenti, hogy a DOM meghatározza, hogy a HTML elemek hogyan találhatók, adhatók hozzá, módosíthatók vagy törölhetők a böngészőben. Ez azt jelenti, hogy a DOM lehetőséget kínál a HTML oldalak manipulálására. Manapság a JavaScript-et általában használják az ilyen típusú manipulációkhoz.

meg kell jegyezni, hogy minden böngésző másképp valósítja meg a DOM szabványt. Ez befolyásolhatja, hogy egy adott Dom XSS támadás működik-e egy adott böngészőben.

mi a DOM alapú XSS?

DOM alapú XSS biztonsági rés akkor keletkezik, amikor a DOM-ot olyan dinamikus tartalom létrehozására használják, amely ellenőrzés nélkül feldolgozható felhasználói bevitelt tartalmaz. Ez a fajta támadás JavaScript segítségével történik a felhasználó böngészőjében. Itt azokat a helyeket jelölik ki forrásként, amelyeket a (rosszindulatú) felhasználói bevitel hoz a DOM-ba. Azok a helyek, ahol a (rosszindulatú) felhasználói bevitel végrehajtható a DOM-ban, sink-ként vannak kijelölve.

példa egy egyszerű cross-site scripting biztonsági résre:

<!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>

a biztonsági rés például a következő GET kéréssel aktiválható:

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

láthatjuk, hogy ez a példa a decodeURIComponent módszerrel szükséges. Ez azért van, mert a modern böngészők speciális karaktereket kódolnak az URL-ben, és a támadás nem működne ezen speciális karakterek dekódolása nélkül. A source változó tartalma hozzáadódik a div elemhez a innerHTMLhasználatával. Ez a kód problematikus eleme, mivel a innerHTML – hoz való hozzárendelése a benne szereplő értéket HTML-ként értelmezi. Ha az érték JavaScript-et tartalmaz, akkor ez is végrehajtásra kerül.

meg kell jegyezni, hogy ez nem változtatja meg a szerver válaszát. A rosszindulatú módosítás csak akkor merül fel, ha a JavaScript kódot az ügyféloldalon hajtják végre, amelyet a DOM később megváltoztat.

az alábbiakban felsoroljuk a legismertebb forrásokat és mosogatókat. Meg kell jegyezni, hogy ez egyáltalán nem kimerítő lista.

források

  • dokumentum.URL
  • dokumentum.referrer
  • hely
  • hely.href
  • hely.keresés
  • hely.hash
  • hely.elérési út

mosogatók

  • eval
  • setTimeout
  • setInterval
  • dokumentum.írja
  • elem.innerHTML

a DOM alapú XSS megelőzése

mivel vannak olyan esetek, amikor a hasznos teher valójában soha nem jut el a szerverre, a biztonsági rés megelőzése nem a szerveroldali feladat. A fenti példa egy ilyen eset. Ennek oka az, hogy a # karakter után megjelenő tartalmat a böngésző nem küldi el a szervernek.

az első és legfontosabb ajánlás az, hogy amikor csak lehetséges, kerüljük a felhasználó által vezérelt adatok használatát a tartalom dinamikus generálásához. Ha ez teljesen elkerülhetetlen, a Dom alapú XSS megelőzésének legjobb módja a biztonságos kimeneti módszerek (sink) használata, amelyek megakadályozzák a rosszindulatúan beágyazott kódok végrehajtását. A fenti kódrészletben a kód biztonságossá tételének egyetlen módja a .innerHTMLhelyettesítése .textContent – re. Ez azért van, mert – ellentétben a innerHtml – vel-a textContent módszer HTML elemei nem kerülnek végrehajtásra.

A DOM alapú XSS megelőzés Cheat Sheet OWASP rengeteg hasznos tipp a fejlődő biztonságos dinamikus weboldalak JavaScript. Itt megtalálja a kontextustól függő kódolás leírását is, amelyre szükség van, amikor lehetetlen biztonságos kimeneti módszerre váltani.

különbségek a többi XSS biztonsági réstől

A legfontosabb különbség az, hogy a támadás hol van beágyazva a kódba. A többi webhelyközi szkriptelési sebezhetőséggel ellentétben a kód nem a szerver, hanem a kliens oldalon van beágyazva. Ez azt jelenti, hogy a hasznos teher nem található a válaszkódban. A DOM alapú XSS sebezhetőségeket ezért csak futásidőben vagy a webhely DOM-jának ellenőrzésével lehet felismerni.

a legtöbb esetben nem könnyű megtalálni a DOM alapú XSS sebezhetőségeket. Az egyik hasznos megközelítés, amely a statikus kódelemzési megközelítést használja, a Burp based-xss cikkben található.

A szerzőről

Andrea Hauser

Andrea Hauser a Rapperswil-I Alkalmazott Tudományi Egyetemen végzett az FHO informatikai Alapképzésén. Támadó munkáját a webes alkalmazások biztonsági tesztelésére és a social engineering kampányok megvalósítására összpontosítja. Kutatási fókusza a mélyhamisítások létrehozása és elemzése. (ORCID 0000-0002-5161-8658)

linkek

  • 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/

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.