# Cross-Site-Tracing

Cross-Site-Tracing (kurz: CST oder XST) ist ein Angriff auf Internetbenutzer mit dem Ziel, bestimmte Benutzerdaten auszuschnüffeln. Über eine mittlerweile selten benutze, reguläre Webserver-Funktion (HTTP-TRACE) und durch Sicherheitslücken in Browsern ist es für einen Dritten möglich, HTTP-Header-Informationen zu erhalten. Dieser Angriff tritt besonders in Verbindung mit Cross-Site-Scripting auf.
Anders als bei einem normalen Cross-Site-Scripting-Angriff war ein Cross-Site-Tracing-Angriff früher nicht auf dasselbe Dokument oder denselben Webserver beschränkt. Theoretisch konnte jeder beliebige Webserver genutzt werden, um an die Benutzerdaten des Opfers einer anderen Website zu gelangen. Moderne Browser verhindern jedoch, dass sensible Daten wie Cookies oder benutzerdefinierte HTTP-Header mit Authentifizierungsinformationen automatisch in Cross-Site-Requests mitgesendet werden. Diese Sicherheitsmaßnahmen machen Cross-Site-Tracing in seiner ursprünglichen Form heute deutlich weniger gefährlich.

## Details

Eine HTTP-TRACE-Anfrage entspricht einer GET-Anfrage, mit dem Unterschied, dass der Webserver die gesamte an ihn gesendete Anfrage als Echo an den Client zurückgibt. Ein clientseitig ausgeführtes Skript kann eine TRACE-Anfrage senden und sämtliche an den Webserver gesendete Informationen (samt allen HTTP-Header-Feldern, also auch Authentifizierungsdaten, Cookies etc.) abfangen, die für den Angreifer von Interesse sind.
Mit einem solchen Angriff können Sicherheitsmaßnahmen wie der von Microsoft in HTTP-Cookies eingeführte HttpOnly-Parameter und sogar verschlüsselte Übertragungen (wie etwa bei HTTPS) umgangen werden.
Cross-Site Tracing (CST) tritt häufig in Verbindung mit Cross-Site Scripting (XSS) auf, da XSS-Lücken – eine der häufigsten Schwachstellen in Webanwendungen – es einem Angreifer erlauben, schädlichen Code im Browser des Opfers auszuführen, der dann eine TRACE-Anfrage sendet. Diese TRACE-Anfrage gibt die vollständigen HTTP-Header der ursprünglichen Anfrage zurück und kann so sensible Informationen wie Authentifizierungstoken preisgeben, die sonst durch moderne Browser-Sicherheitsmechanismen vor dem Zugriff durch clientseitige Skripte geschützt wären. CST wird meist mithilfe von JavaScript und XSS ausgenutzt. Allerdings können auch andere clientseitige Skriptsprachen und Technologien CST ermöglichen, sofern sie HTTP-Anfragen auslösen können und sensible Informationen in den HTTP-Headern übertragen werden.

## Beispiel

* Ein Benutzer besucht eine verwundbare Webanwendung, die durch eine XSS-Lücke kompromittiert wurde.
* Die Seite enthält bösartigen JavaScript-Code, der eine TRACE-Anfrage an die verwundbare Webanwendung sendet, um die Cookie-Daten des Benutzers zu erhalten.
* Der Server sendet die Anfrage des Clients samt HTTP-Header an den Client zurück, wo sie vom JavaScript-Code ausgewertet wird.
* Das JavaScript-Skript filtert die Cookies oder andere Header mit sensiblen Informationen aus und sendet diese an den Angreifer.
Das Ziel ist es, Browser-Sicherheitsmechanismen zu umgehen, welche normalerweise sensible Informationen innerhalb von Custom HTTP-Headern oder Cookies vor dem Zugriff durch bösartige Skripte schützen würden.

## Schutz

Da die Unterstützung der TRACE-Methode auf dem Webserver Voraussetzung für Cross-Site Tracing (CST) ist, sollten Webserver-Administratoren diese Funktion auf dem Webserver für Anfragen deaktivieren. Die allermeisten Webserver haben heutzutage die TRACE-Methode nicht aktiviert. Sie dient ausschließlich diagnostischen Zwecken und sollte immer ausgeschaltet sein.