Skip to content

Das Document Object Model beschreibt den hierarchischen Aufbau einer Webseite. Javascript kann dazu benutzt werden, die verschiedenen Knoten und Objekte zu manipullieren. Dies ist eine normale Funktion die auch häufig genutzt wird um Funktionen auf der Webseite bereitzustellen. Allerdings kann das unsichere verarbeiten von Daten zu Schwachstellen führen. Dies passiert etwa, wenn vom Angreifer kontrollierbare Daten, auch als source bezeichnet vom Javascript verarbeitet wird. Dies wird dann in eine gefährliche Funktion geschrieben, auch als sink bezeichnet. Ein beispiel für eine source ist die location.search source. Diese ist besonders leicht vom Angreifer kontrollierbar, andere sourcen sind document.referrer und document.cookie. Zudem gehören hierzu web messages. Eine sink ist beispielsweise die eval() Funktion, da diese Javascript ohne jegliche überprüfung ausführt. Ein weiteres beispiel für ein HTML sink ist document.body.innerHTML, da es potenziel das ausführen von HTML und das ausführen von Javascript erlaubt. Die folgenden sind einige der häufigsten sources:

document.URL 
document.documentURI 
document.URLUnencoded 
document.baseURI 
location 
document.cookie 
document.referrer 
window.name 
history.pushState 
history.replaceState 
localStorage 
sessionStorage 
IndexedDB (mozIndexedDB, webkitIndexedDB, msIndexedDB) 
Database

DOM-basiertes open redirection

DOM basierte open-redirection Schwachstellen treten auf, wenn ein Skript Daten in ein Sink schreibt, welches cross-domain Navigation auslösen kann. Dieses verhalten kann für Phishing Angriffe genutzt werden. Dazu kann eine authentische Anwendung genutzt werden, welche Vertrauen ausstrahlt und keinen Grund für Misstrauen gibt. Der Nutzer wird dann unbemerkt auf eine andere Webseite weitergeleitet. Ist es dem Angreifer möglich den Start des Strings zu kontrollieren, welcher zu der weiterleitungsapi gegeben wird, ist es auch möglich eine Javascript injection attack zu nutzen. Ein Angreifer kann eine URL konstruieren mit dem javascript: pseudo protokoll um code auszuführen, wenn die Url ausgeführt wird.

https://portswigger.net/web-security/dom-based/open-redirection

DOM basiertes Web Socket Poisoning

Web Socket Poisoning tritt auf, wenn Nutzer kontrollierbare Daten als Ziel URL einer Web Socket Verbindung genutzt wird. Ein Angreifer kann dies dazu nutzen, eine URL zu konstruieren. Wird diese URL von einem anderen Nutzer genutzt führt dies zur Öffnung eines Web Sockets zu einer URL des Angreifers.

Mit DOM basierter Link Manipulation ist es möglich den Nutzer an eine externe URL weiterzuleiten und dabei auch noch sensible Informationen zu übertragen. Den User dazu zu bringen Aktionen auszuführen oder auch anti-XSS umgehen. Die folgenden Sinks können dabei genutzt werden:

element.href
element.src
element.action

Web Nachrichten Manipulation

Diese Schwachstelle tritt auf, wenn Daten die vom Angreifer manipulierbar sind an ein anderes Dokument im Browser. Um diese Schwachstelle auszunutzen wird die postMessage() Methode benutzt werden.

DOM basierte AJAX Anfrage Header Manipulation

AJAX Anfrage Header Manipulation kann ausgenutzt werden, wenn ein Skript Angreifer kontrollierbare Daten in den Anfrage Header eines AJAX requests schreibt, welcher ein XmlHttpRequest Objekt nutzt. Ein Angreifer könnte eine URL konstruieren, die beim besuchen eines anderen Nutzers einen beliebigen Header in der nachfolgenden AJAX Anfrage setzt. Dies kann als Ausgangspunkt für die Verkettung anderer Angriffsarten verwendet werden, wodurch sich der potenzielle Schweregrad dieser Sicherheitslücke erhöht. Die folgenden Sinks können zu DOM basierter AJAX Header Anfrage Manipulation führen:

