{"id":310882,"date":"2025-04-25T00:04:58","date_gmt":"2025-04-24T22:04:58","guid":{"rendered":"https:\/\/www.borncity.com\/blog\/?p=310882"},"modified":"2025-04-25T09:37:15","modified_gmt":"2025-04-25T07:37:15","slug":"gehen-bald-alle-browser-kaputt-sollen-in-html-attributen-weg","status":"publish","type":"post","link":"https:\/\/borncity.com\/blog\/2025\/04\/25\/gehen-bald-alle-browser-kaputt-sollen-in-html-attributen-weg\/","title":{"rendered":"Gehen 'bald' alle Browser bzw. das Web kaputt?  \"<\" &#038; \">\" sollen in innerHTML weg"},"content":{"rendered":"<p><img decoding=\"async\" style=\"float: left; margin: 0px 10px 0px 0px; display: inline;\" src=\"https:\/\/borncity.com\/blog\/wp-content\/uploads\/2021\/06\/Chrome-01.jpg\" \/>[<a href=\"https:\/\/borncity.com\/win\/2025\/04\/25\/will-all-browsers-and-the-web-soon-be-broken-should-be-removed-from-innerhtml\/\" target=\"_blank\" rel=\"noopener\">English<\/a>]Kleiner Splitter aus der Welt der Webbrowser. Im Chromium-Bug-Tracker gibt es eine Diskussion zu den spitzen Klammern (\"&lt;\" und \"&gt;\"), die als Zeichen in HTML-Attributen bzw. in innerHTML-Elementen vorkommen k\u00f6nnen. Nun soll eine Escape-Behandlung eingeleitet werden, um mXSS-Angriffe zu verhindern. Das k\u00f6nnte aber die Chromium-Browser (und weitere Browser) \"kaputt\" machen.<\/p>\n<p><!--more--><\/p>\n<h2>Was ist mXSS?<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vg06.met.vgwort.de\/na\/01d0b4d437c74ebfac1b435159c6be60\" alt=\"\" width=\"1\" height=\"1\" \/>Das K\u00fcrzel mXSS steht f\u00fcr \"mutation cross-site scripting\". Dieser Cross-Site-Scripting-Vektor (XSS), wurde laut <a href=\"https:\/\/www.nds.rub.de\/research\/publications\/mXSS-Attacks\/index.html\" target=\"_blank\" rel=\"noopener\">dieser Quelle<\/a>, bereits im Jahr 2007 durch Hasegawa entdeckt. Der Forscher war in einer Browser-Implementierung auf eine falsche Verwendung des Backtick-Zeichens\u00a0(` ) gesto\u00dfen.<\/p>\n<p>Sah dies zun\u00e4chst wie ein Implementierungsfehler aus, zeigte sich, dass man auf das erste Beispiel f\u00fcr eine neue Klasse von XSS-Vektoren, sp\u00e4ter als mutationsbasierte XSS-Vektoren (mXSS) bezeichnet, gesto\u00dfen war. Diese mXSS-Vektoren k\u00f6nnen in innerHTML und verwandten Eigenschaften auftreten.<\/p>\n<p>Konkret geht es um Zeichen, die in HTML-Attributen und Tags vorkommen k\u00f6nnen. So k\u00f6nnten die spitzen Klammern (\"&lt;\" und \"&gt;\"), die eigentlich HTML-Tags in HTML auszeichnen auch als Zeichen in Werten von Attributen dieser Tags auftreten.<\/p>\n<p>Dann m\u00fcsste der Browser eine Escape-Sequenz einleiten, die daf\u00fcr sorgt, dass die Zeichen als Werte und nicht als einleitende und abschlie\u00dfende spitze Klammer f\u00fcr HTML-Tags interpretiert werden. Oder HTML-Tags werden, wie in nachfolgender Anweisung, falsch geschachtelt:<\/p>\n<pre>&lt;form id=\"outer\"&gt;&lt;div&gt;&lt;\/form&gt;&lt;form id=\"inner\"&gt;&lt;input&gt;<\/pre>\n<p>Durch entsprechende Zeichen (\"&lt;\" und \"&gt;\") in einem Attribut eines HTML-Tags k\u00f6nnte ein Angreifer sch\u00e4dlichen Code in eine Webseite oder eine Web-App einbetten, der dann ausgewertet und ausgef\u00fchrt wird. Auf GitHub gibt es ein <a href=\"https:\/\/sonarsource.github.io\/mxss-cheatsheet\/\" target=\"_blank\" rel=\"noopener\">mXSS Cheat Sheet<\/a> mit Beispielen. mXSS betrifft alle drei gro\u00dfen Browserfamilien: IE, Firefox und Chrome.<\/p>\n<h2>Worum geht es bei der Chromium-Diskussion?<\/h2>\n<p>Die Behandlung von mXSS-Codes in innerHTML-Elementen\u00a0ist aber bei den Chrome Browser-Implementierungen nicht gel\u00f6st.\u00a0Statt eine Escape-Sequenz einzuleiten wird der Inhalt geparst und ausgef\u00fchrt.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"https:\/\/i.postimg.cc\/fLWjYzvP\/image.png\" alt=\"mXSS-Behandlung in Chromium\" width=\"576\" height=\"293\" \/><\/p>\n<p>Ich bin die Tage \u00fcber obigen Post von\u00a0Lukasz Olejnik auf das Thema gesto\u00dfen, was im Chromium Issues-Tracker seit Februar 2025 unter\u00a0<a href=\"https:\/\/issues.chromium.org\/issues\/40747109\" target=\"_blank\" rel=\"noopener\"> Escape \"&lt;\" and \"&gt;\" when escaping HTML attribute values to avoid mXSS<\/a> diskutiert wird.<\/p>\n<p>Es gibt einen Pull-Request\u00a0<a href=\"https:\/\/github.com\/whatwg\/html\/pull\/6362\" target=\"_blank\" rel=\"noopener\">Escape \"&lt;\" and \"&gt;\" when serializing attribute values #6362<\/a>, um mXSS-Angriffe im Chromium-Browser zu eliminieren. Jemand gibt zu bedenken, dass die Kompatibilit\u00e4tsauswirkungen f\u00fcr das Web\u00a0f\u00fcr diese \u00c4nderung noch nicht bekannt ist.<\/p>\n<p>Was bekannt sei, ist, dass die \u00c4nderung des aktuellen Verhaltens zur\u00fcck auf das Jahr 2008 (oder wahrscheinlich 2011 f\u00fcr WebKit)\u00a0 zur\u00fcck geht, wo diese Implementierung ausgeliefert wurde. Wenn ein mXSS-Schutz in Browsern implementiert wurde, k\u00f6nnte das zu gravierenden Auswirkungen f\u00fchren.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[English]Kleiner Splitter aus der Welt der Webbrowser. Im Chromium-Bug-Tracker gibt es eine Diskussion zu den spitzen Klammern (\"&lt;\" und \"&gt;\"), die als Zeichen in HTML-Attributen bzw. in innerHTML-Elementen vorkommen k\u00f6nnen. Nun soll eine Escape-Behandlung eingeleitet werden, um mXSS-Angriffe zu verhindern. &hellip; <a href=\"https:\/\/borncity.com\/blog\/2025\/04\/25\/gehen-bald-alle-browser-kaputt-sollen-in-html-attributen-weg\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4461,1356],"tags":[414,24],"class_list":["post-310882","post","type-post","status-publish","format-standard","hentry","category-edge","category-google-chrome-internet","tag-browser","tag-problem"],"_links":{"self":[{"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/posts\/310882","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/comments?post=310882"}],"version-history":[{"count":0,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/posts\/310882\/revisions"}],"wp:attachment":[{"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/media?parent=310882"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/categories?post=310882"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/tags?post=310882"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}