Unsachgemäße Neutralisierung von Skripten in Attributen auf einer Webseite
Beschreibung
Unsachgemäße Neutralisierung von Skripten in Attributen ist eine Variante von Cross-site Scripting (XSS), die auftritt, wenn Software Eingaben von einer vorgelagerten Komponente empfängt, aber Sonderzeichen oder Skripte, die in HTML-Element-Attribute eingeschleust werden können, nicht ordnungsgemäß neutralisiert. Angreifer nutzen dies aus, indem sie JavaScript-Event-Handler (wie onmouseover, onclick, onerror, onload) oder javascript:-Pseudo-Protokoll-URLs in Attribute wie href, src, style oder benutzerdefinierte Data-Attribute einschleusen. Selbst wenn Anwendungen Script-Tags filtern, können sie die Skriptausführung durch attributbasierte Injection-Vektoren nicht verhindern, was Angreifern ermöglicht, beliebiges JavaScript auszuführen, wenn Benutzer mit den manipulierten Elementen interagieren oder sie ansehen.
Risiko
Diese Schwachstelle ist besonders gefährlich, weil sie gängige XSS-Filter umgeht, die nur nach Script-Tags suchen. Event-Handler auf HTML-Elementen führen JavaScript automatisch aus, wenn sie durch Benutzerinteraktionen (Klicks, Mausbewegungen) oder Seitenereignisse (Load, Error) ausgelöst werden. Die Angriffsfläche ist umfangreich, da fast jedes HTML-Element Event-Handler-Attribute unterstützt. Angreifer können scheinbar harmlose Elemente erstellen, die bösartigen Code beim Hovern, Klicken oder automatischen Seitenrendering ausführen. Links mit javascript:-URLs erscheinen legitim, führen aber bei Klick Code aus. Diese Technik wird häufig bei Phishing-Angriffen und Credential-Harvesting verwendet, da die bösartige Payload innerhalb dessen versteckt ist, was als normale HTML-Struktur erscheint.
Lösung
Codieren Sie alle Benutzereingaben, die in HTML-Attributen platziert werden, mit kontextgerechter Codierung. Für Attributwerte codieren Sie Zeichen einschließlich Anführungszeichen (" und '), Ampersand (&), Kleiner-als (<) und Größer-als (>). Entfernen oder validieren Sie strikt alle Attribute, die Skriptinhalt enthalten könnten, einschließlich aller on*-Event-Handler und javascript:-URLs. Für href-Attribute validieren Sie, dass URLs nur erlaubte Protokolle verwenden (http, https). Verwenden Sie Content Security Policy (CSP) mit deaktivierter unsafe-inline-Direktive, um die Ausführung von Inline-Event-Handlern zu verhindern. Verwenden Sie wenn möglich moderne JavaScript-Muster, die Event-Listener programmatisch hinzufügen, anstatt durch Inline-Attribute.
Häufige Auswirkungen
| Auswirkung | Details |
|---|---|
| Vertraulichkeit | Bereich: Vertraulichkeit Event-Handler-Skripte können Cookies stehlen, Tastatureingaben erfassen, auf DOM-Inhalte zugreifen und sensible Daten an Angreifer-Server exfiltrieren. |
| Integrität | Bereich: Integrität Bösartige Attributskripte können Seiteninhalte modifizieren, gefälschte Elemente einschleusen, Formularziele ändern oder angezeigte Informationen manipulieren. |
| Zugriffskontrolle | Bereich: Zugriffskontrolle Session-Hijacking durch attributbasiertes XSS ermöglicht Kontoübernahme und unbefugte Aktionen im Namen von Opfern. |
Beispielcode + Lösungscode
Anfälliger Code
<!-- ANFÄLLIG: Benutzereingabe in Event-Handlern -->
<div onclick="showDetails('<?php echo $_GET['id']; ?>')">Klicken für Details</div>
<!-- Angriff: id=');alert(document.cookie)// -->
<!-- ANFÄLLIG: Benutzereingabe in href ohne Protokollvalidierung -->
<a href="<?php echo $_GET['url']; ?>">Link besuchen</a>
<!-- Angriff: url=javascript:alert(document.cookie) -->
<!-- ANFÄLLIG: Benutzereingabe in Bildattributen -->
<img src="<?php echo $_GET['img']; ?>" onerror="handleError()">
<!-- Angriff: img=x" onerror="alert(1) -->
Korrigierter Code
<?php
// SICHER: Attributwerte ordnungsgemäß codieren und Protokolle validieren
$id = htmlspecialchars($_GET['id'] ?? '', ENT_QUOTES, 'UTF-8');
$url = $_GET['url'] ?? '';
// URL-Protokoll validieren
function safe_url($url) {
$parsed = parse_url($url);
if (!$parsed || !isset($parsed['scheme'])) {
return '#';
}
if (!in_array(strtolower($parsed['scheme']), ['http', 'https'])) {
return '#';
}
return htmlspecialchars($url, ENT_QUOTES, 'UTF-8');
}
?>
<!-- SICHER: Data-Attribute mit JavaScript-Event-Listenern -->
<div id="details" data-id="<?php echo $id; ?>">Klicken für Details</div>
<script>
document.getElementById('details').addEventListener('click', function() {
var id = this.dataset.id;
showDetails(id);
});
</script>
<!-- SICHER: URL-Validierung -->
<a href="<?php echo safe_url($url); ?>">Link besuchen</a>
<!-- SICHER: Keine Inline-Event-Handler, CSP blockiert Inline-Skripte -->
<?php header("Content-Security-Policy: script-src 'self'"); ?>
Ausgenutzt in der Praxis
Twitter Onmouseover-Wurm (Twitter, 2010)
Angreifer nutzten unzureichende Neutralisierung von Event-Handlern in Twitters Tweet-Rendering aus. Der Angriff verwendete onmouseover-Attribute, um automatisch bösartige Inhalte zu retweeten, wenn Benutzer einfach über Tweets führen, was eine schnelle virale Verbreitung über die Plattform verursachte.
Tools zum Testen/Ausnutzen
-
Burp Suite — Web-Sicherheitstest-Tool mit Payload-Listen für attributbasiertes XSS einschließlich Event-Handlern und javascript:-URLs.
-
XSStrike — XSS-Scanner, der kontextbewusste Payloads generiert, einschließlich attributbasierter Injection-Vektoren.
CVE-Beispiele
-
CVE-2023-36884 — Microsoft Office XSS durch Attribut-Injection in der Dokumentenverarbeitung.
-
CVE-2022-31692 — Spring Security attributbasiertes XSS in der Redirect-Behandlung.
Referenzen
-
MITRE. "CWE-83: Improper Neutralization of Script in Attributes in a Web Page." https://cwe.mitre.org/data/definitions/83.html
-
OWASP. "XSS Filter Evasion Cheat Sheet." https://cheatsheetseries.owasp.org/cheatsheets/XSS_Filter_Evasion_Cheat_Sheet.html