XMLHttpRequest.setRequestHeader()
XMLHttpRequest.open()
XMLHttpRequest.send()
jQuery.globalEval()
$.globalEval()

DOM basiertes lokale Dateipfad Manipultaion

DOM basierte lokale Dateipfad Manipulation entsteht, wenn ein Skript Angreifer kontrollierbare Daten zu einer Datei Handling API als Dateinamen Parameter gibt. Dies kann dazu führen, dass eine URL erstellt wird, welche beim Besuch den Browser des Users dazu verleiten kann eine Datei zu öffnen. Die Auswirkungen dieser Schwachstelle können dazu führen, dass Daten gelesen oder geschrieben werden können. Die Sinks die für die Attacke genutzt werden können sind:

FileReader.readAsArrayBuffer()
FileReader.readAsBinaryString()
FileReader.readAsDataURL()
FileReader.readAsText()
FileReader.readAsFile()
FileReader.root.getFile()

DOM basierte Client-seitige SQL Injection

Schädlicher SQL Code wird in eine Webseite mittels DOM eingefügt. Ein Skript verarbeitet dies dann auf unsichere Weise. Die Javascript Datenbank kann mithilfe der executeSql() Funktion ausgenutzt werden.

DOM basierte HTML5 speicher manipulation

Bei der HTML5 Speicher manipulation wird eine Schwachstelle ausgenutzt durch das Speichern von Angreifer kontrollierbaren Daten. Also wie localStorage oder sessionStorage. Werden nun Daten aus einem Speicher in einem unsicheren Weg verarbeitet, kann dies ausgenutzt werden. Dies ist nicht direkt eine Schwachstelle, doch in Kombination mit anderen Angriffen kann dies ausgenutzt werden. Die ausnutzbaren sinks sind: - sessionStorage.setItem() - localStorage.setItem()

DOM basierte Client seitige XPath injection

Diese Schwachstelle tritt auf, wenn Angreifer kontrollierbare Daten in eine XPath-Abfrage gelangen. Die folgenden Sinks können zu XPath Injection führen: - document.evaluate() - element.evaluate()

DOM basierte Client seitige JSON Injection

Die DOM basierte JSON Injection kann auftreten, wenn Angreifer kontrollierbare Daten in einen String geschrieben werden, welcher als JSON geparst wird. Die Sinks, welche für diese Schwachstelle verwendet werden können sind: - JSON.parse() - jQuery.parseJSON() - $.parseJSON()

DOM Daten Manipulation

Die DOM Daten Manipulation kann auftreten, wenn ein Skript Angreifer kontrollierbare Daten in ein DOM Feld schreibt, welches innerhalb der UI Sichtbar ist. Ein Angreifer kann dadurch das Aussehen oder Verhalten der UI Manipulieren. Die folgenden Sinks können zu Daten Manipulation führen:

script.src 
script.text 
script.textContent 
script.innerText 
element.setAttribute() 
element.search 
element.text 
element.textContent 
element.innerText 
element.outerText 
element.value 
element.name 
element.target 
element.method 
element.type 
element.backgroundImage 
element.cssText 
element.codebase 
document.title document.implementation.createHTMLDocument() 
history.pushState() 
history.replaceState()

DOM basierte DoS

Bei dieser Attacke kann Angreifer kontrollierbare Daten an eine platform API weitergegeben werden, welche große Mengen CPU Rechenleistung verbrauchen. Die folgenden Sinks können zu DoS führen: - requestFileSystem - RegExp()

Kontrollieren der Web Message Quelle

Erhält eine Seite Web Messages in einer unsicheren Weise, beispiel durch nicht verifizieren der Quelle in dem Event Listener, können Eigenschaften und Funktionen, welche vom Event Listener aufgerufen werden zu Sinks werden. Ein Angreifer kann einen schädlichen Iframe hosten und mithilfe der postMessage() Methode, schädliche Payloads zu den Sinks schicken. Das folgende Beispiel zeigt einen Angreifbaren Event Listener: ```html

Das folgende Iframe könnte dies ausnutzen:html