{"id":13484,"date":"2024-07-13T14:44:43","date_gmt":"2024-07-13T12:44:43","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=13484"},"modified":"2024-07-13T14:44:43","modified_gmt":"2024-07-13T12:44:43","slug":"385-000-seiten-verbreiten-schadsoftware-risiko-externer-abhangigkeiten","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/385-000-seiten-verbreiten-schadsoftware-risiko-externer-abhangigkeiten\/","title":{"rendered":"385.000 Seiten verbreiten Schadsoftware: Untersch\u00e4tztes Risiko externer Abh\u00e4ngigkeiten im Web"},"content":{"rendered":"<p>Dieser Lieferkettenangriff er\u00f6ffnet f\u00fcr das Web eine neue Dimension: Rund 385.000 Hosts verbreiten Schadsoftware von Polyfill[.]io. Und das, obwohl Polyfills in den meisten F\u00e4llen gar nicht mehr gebraucht wird. Dieser Fall zeigt aber ein weiteres Grundsatzproblem von vielen Webentwicklern &#8211; der sorglose Umgang mit externem Code sowie externen Abh\u00e4ngigkeiten. Im Detail zeigt dir das dieser Beitrag zusammen mit verschiedenen L\u00f6sungsm\u00f6glichkeiten.<\/p>\n<h2 class=\"wp-block-heading\">Was ist ein Polyfill und wof\u00fcr braucht man das?<\/h2>\n<p>Allgemein handelt es sich bei einem Polyfill (oft auch Shim genannt) um Programmcode, der moderne Funktionen  nachr\u00fcstet, der (noch) nicht offiziell unterst\u00fctzt wird. Es ist also eine Kompatibilit\u00e4tsschicht. Polyfills kann es nahezu \u00fcberall geben, beispielsweise in PHP und Python. Erst PHP 8 brachte die Funktion <code class=\"\" data-line=\"\">str_starts_with<\/code>, um zu pr\u00fcfen, ob eine Zeichenkette mit einer bestimmten anderen Zeichenkette beginnt.<sup data-fn=\"3b47d12a-3702-4ba1-b30a-3f0d2cc51c69\" class=\"fn\"><a href=\"#3b47d12a-3702-4ba1-b30a-3f0d2cc51c69\" id=\"3b47d12a-3702-4ba1-b30a-3f0d2cc51c69-link\">1<\/a><\/sup> Bis dahin musste man sich selbst behelfen, etwa \u00fcber <code class=\"\" data-line=\"\">strpos<\/code>.<sup data-fn=\"f55d3f08-6167-4fe5-887e-555ce9183a72\" class=\"fn\"><a href=\"#f55d3f08-6167-4fe5-887e-555ce9183a72\" id=\"f55d3f08-6167-4fe5-887e-555ce9183a72-link\">2<\/a><\/sup> Der Code war teils aufw\u00e4ndiger oder zumindest weniger lesbar.<\/p>\n<p>\u00dcblicherweise pr\u00fcft ein Polyfill, ob er ben\u00f6tigt wird. Im besten Falle etwa, ob eine bestimmte Funktion oder Funktionalit\u00e4t vorhanden ist &#8211; nur dann aktiviert er sich. Manche fragen auch Softwareversionen ab. Sauber umgesetzt l\u00e4sst er modernerer Software den Vorzug falls m\u00f6glich, da deren native Implementierungen oft performanter sind.<\/p>\n<h2 class=\"wp-block-heading\">Polyfills im Web f\u00fcr \u00e4ltere und unbelehrbare Browser<\/h2>\n<p>Bei Polyfill[.]io geht es um das Web, daher schauen wir uns die Webbrowser in diesem Abschnitt genauer an. Sehr viele  Polyfills beziehen sich hier auf den Internet Explorer: <a href=\"https:\/\/u-labs.de\/portal\/browserkrieg-1-so-kaempfte-microsofts-internet-explorer-gegen-netscape-um-das-web-zu-erobern-und-anschliessend-tief-zu-fallen\/\" data-type=\"post\" data-id=\"9472\">Microsofts Browser erreichte um die Jahrtausendwende als &#8222;Gewinner&#8220; des ersten Browserkrieges eine Quasi-Monopolstellung<\/a> mit \u00fcber 90% Marktanteil (2003).<sup data-fn=\"186bb90e-9669-4a76-937f-c55113392afd\" class=\"fn\"><a href=\"#186bb90e-9669-4a76-937f-c55113392afd\" id=\"186bb90e-9669-4a76-937f-c55113392afd-link\">3<\/a><\/sup>Allgemein handelt es sich bei einem Polyfill (oft auch Shim genannt) um Programmcode, der moderne Funktionen in Webbrowsern nachr\u00fcstet, die ihn (noch) nicht unterst\u00fctzen. Es ist also eine Kompatibilit\u00e4tsschicht. Mehrheitlich bezieht sich das auf den Internet Explorer: Microsofts Browser erreichte um die Jahrtausendwende als &#8222;Gewinner&#8220; des ersten Browserkrieges eine Quasi-Monopolstellung mit \u00fcber 90% Marktanteil (2003).<\/p>\n<p>Nach diesem &#8222;Sieg&#8220; sah der Konzern keine Notwendigkeit mehr, \u00fcber 100 Millionen US-Dollar pro Jahr f\u00fcr mehr als 1.000 Mitarbeiter in das Projekt zu stecken.<sup data-fn=\"b0dceb3d-0ee7-4b6a-8890-f0c76449b9ab\" class=\"fn\"><a href=\"#b0dceb3d-0ee7-4b6a-8890-f0c76449b9ab\" id=\"b0dceb3d-0ee7-4b6a-8890-f0c76449b9ab-link\">4<\/a><\/sup> Der Browser verlor den Anschluss und hinkte der aufstrebenden Konkurrenz (anfangs vor allem Mozilla Firefox) immer weiter hinterher. Zwar sanken die Marktanteile, doch als Standardbrowser in Windows konnten es sich viele nicht leisten, ihn zu vernachl\u00e4ssigen. Wer neue Funktionen nutzen wollte, musste daher meist Hacks einbauen, damit die Seite zumindest einigerma\u00dfen auch im IE funktionierte. Er wird daher oft als meistgehasster Browser der Welt bezeichnet.<sup data-fn=\"b9baad82-7e3d-4aa9-a16e-90f2b597a76d\" class=\"fn\"><a href=\"#b9baad82-7e3d-4aa9-a16e-90f2b597a76d\" id=\"b9baad82-7e3d-4aa9-a16e-90f2b597a76d-link\">5<\/a><\/sup> Umfragen unter Entwicklern belegen das.<sup data-fn=\"f539ff65-40dc-4da3-9ec6-b73c12eae853\" class=\"fn\"><a href=\"#f539ff65-40dc-4da3-9ec6-b73c12eae853\" id=\"f539ff65-40dc-4da3-9ec6-b73c12eae853-link\">6<\/a><\/sup><\/p>\n<p>Teilweise brauchte man auch f\u00fcr andere Browser Polyfills\/Shims, zumindest zeitweise. Bei vielen Funktionen zogen die meisten Browser mit der Zeit nach.<sup data-fn=\"2c350d2f-7c65-4f4e-8ff4-062702956a54\" class=\"fn\"><a href=\"#2c350d2f-7c65-4f4e-8ff4-062702956a54\" id=\"2c350d2f-7c65-4f4e-8ff4-062702956a54-link\">7<\/a><\/sup> Ungeschlagen bleibt jedoch Microsofts Internet Explorer, weil Microsoft gezielt Standards untergr\u00e4bt. Webseiten sollten f\u00fcr den IE entwickelt und nur dort so aussehen wie sie sollten, damit Nutzer gezwungen sind, Microsofts Browser zu verwenden. F\u00fcr ihn gab es extra conditional comments, um HTML exklusiv f\u00fcr den IE oder bestimmte Versionen (z.B. hier kleiner als IE9) zu laden:<sup data-fn=\"f0160571-c3b2-476e-89fb-df3eabbb82f6\" class=\"fn\"><a href=\"#f0160571-c3b2-476e-89fb-df3eabbb82f6\" id=\"f0160571-c3b2-476e-89fb-df3eabbb82f6-link\">8<\/a><\/sup><\/p>\n<pre class=\"wp-block-code\"><code class=\"\" data-line=\"\">&lt;!--&#091;if lt IE 9]&gt;\n&lt;script src=&quot;https:\/\/html5shim.googlecode.com\/svn\/trunk\/html5.js&quot;&gt;&lt;\/script&gt;\n&lt;!&#091;endif]--&gt;<\/code><\/pre>\n<p>In diesem Beispiel geht es um HTML5. Die Auszeichnungssprache f\u00fcr Webseiten erschien 2008, doch der IE unterst\u00fctzte sie selbst in der letzten Version 11 bis zum Ende hin nur vereinzelt. Das gleiche gilt f\u00fcr CSS zur Gestaltung von Webseiten.<sup data-fn=\"4f25a6dc-fb96-490a-a36c-044852a516b6\" class=\"fn\"><a href=\"#4f25a6dc-fb96-490a-a36c-044852a516b6\" id=\"4f25a6dc-fb96-490a-a36c-044852a516b6-link\">9<\/a><\/sup> Einen Eindruck vermittelt folgender Auszug:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"652\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-1024x652.png\" alt=\"\" class=\"wp-image-13485\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-1024x652.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-300x191.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-768x489.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-565x360.png 565w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-267x170.png 267w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik.png 1352w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<p>Auch bei der Skriptsprache JavaScript sieht es kaum besser aus: Das 2015 ver\u00f6ffentlichte ECMASkript 2015 (ES6) beispielsweise unterst\u00fctzt selbst der aktuellste IE 11 nur teilweise.<sup data-fn=\"648d4c91-fb91-45be-a607-e558c71c5878\" class=\"fn\"><a href=\"#648d4c91-fb91-45be-a607-e558c71c5878\" id=\"648d4c91-fb91-45be-a607-e558c71c5878-link\">10<\/a><\/sup> Dies ist jeweils nur ein Auszug. HTML, CSS und JavaScript sind \u00fcber die Jahre sehr m\u00e4chtig geworden. Der IE hatte M\u00fche, nicht noch weiter abgehangen zu werden, als ohnehin schon.<sup data-fn=\"a4392d48-d22d-4e3f-849e-de1b638e5231\" class=\"fn\"><a href=\"#a4392d48-d22d-4e3f-849e-de1b638e5231\" id=\"a4392d48-d22d-4e3f-849e-de1b638e5231-link\">11<\/a><\/sup><\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"251\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-1-1024x251.png\" alt=\"\" class=\"wp-image-13486\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-1-1024x251.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-1-300x73.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-1-768x188.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-1-640x157.png 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-1-694x170.png 694w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-1.png 1343w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<h2 class=\"wp-block-heading\">Was ist Polyfill[.]io und was ist damit passiert?<\/h2>\n<p>Es existieren eine ganze Reihe an Bibliotheken, um diverse Funktionen bei Bedarf in \u00e4lteren Browsern nachzur\u00fcsten oder zu vereinheitlichen. Eine der bekanntesten im JavaScript-Bereich ist beispielsweise jQuery: Sie wurde in Version 1.0 im Jahr 2006 vorgestellt<sup data-fn=\"fc754830-29ef-42cb-82a2-c4c2b3368c52\" class=\"fn\"><a href=\"#fc754830-29ef-42cb-82a2-c4c2b3368c52\" id=\"fc754830-29ef-42cb-82a2-c4c2b3368c52-link\">12<\/a><\/sup> und soll einheitlichen JS-Code \u00fcber verschiedene Browser hinweg erm\u00f6glichen. Der Grundgedanke ist im Kern immer gleich &#8211; man bindet eine Bibliothek ein und muss sich im besten Falle nicht mehr gro\u00dfartig um unterschiedliche Webbrowser k\u00fcmmern. Stattdessen sorgt die Bibliothek daf\u00fcr, dass eine bestimmte Funktion \u00fcberall gew\u00e4hrleistet ist.<\/p>\n<p>Eine solche hat Andrew Betts entwickelt: Er schuf polyfill-service<sup data-fn=\"be759a5f-91e5-402e-a4d8-1729da34987e\" class=\"fn\"><a href=\"#be759a5f-91e5-402e-a4d8-1729da34987e\" id=\"be759a5f-91e5-402e-a4d8-1729da34987e-link\">13<\/a><\/sup> als quelloffenes Projekt.<sup data-fn=\"9b35eda0-c824-4d53-916c-6c0d0808b8d1\" class=\"fn\"><a href=\"#9b35eda0-c824-4d53-916c-6c0d0808b8d1\" id=\"9b35eda0-c824-4d53-916c-6c0d0808b8d1-link\">14<\/a><\/sup> Doch \u00fcber die Domain polyfill[.]io habe er nie Kontrolle gehabt.<sup data-fn=\"17255d32-e8d5-4cfc-bed2-13e4d625c11f\" class=\"fn\"><a href=\"#17255d32-e8d5-4cfc-bed2-13e4d625c11f\" id=\"17255d32-e8d5-4cfc-bed2-13e4d625c11f-link\">15<\/a><\/sup> Anhand des Git-Verlaufs l\u00e4sst sich belegen, dass er 2014 den ersten Commit in diesem Repository ausf\u00fchrte.<sup data-fn=\"7ce8fe8c-1e41-436f-82f4-1bfe86676ef9\" class=\"fn\"><a href=\"#7ce8fe8c-1e41-436f-82f4-1bfe86676ef9\" id=\"7ce8fe8c-1e41-436f-82f4-1bfe86676ef9-link\">16<\/a><\/sup> <\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"584\" height=\"365\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-2.png\" alt=\"\" class=\"wp-image-13488\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-2.png 584w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-2-300x188.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-2-576x360.png 576w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-2-272x170.png 272w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/a><\/figure>\n<\/div>\n<p>Interessant ist, dass polyfill[.]io erstmals 2013 in der README des Projekts verlinkt wird.<sup data-fn=\"dbef39ee-7569-4f1f-823d-ac41473ff03a\" class=\"fn\"><a href=\"#dbef39ee-7569-4f1f-823d-ac41473ff03a\" id=\"dbef39ee-7569-4f1f-823d-ac41473ff03a-link\">17<\/a><\/sup> Die Domain existiert also seit geraumer Zeit und wurde laut bisherigen Informationen an ein chinesisches Unternehmen verkauft.<sup data-fn=\"4b8d6b23-0d48-4c71-8032-222efbdf2d4e\" class=\"fn\"><a href=\"#4b8d6b23-0d48-4c71-8032-222efbdf2d4e\" id=\"4b8d6b23-0d48-4c71-8032-222efbdf2d4e-link\">18<\/a><\/sup> Dort hat man die ehemals von Fastly bereitgestellten Inhalte umgezogen.<sup data-fn=\"bbf6d698-e582-486f-9749-22bf3f3e6360\" class=\"fn\"><a href=\"#bbf6d698-e582-486f-9749-22bf3f3e6360\" id=\"bbf6d698-e582-486f-9749-22bf3f3e6360-link\">19<\/a><\/sup> Anschlie\u00dfend wurde das dort ausgelieferte JavaScript mit Schadcode verseucht, der Besucher auf Webseiten f\u00fcr Sportwetten und andere <em>Erwachseneninhalte<\/em> umleitet. Dieser scheint nicht kontinuierlich an jeden ausgeliefert zu sein, um die Entdeckung zu erschweren. Laut Berichten eines Betroffenen beispielsweise nur an Mobilger\u00e4te.<sup data-fn=\"03fdfc29-df98-456f-ac61-648560932ceb\" class=\"fn\"><a href=\"#03fdfc29-df98-456f-ac61-648560932ceb\" id=\"03fdfc29-df98-456f-ac61-648560932ceb-link\">20<\/a><\/sup><\/p>\n<h2 class=\"wp-block-heading\">Wer ist betroffen?<\/h2>\n<p>Inzwischen wurde die Domain polyfill[.]io von der Registrierungsstelle abgeschaltet. Auch andere Anbieter wie Google hat das Ausspielen von Werbung an Seiten gestoppt, die JS von dieser Domain eingebunden hatten. Dass derartige Ma\u00dfnahmen ergriffen wurden, liegt am immensen Ausma\u00df: Publicwww erlaubt das Durchsuchen von technischen Aspekten vieler Webseiten. Kostenfrei lassen sich die beliebtesten 3 Millionen Seiten durchsuchen. Hier ist die polyfill-Domain in rund 477.000 der indexierten Seiten eingebunden.<sup data-fn=\"cd24f946-b770-4d45-9295-17414507beab\" class=\"fn\"><a href=\"#cd24f946-b770-4d45-9295-17414507beab\" id=\"cd24f946-b770-4d45-9295-17414507beab-link\">21<\/a><\/sup> GitHub liefert \u00fcber 207.000 betroffene Dateien, in denen die Domain referenziert wird.<sup data-fn=\"672969ac-d59c-42a0-a346-a9485bbcf027\" class=\"fn\"><a href=\"#672969ac-d59c-42a0-a346-a9485bbcf027\" id=\"672969ac-d59c-42a0-a346-a9485bbcf027-link\">22<\/a><\/sup><\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-3.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"492\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-3-1024x492.png\" alt=\"\" class=\"wp-image-13490\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-3-1024x492.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-3-300x144.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-3-768x369.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-3-640x307.png 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-3-354x170.png 354w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-3.png 1029w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<p>Darunter sind bekannte, gro\u00dfe Seiten mit starker Reichweite. Ein paar Beispiele: The Guardian, Buzzfeed, Breithart, The Verge, The Epoch Times, Ars Technica, Nintendo, Metro (GB), Finanztip (467.000 Abonnenten auf YT), Weltbild, RTL2, Neckermann-Reisen und viele mehr. Immerhin rund 5.800 Seiten mit .de Domainendung sind darunter.<sup data-fn=\"eac4ee8a-8dd7-4e1d-b356-94148d710dfc\" class=\"fn\"><a href=\"#eac4ee8a-8dd7-4e1d-b356-94148d710dfc\" id=\"eac4ee8a-8dd7-4e1d-b356-94148d710dfc-link\">23<\/a><\/sup><\/p>\n<p>Hierbei ist zu bedenken, dass Andrew Betts bereits am 25.02.2024 zum ersten Mal gewarnt hat. Es dauerte Monate, bis sich die Information verbreitet hat. In unseren Medien sind viele erst Ende Juni darauf aufmerksam geworden.<sup data-fn=\"2a3216d6-7596-418b-b70f-ddba5286e803\" class=\"fn\"><a href=\"#2a3216d6-7596-418b-b70f-ddba5286e803\" id=\"2a3216d6-7596-418b-b70f-ddba5286e803-link\">24<\/a><\/sup> Anfang Juli die Erg\u00e4nzung der Zahlen von anfangs 100.000 auf auf rund 400.000 Hosts.<sup data-fn=\"cb2c7ffc-b39a-4445-8334-658980b183a6\" class=\"fn\"><a href=\"#cb2c7ffc-b39a-4445-8334-658980b183a6\" id=\"cb2c7ffc-b39a-4445-8334-658980b183a6-link\">25<\/a><\/sup> Auch uBlock Origin hat erst am 25.06.2024 reagiert und die Domain in ihre Liste schadhafter Seiten aufgenommen.<sup data-fn=\"7027822b-d4fc-4dad-b822-d6eeee80495c\" class=\"fn\"><a href=\"#7027822b-d4fc-4dad-b822-d6eeee80495c\" id=\"7027822b-d4fc-4dad-b822-d6eeee80495c-link\">26<\/a><\/sup> Dieser Bis heute haben manche Betreiber nicht reagiert und binden die Domain immer noch ein. Man kann sich kaum vorstellen, wie gro\u00df das Schadpotenzial bei derart vielen Seiten \u00fcber einen langem Zeitraum gewesen sein muss.<\/p>\n<p>Als Nutzer seid ihr relativ machtlos und m\u00fcsst darauf vertrauen, dass Sicherheit f\u00fcr die Seitenbetreiber nicht nur Lippenbekenntnisse sind.<\/p>\n<h2 class=\"wp-block-heading\">Was ihr daraus lernen k\u00f6nnt und solltet<\/h2>\n<p>Es gibt nun zwei M\u00f6glichkeiten: Wir tauschen das CDN aus, schimpfen auf die b\u00f6sen Chinesen und laufen ins offene Messer (bzw. lassen die Nutzer ins offene Messer laufen). Dann machen wir weiter wie bisher, um beim n\u00e4chsten Angriff das gleiche zu tun &#8211; Scherben aufkehren und zur\u00fcck zum Tagesgesch\u00e4ft. Die n\u00e4chsten Angriffe laufen bereits: Es gibt Hinweise darauf, dass alleine dieser Akteur vier weitere Domains (bootcdn[.]net, bootcss[.]com, staticfile[.]net, and staticfile[.]org) kontrolliert.<sup data-fn=\"0f2c3f88-70e4-4f34-8b70-3c0b65175d82\" class=\"fn\"><a href=\"#0f2c3f88-70e4-4f34-8b70-3c0b65175d82\" id=\"0f2c3f88-70e4-4f34-8b70-3c0b65175d82-link\">27<\/a><\/sup><\/p>\n<p>Oder wir verstehen, durch welche grundlegenden Denkfehler derartige Angriffsfl\u00e4chen \u00fcberhaupt erst geschaffen werden. Vieles kann getan werden, um das zu verhindern oder wenigstens den Schaden stark einzud\u00e4mmen. U-Labs ist beispielsweise nicht betroffen &#8211; obwohl ich bei weitem nicht die Ressourcen von RTL2 oder einem anderen Unternehmen mit Milliardenumsatz habe. Das ist kein Zufall, daher befasst sich dieser Abschnitt mit den Ursachen und M\u00f6glichkeiten, was ihr besser machen k\u00f6nnt, um von den n\u00e4chsten CDN-Hacks nicht betroffen zu sein &#8211; und nebenbei noch etwas gutes f\u00fcr die Privatsph\u00e4re eurer Besucher zu tun. <\/p>\n<h3 class=\"wp-block-heading\">Drittanbieter-Abh\u00e4ngigkeiten sind ein Sicherheitsrisiko!<\/h3>\n<p> Man sollte sich erst mal grunds\u00e4tzlich im klaren werden: Fremder Code ist ein Sicherheitsrisiko. Sobald ich Code von anderen bei mir einbette, muss ich dem voll vertrauen k\u00f6nnen. Der Entwickler kann Schadcode einbauen oder seine Sicherheit vernachl\u00e4ssigen und gehackt werden. Weitere Szenarien wie hier durch den Verkauf geschehen sind ebenfalls denkbar. Wenn ich jemandem einen Schl\u00fcssel zu meiner Wohnung gebe, ist das ein Risiko. Diese Person kann jederzeit rein kommen und alles m\u00f6gliche machen. So ist es auch hier und dem muss man sich bewusst werden. <\/p>\n<p>Es ist ein kritischer Trend, dass bei vielen Entwicklern offenbar blind fremder Code ausgef\u00fchrt wird. Mein absurdestes Parabeispiel daf\u00fcr ist das NodeJS Paket <code class=\"\" data-line=\"\">is-even<\/code>.<sup data-fn=\"661b7233-6293-4a91-a642-d65c4ffb4e94\" class=\"fn\"><a href=\"#661b7233-6293-4a91-a642-d65c4ffb4e94\" id=\"661b7233-6293-4a91-a642-d65c4ffb4e94-link\">28<\/a><\/sup> Das hat derzeit rund 121.000 Downloads pro Woche (!) und verweist auf ein zweites Paket is-odd mit \u00fcber 256.000 w\u00f6chentlicher Downloads (!!), dessen R\u00fcckgabewert es negiert (!!!). Das wiederum verweist auf is-number als Abh\u00e4ngigkeit mit rund 64.262.000 (!!!!!) Installationen innerhalb von sieben Tagen. Zuf\u00e4lligerweise liegen die wenigstens beim gleichen Entwickler. \u00dcblich f\u00fcr das JS-\u00d6kosystem w\u00e4ren ein riesiger Baum mit hunderten Abh\u00e4ngigkeiten \u00fcber zig Personen, denen ihr alle vertraut!<\/p>\n<p>Der Kernpunkt ist hier aber ein anderer: In so ziemlich jeder Sprache kann man mit dem Modulo-Operator in einer einzigen Codezeile pr\u00fcfen, ob eine Zahl gerade oder ungerade ist. Selbst JavaSkript kann das!<\/p>\n<pre class=\"wp-block-code\"><code class=\"\" data-line=\"\">let isOdd = (number % 2) == 0<\/code><\/pre>\n<p>Jede Woche l\u00e4dt sich also eine hohe 6-Stellige Zahl an Projekten eine potenzielle Remote Code Execution L\u00fccke ins Projekt, wegen einer Codezeile. Nicht wegen hochkomplexen Berechnungen, f\u00fcr die man Mathematik studiert und 100.000 Zeilen selbst programmieren m\u00fcsste. Wegen einer Zeile, die nicht mal k\u00fcrzer ist, als die Funktion aufzurufen. <\/p>\n<p>Das steht in absolut keinem Verh\u00e4ltnis und zeigt klar: Wer so was tut, hat weder davon ein Verst\u00e4ndnis. Noch scheint er \u00fcberhaupt zu wissen, was er da tut. Damit ist er in guter Gesellschaft. Der Entwickler von diesen drei Paketen schreibt selbst:<\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>I created this in 2014, when I was learning how to program.<\/p>\n<p><cite>Jon Schlinkert<\/cite><\/p><\/blockquote>\n<p>Einer hat also keine Ahnung, ver\u00f6ffentlicht unn\u00f6tige Pakete. Und hunderttausende folgen dem blind. Wer vorne steht, wird schon wissen, was er tut&#8230; Mit der Einstellung werden wir bei der Sicherheit nicht einen Schritt weiter kommen. Sondern st\u00e4ndig die gleichen Bruchbuden bauen und blo\u00df den Schutt aufr\u00e4umen, wenn wieder mal eine zusammen bricht. Dieser Vergleich ist nicht \u00fcbertrieben wenn ihr euch &#8211; insbesondere im JS-Umfeld &#8211; mal anschaut, wie viele Abh\u00e4ngigkeiten da drin stecken. Das sind schnell 5-20 direkte Pakete und da h\u00f6rt es ja nicht auf. Jedes Paket bringt noch mal mindestens so viele mit, sodass man am Ende schnell im 3-Stelligen Bereich landet.<\/p>\n<p>Stattdessen m\u00fcssten externe Abh\u00e4ngigkeiten \u00e4u\u00dferst sorgsam eingesetzt werden: Brauche ich daf\u00fcr wirklich eine fremde Bibliothek, oder schreibe ich die 10 Zeilen selbst und bin unabh\u00e4ngig? Wenn es sein muss, wer hat die entwickelt? Ist das seri\u00f6s oder fallen die regelm\u00e4\u00dfig damit auf, z.B. ihre Sicherheit zu vernachl\u00e4ssigen? Welche Alternativen gibt es?<\/p>\n<h3 class=\"wp-block-heading\">Brauche ich das \u00fcberhaupt (noch)?<\/h3>\n<p>Alles \u00e4ndert sich, das ist auch im Web so: Was heute notwendig ist, kann es in ein paar Jahren schon nicht mehr sein. Unn\u00f6tiger Code ist ebenfalls ein Sicherheitsrisiko, er steigert die Angriffsfl\u00e4che. Wenn ich 5 Autos an unterschiedlichen Standorten habe, ist das Risiko, dass eines davon mal geklaut oder aufgebrochen wird, h\u00f6her als mit einem. Brauche ich die gar nicht alle, setze ich mich also einem unn\u00f6tig hohen Risiko ohne Mehrwert aus. <\/p>\n<p>Das sollte einleuchten und ist in der Softwareentwicklung wenig anders: Code enth\u00e4lt Fehler, je mehr Code um so mehr Fehler habe ich &#8211; selbst wenn dieser lokal liegt. Sicherheitstechnisch ist es daher sinnvoll, ein Projekt regelm\u00e4\u00dfig einem Fr\u00fchjahrsputz zu unterziehen: Wird etwas nicht mehr gebraucht, entfernt man es. Bei Polyfills sind wir n\u00e4mlich nicht mehr im Jahre 2010. Der IE ist seit 2022 offiziell tot<sup data-fn=\"92393cc8-21ae-43b2-92eb-4a4c90aa96f0\" class=\"fn\"><a href=\"#92393cc8-21ae-43b2-92eb-4a4c90aa96f0\" id=\"92393cc8-21ae-43b2-92eb-4a4c90aa96f0-link\">29<\/a><\/sup> und bei den verbleibenden Browsern haben die Abst\u00e4nde abgenommen. JS ES6 wird seit ca. 2016 von allen Browsern komplett unterst\u00fctzt. Die letzte Ausnahme war der Internet Explorer 11. Was an relevanten Funktionen \u00fcbrig bleibt (wie z.B. Web Bluetooth<sup data-fn=\"3ed51a0c-4269-4c2c-950e-3070ffc0cbc9\" class=\"fn\"><a href=\"#3ed51a0c-4269-4c2c-950e-3070ffc0cbc9\" id=\"3ed51a0c-4269-4c2c-950e-3070ffc0cbc9-link\">30<\/a><\/sup>), kann man oft gar nicht per Polyfill l\u00f6sen.<\/p>\n<p>Auch heute noch gibt es Webseiten, die uralte Hacks f\u00fcr den IE einbinden. Dass diese Frage wohl kaum gestellt wird hat dazu beigetragen, dass extrem viele Seiten verwundbar sind. Derartiges Aufr\u00e4umen ist unbeliebt, weil es Ressourcen kostet, von denen Chef und Nutzer nichts sehen. <\/p>\n<h3 class=\"wp-block-heading\">Externe Abh\u00e4ngigkeiten erfordern regelm\u00e4\u00dfige Wartung<\/h3>\n<p>Dennoch ist es notwendig, eben so wie externe Abh\u00e4ngigkeiten kontinuierlich gepflegt werden m\u00fcssen. <a href=\"https:\/\/u-labs.de\/portal\/massenhafte-sicherheitsluecken-in-atlassian-software-wie-unsicher-sind-jira-confluence-bitbucket-bamboo-co\/\">Ansonsten vergammelt eure Codebasis wie bei Atlassian<\/a>: Dort hat man eine externe Bibliothek eingebaut, die 2018 ein Sicherheitsupdate ver\u00f6ffentlichte. Da offensichtlich niemand Updates einspielte, korrigierte Atlassian sie erst 2022. S\u00e4mtliche Kunden waren mindestens 4 Jahre lang f\u00fcr Remote Code Execution verwundbar &#8211; absolut vermeidbar. <\/p>\n<p>Das Unternehmen hat seine Nutzer ins Messer laufen lassen, weil es grundlegende Hausaufgaben nicht machte. Es ist daher nicht verwunderlich, dass auch hier Atlassian wieder ganz vorne mit dabei ist: Sie setzen unter atlassian.com ebenfalls auf das verwundbare CDN.<sup data-fn=\"54606b89-b27e-46d7-85f8-5682b8355c6c\" class=\"fn\"><a href=\"#54606b89-b27e-46d7-85f8-5682b8355c6c\" id=\"54606b89-b27e-46d7-85f8-5682b8355c6c-link\">31<\/a><\/sup><sup data-fn=\"5e396a91-07a3-4c22-a869-e8821f875c24\" class=\"fn\"><a href=\"#5e396a91-07a3-4c22-a869-e8821f875c24\" id=\"5e396a91-07a3-4c22-a869-e8821f875c24-link\">32<\/a><\/sup><\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-4.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"184\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-4-1024x184.png\" alt=\"\" class=\"wp-image-13494\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-4-1024x184.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-4-300x54.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-4-768x138.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-4-640x115.png 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-4-944x170.png 944w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/07\/grafik-4.png 1188w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<p>Seitenbetreiber haben an dieser Stelle eine Verantwortung f\u00fcr ihre Nutzer. Eben so wie jedes Ladengesch\u00e4ft sich um die Sicherheit seiner Kunden k\u00fcmmern muss.<\/p>\n<h3 class=\"wp-block-heading\">CDNs: Uneingeschr\u00e4nktes Laden fremden Codes auf Webseiten ist das n\u00e4chste Sicherheitsrisiko<\/h3>\n<p>Sollte man sich nun f\u00fcr eine zwingend n\u00f6tige Bibliothek entscheiden, bindet man diese nicht \u00fcber Server des Entwicklers, oder gar andere Quellen wie CDNs ein. Damit kann dieser in vielen F\u00e4llen uneingeschr\u00e4nkt in Echtzeit Code im Browser jedes Besuchers ausf\u00fchren. Im schlimmsten Falle m\u00fcsst ihr nun weiteren Parteien vertrauen: Dem CDN-Anbieter, seinen Hostern usw. Dar\u00fcber hinaus k\u00f6nnen CDN-Anbieter eure Besucher dadurch verfolgen. Sie sehen jede Anfrage und k\u00f6nnen mindestens sein Verhalten bei euch analysieren. Gr\u00f6\u00dfere sogar \u00fcber verschiedene Domains hinweg.<\/p>\n<p>Und nein, auch ein bekannter Anbieter ist nicht automatisch sicher. 2021 wurde beispielsweise ein erfolgreicher Hack von cdnjs demonstriert.<sup data-fn=\"39ad27b3-3a6b-4317-b5df-c4c787ab7bbb\" class=\"fn\"><a href=\"#39ad27b3-3a6b-4317-b5df-c4c787ab7bbb\" id=\"39ad27b3-3a6b-4317-b5df-c4c787ab7bbb-link\">33<\/a><\/sup> Das ist nicht irgendein Anbieter, sondern hat rund 47% Marktanteil. 12,6% aller Webseiten weltweit (!) laden mindestens ein Skript von dort,<sup data-fn=\"be8885dc-4e31-44ee-8898-845d7a8dcf31\" class=\"fn\"><a href=\"#be8885dc-4e31-44ee-8898-845d7a8dcf31\" id=\"be8885dc-4e31-44ee-8898-845d7a8dcf31-link\">34<\/a><\/sup> d.H. man konnte dort beliebig Code ausf\u00fchren. Ironischerweise werben genau die damit, Lieferkettenangriffe zu Reduzieren, in dem man lieber ihre Kopie auf cdnjs einbindet.<sup data-fn=\"1992dc9f-b603-4c8a-bbde-d0d6a6cbe530\" class=\"fn\"><a href=\"#1992dc9f-b603-4c8a-bbde-d0d6a6cbe530\" id=\"1992dc9f-b603-4c8a-bbde-d0d6a6cbe530-link\">35<\/a><\/sup> Wer meinen Punkt nur ansatzweise verstanden hat, erkennt die offensichtliche Nebelkerze. Als w\u00fcrde Burger King damit werben, man solle sich seinen BigMac doch lieber der Gesundheit zuliebe bei ihnen holen!<\/p>\n<p>Vergesst allgemein den Gedanke, bei einem gro\u00dfen Unternehmen sei alles viel besser oder gar sicherer. Microsoft ist Marktf\u00fchrer und l\u00e4sst sich andauernd hacken. Nur weil man theoretisch die Ressourcen f\u00fcr maximal m\u00f6gliche Sicherheit h\u00e4tte, muss man sie nicht zwingend daf\u00fcr einsetzen. Das sind Wirtschaftsunternehmen, deren Ziel ist Geld verdienen. Also liefern sie nicht das beste Produkt, sondern nur eines was gerade gut genug ist, um maximale Profite zu erwirtschaften.<\/p>\n<p>Dazu kommt, dass CDNs f\u00fcr die meisten Seiten ebenfalls unn\u00f6tig sind. Ein CDN ist \u00fcberhaupt erst eine Erw\u00e4gung wert, wenn gro\u00dfe Dateien weltweit schnell verf\u00fcgbar gemacht werden sollen. Bei zu gro\u00dfen Dateien habt ihr wahrscheinlich schon den vorherigen Fehler gemacht und euer Projekt mit Abh\u00e4ngigkeiten vollgestopft. Weltweit trifft das f\u00fcr eine Hand voll Projekte zu, nicht das gesamte Internet. Meine lokale Zeitung beispielsweise hat keinen technisch ansatzweise rechtfertigbaren Grund, um jQuery von deren CDN zu laden, Angular von Cloudflare und diversen weiteren Fremddomains. Fehlt nur noch, dass irgendwo steht &#8222;Ihre Sicherheit ist uns wichtig&#8220;. Wenn sie das wirklich w\u00e4re, w\u00fcrde man wirklich ben\u00f6tigtes externes CSS, JS &amp; co. auf die eigenen Server legen. Kontrolliert Versioniert. Im besten Falle gepr\u00fcft vor Aktualisierungen &#8211; es ist ja immer noch fremder Code.<\/p>\n<h3 class=\"wp-block-heading\">M\u00fcssen es externe CDNs sein, nutzt wenigstens den Integrit\u00e4ts-Hash<\/h3>\n<p>F\u00fcr die Minderheit, bei denen ein CDN aus o.g. Gr\u00fcnden tats\u00e4chlich sinnvoll sein sollte, gibt es noch eine weitere, recht unbekannte Ma\u00dfnahme: Das <code class=\"\" data-line=\"\">integrity<\/code> Attribut.<sup data-fn=\"3f33dee3-d734-4a21-a70a-3c4118abe207\" class=\"fn\"><a href=\"#3f33dee3-d734-4a21-a70a-3c4118abe207\" id=\"3f33dee3-d734-4a21-a70a-3c4118abe207-link\">36<\/a><\/sup> Es kann f\u00fcr CSS &amp; JS Elemente eingesetzt werden und enth\u00e4lt eine Pr\u00fcfsumme (Hash) der Zieldatei. Bootstrap baut das l\u00f6blicherweise inzwischen in ihren CDN Beispielcode zum Kopieren ein:<\/p>\n<pre class=\"wp-block-code\"><code class=\"\" data-line=\"\">&lt;link href=&quot;https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.3\/dist\/css\/bootstrap.min.css&quot; rel=&quot;stylesheet&quot; integrity=&quot;sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH&quot; crossorigin=&quot;anonymous&quot;&gt;\n&lt;script src=&quot;https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.3\/dist\/js\/bootstrap.bundle.min.js&quot; integrity=&quot;sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz&quot; crossorigin=&quot;anonymous&quot;&gt;&lt;\/script&gt;<\/code><\/pre>\n<p>Das sch\u00fctzt euch <strong>nicht<\/strong> vor allem Gefahren eine CDNs! Beispielsweise, wenn obiges Beispiel bereits Schadcode enthalten ist (der ggf. erst sp\u00e4ter nachgeladen wird). Auch dem Verfolgen durch den Anbieter setzt ihr eure Nutzer weiterhin aus. Allerdings verhindert er wenigstens nachtr\u00e4gliche Manipulation. Angenommen, obiger Code ist gepr\u00fcft und sauber, den bettet ihr ein. Morgen wird jsdelivr.net gehackt und f\u00fcgt dort Schadsoftware ein. Dann \u00e4ndert sich die Pr\u00fcfsumme und alle g\u00e4ngigen Browser laden die Datei nicht mehr in eure Webseite. Zumindest davor w\u00e4ren die Besucher also gesch\u00fctzt. Es reduziert die Angriffsfl\u00e4che also &#8211; dennoch bleibt lokales Einbinden das Mittel der Wahl.<\/p>\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n<p>Wer immer noch unreflektiert Drittanbieter-Dienste in seine Webseite einbindet, sollte sp\u00e4testens nach diesem Vorfall endlich anfangen, sich mit dem Thema Sicherheit zu besch\u00e4ftigen. Und zwar ernsthaft. Drittanbieter-Abh\u00e4ngigkeiten bergen viele Risiken, die den meisten scheinbar bis heute kaum oder gar nicht bewusst zu sein scheinen. Sie werden daher weiterhin sorglos eingesetzt &#8211; mit entsprechenden Folgen. <\/p>\n<p>Es ist nicht der erste erfolgreiche Angriff, noch wird es der letzte sein. Wer lediglich von Anbieter A zu B umzieht, ohne die o.g. Punkte kritisch zu hinterfragen, hat das Kernproblem nicht verstanden &#8211; und setzt sich bzw. seinen Besuchern damit einem hohen, oft vermeidbaren Risiko aus. Die gern eingesetzte Floskel &#8222;Ihre Sicherheit ist uns sehr wichtig&#8220; oder auch &#8222;Der Schutz Ihrer Daten hat f\u00fcr uns h\u00f6chste Priorit\u00e4t&#8220; hilft dabei keinem. Sicherheit muss gelebt und nicht blo\u00df in PR-Erkl\u00e4rungen sch\u00f6n klingend behauptet werden.<\/p>\n<h2 class=\"wp-block-heading\">Quellen<\/h2>\n<ol class=\"wp-block-footnotes\">\n<li id=\"3b47d12a-3702-4ba1-b30a-3f0d2cc51c69\">https:\/\/www.php.net\/manual\/en\/function.str-starts-with.php <a href=\"#3b47d12a-3702-4ba1-b30a-3f0d2cc51c69-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 1 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"f55d3f08-6167-4fe5-887e-555ce9183a72\">https:\/\/gist.github.com\/juliyvchirkov\/8f325f9ac534fe736b504b93a1a8b2ce <a href=\"#f55d3f08-6167-4fe5-887e-555ce9183a72-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 2 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"186bb90e-9669-4a76-937f-c55113392afd\">https:\/\/developer.mozilla.org\/en-US\/docs\/Glossary\/Polyfill <a href=\"#186bb90e-9669-4a76-937f-c55113392afd-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 3 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"b0dceb3d-0ee7-4b6a-8890-f0c76449b9ab\">https:\/\/www.lambdatest.com\/web-technologies\/es6-ie <a href=\"#b0dceb3d-0ee7-4b6a-8890-f0c76449b9ab-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 4 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"b9baad82-7e3d-4aa9-a16e-90f2b597a76d\">https:\/\/www.theverge.com\/2014\/4\/8\/5593584\/the-most-hated-browser-in-the-world-is-finally-dead <a href=\"#b9baad82-7e3d-4aa9-a16e-90f2b597a76d-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 5 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"f539ff65-40dc-4da3-9ec6-b73c12eae853\">https:\/\/www.techradar.com\/news\/internet-explorer-voted-the-worst-thing-about-using-the-web <a href=\"#f539ff65-40dc-4da3-9ec6-b73c12eae853-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 6 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"2c350d2f-7c65-4f4e-8ff4-062702956a54\">https:\/\/www.zealoussites.com\/blog\/why-do-web-developers-hate-internet-explorer <a href=\"#2c350d2f-7c65-4f4e-8ff4-062702956a54-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 7 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"f0160571-c3b2-476e-89fb-df3eabbb82f6\">https:\/\/learn.microsoft.com\/en-us\/previous-versions\/windows\/internet-explorer\/ie-developer\/compatibility\/ms537512(v=vs.85)?redirectedfrom=MSDN <a href=\"#f0160571-c3b2-476e-89fb-df3eabbb82f6-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 8 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"4f25a6dc-fb96-490a-a36c-044852a516b6\">https:\/\/caniuse.com\/?compare=ie+6,ie+7,ie+8,ie+9,ie+10,ie+11&amp;compareCats=CSS,HTML5,JS,JS%20API,Other,Security,SVG <a href=\"#4f25a6dc-fb96-490a-a36c-044852a516b6-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 9 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"648d4c91-fb91-45be-a607-e558c71c5878\">https:\/\/caniuse.com\/?compare=ie+6,ie+7,ie+8,ie+9,ie+10,ie+11&amp;compareCats=JS <a href=\"#648d4c91-fb91-45be-a607-e558c71c5878-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 10 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"a4392d48-d22d-4e3f-849e-de1b638e5231\">https:\/\/www.infoworld.com\/article\/2685998\/five-things-ie-still-doesnt-have-and-six-things-it-might-someday.html <a href=\"#a4392d48-d22d-4e3f-849e-de1b638e5231-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 11 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"fc754830-29ef-42cb-82a2-c4c2b3368c52\">https:\/\/blog.jquery.com\/2006\/08\/26\/jquery-10\/ <a href=\"#fc754830-29ef-42cb-82a2-c4c2b3368c52-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 12 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"be759a5f-91e5-402e-a4d8-1729da34987e\">https:\/\/github.com\/polyfillpolyfill\/polyfill-service\/commit\/0db3060d8d99112a41d9600ae15832af01fffef6 <a href=\"#be759a5f-91e5-402e-a4d8-1729da34987e-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 13 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"9b35eda0-c824-4d53-916c-6c0d0808b8d1\">https:\/\/github.com\/polyfillpolyfill\/polyfill-service <a href=\"#9b35eda0-c824-4d53-916c-6c0d0808b8d1-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 14 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"17255d32-e8d5-4cfc-bed2-13e4d625c11f\">https:\/\/x.com\/triblondon\/status\/1761852117579427975 <a href=\"#17255d32-e8d5-4cfc-bed2-13e4d625c11f-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 15 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"7ce8fe8c-1e41-436f-82f4-1bfe86676ef9\">https:\/\/github.com\/polyfillpolyfill\/polyfill-service\/commits\/main\/?since=2014-07-01&amp;until=2014-07-31&amp;after=41a4cfc259d371ce8055d3e0702f230019bc7731+104 <a href=\"#7ce8fe8c-1e41-436f-82f4-1bfe86676ef9-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 16 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"dbef39ee-7569-4f1f-823d-ac41473ff03a\">https:\/\/github.com\/polyfillpolyfill\/polyfill-service\/commit\/09b75df8387a750d79e643c1ccde73774129c2ae <a href=\"#dbef39ee-7569-4f1f-823d-ac41473ff03a-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 17 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"4b8d6b23-0d48-4c71-8032-222efbdf2d4e\">https:\/\/web.archive.org\/web\/20240318120623\/https:\/\/github.com\/polyfillpolyfill\/polyfill-service\/issues\/2834 <a href=\"#4b8d6b23-0d48-4c71-8032-222efbdf2d4e-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 18 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"bbf6d698-e582-486f-9749-22bf3f3e6360\">https:\/\/cside.dev\/blog\/the-polyfill-attack-explained <a href=\"#bbf6d698-e582-486f-9749-22bf3f3e6360-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 19 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"03fdfc29-df98-456f-ac61-648560932ceb\">https:\/\/github.com\/polyfillpolyfill\/polyfill-service\/issues\/2873#issuecomment-2182491302 <a href=\"#03fdfc29-df98-456f-ac61-648560932ceb-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 20 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"cd24f946-b770-4d45-9295-17414507beab\">https:\/\/publicwww.com\/websites\/%22polyfill.io%22\/ <a href=\"#cd24f946-b770-4d45-9295-17414507beab-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 21 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"672969ac-d59c-42a0-a346-a9485bbcf027\">https:\/\/github.com\/search?q=https%3A%2F%2Fpolyfill.io%2Fv&amp;type=code <a href=\"#672969ac-d59c-42a0-a346-a9485bbcf027-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 22 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"eac4ee8a-8dd7-4e1d-b356-94148d710dfc\">https:\/\/publicwww.com\/websites\/%22polyfill.io%22+site%3Ade\/5 <a href=\"#eac4ee8a-8dd7-4e1d-b356-94148d710dfc-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 23 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"2a3216d6-7596-418b-b70f-ddba5286e803\">https:\/\/www.golem.de\/news\/angriff-via-polyfill-io-ueber-100-000-webseiten-verbreiten-ploetzlich-malware-2406-186452.html <a href=\"#2a3216d6-7596-418b-b70f-ddba5286e803-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 24 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"cb2c7ffc-b39a-4445-8334-658980b183a6\">https:\/\/www.golem.de\/news\/grossteil-aus-deutschland-fast-400-000-webhosts-verbreiten-malware-via-polyfill-io-2407-186716.html <a href=\"#cb2c7ffc-b39a-4445-8334-658980b183a6-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 25 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"7027822b-d4fc-4dad-b822-d6eeee80495c\">https:\/\/github.com\/uBlockOrigin\/uAssets\/pull\/24255 <a href=\"#7027822b-d4fc-4dad-b822-d6eeee80495c-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 26 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"0f2c3f88-70e4-4f34-8b70-3c0b65175d82\">https:\/\/www.securityweek.com\/over-380k-hosts-still-referencing-malicious-polyfill-domain-censys\/ <a href=\"#0f2c3f88-70e4-4f34-8b70-3c0b65175d82-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 27 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"661b7233-6293-4a91-a642-d65c4ffb4e94\">https:\/\/www.npmjs.com\/package\/is-even <a href=\"#661b7233-6293-4a91-a642-d65c4ffb4e94-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 28 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"92393cc8-21ae-43b2-92eb-4a4c90aa96f0\">https:\/\/futurezone.at\/digital-life\/grabstein-grab-internet-explorer-suedkorea-meme-viral-tot-microsoft\/402045145 <a href=\"#92393cc8-21ae-43b2-92eb-4a4c90aa96f0-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 29 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"3ed51a0c-4269-4c2c-950e-3070ffc0cbc9\">https:\/\/caniuse.com\/?search=web%20bluetooth <a href=\"#3ed51a0c-4269-4c2c-950e-3070ffc0cbc9-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 30 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"54606b89-b27e-46d7-85f8-5682b8355c6c\">https:\/\/trends.builtwith.com\/websitelist\/Polyfill-IO <a href=\"#54606b89-b27e-46d7-85f8-5682b8355c6c-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 31 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"5e396a91-07a3-4c22-a869-e8821f875c24\">https:\/\/www.wappalyzer.com\/technologies\/javascript-libraries\/polyfill\/ <a href=\"#5e396a91-07a3-4c22-a869-e8821f875c24-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 32 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"39ad27b3-3a6b-4317-b5df-c4c787ab7bbb\">https:\/\/cside.dev\/blog\/the-2021-cdnjs-vulnerability <a href=\"#39ad27b3-3a6b-4317-b5df-c4c787ab7bbb-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 33 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"be8885dc-4e31-44ee-8898-845d7a8dcf31\">https:\/\/w3techs.com\/technologies\/overview\/content_delivery <a href=\"#be8885dc-4e31-44ee-8898-845d7a8dcf31-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 34 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"1992dc9f-b603-4c8a-bbde-d0d6a6cbe530\">https:\/\/blog.cloudflare.com\/polyfill-io-now-available-on-cdnjs-reduce-your-supply-chain-risk <a href=\"#1992dc9f-b603-4c8a-bbde-d0d6a6cbe530-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 35 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"3f33dee3-d734-4a21-a70a-3c4118abe207\">https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/Security\/Subresource_Integrity <a href=\"#3f33dee3-d734-4a21-a70a-3c4118abe207-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 36 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Dieser Lieferkettenangriff er\u00f6ffnet f\u00fcr das Web eine neue Dimension: Rund 385.000 Hosts verbreiten Schadsoftware von Polyfill[.]io. Und das, obwohl Polyfills in den meisten F\u00e4llen gar nicht mehr gebraucht wird. Dieser Fall zeigt aber ein weiteres Grundsatzproblem von vielen Webentwicklern &#8211; der sorglose Umgang mit externem Code sowie externen Abh\u00e4ngigkeiten. Im Detail zeigt dir das dieser &#8230;<\/p>\n","protected":false},"author":5,"featured_media":13497,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"[{\"content\":\"https:\/\/www.php.net\/manual\/en\/function.str-starts-with.php\",\"id\":\"3b47d12a-3702-4ba1-b30a-3f0d2cc51c69\"},{\"content\":\"https:\/\/gist.github.com\/juliyvchirkov\/8f325f9ac534fe736b504b93a1a8b2ce\",\"id\":\"f55d3f08-6167-4fe5-887e-555ce9183a72\"},{\"content\":\"https:\/\/developer.mozilla.org\/en-US\/docs\/Glossary\/Polyfill\",\"id\":\"186bb90e-9669-4a76-937f-c55113392afd\"},{\"content\":\"https:\/\/www.lambdatest.com\/web-technologies\/es6-ie\",\"id\":\"b0dceb3d-0ee7-4b6a-8890-f0c76449b9ab\"},{\"content\":\"https:\/\/www.theverge.com\/2014\/4\/8\/5593584\/the-most-hated-browser-in-the-world-is-finally-dead\",\"id\":\"b9baad82-7e3d-4aa9-a16e-90f2b597a76d\"},{\"content\":\"https:\/\/www.techradar.com\/news\/internet-explorer-voted-the-worst-thing-about-using-the-web\",\"id\":\"f539ff65-40dc-4da3-9ec6-b73c12eae853\"},{\"content\":\"https:\/\/www.zealoussites.com\/blog\/why-do-web-developers-hate-internet-explorer\",\"id\":\"2c350d2f-7c65-4f4e-8ff4-062702956a54\"},{\"content\":\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/windows\/internet-explorer\/ie-developer\/compatibility\/ms537512(v=vs.85)?redirectedfrom=MSDN\",\"id\":\"f0160571-c3b2-476e-89fb-df3eabbb82f6\"},{\"content\":\"https:\/\/caniuse.com\/?compare=ie+6,ie+7,ie+8,ie+9,ie+10,ie+11&amp;compareCats=CSS,HTML5,JS,JS%20API,Other,Security,SVG\",\"id\":\"4f25a6dc-fb96-490a-a36c-044852a516b6\"},{\"content\":\"https:\/\/caniuse.com\/?compare=ie+6,ie+7,ie+8,ie+9,ie+10,ie+11&amp;compareCats=JS\",\"id\":\"648d4c91-fb91-45be-a607-e558c71c5878\"},{\"content\":\"https:\/\/www.infoworld.com\/article\/2685998\/five-things-ie-still-doesnt-have-and-six-things-it-might-someday.html\",\"id\":\"a4392d48-d22d-4e3f-849e-de1b638e5231\"},{\"content\":\"https:\/\/blog.jquery.com\/2006\/08\/26\/jquery-10\/\",\"id\":\"fc754830-29ef-42cb-82a2-c4c2b3368c52\"},{\"content\":\"https:\/\/github.com\/polyfillpolyfill\/polyfill-service\/commit\/0db3060d8d99112a41d9600ae15832af01fffef6\",\"id\":\"be759a5f-91e5-402e-a4d8-1729da34987e\"},{\"content\":\"https:\/\/github.com\/polyfillpolyfill\/polyfill-service\",\"id\":\"9b35eda0-c824-4d53-916c-6c0d0808b8d1\"},{\"content\":\"https:\/\/x.com\/triblondon\/status\/1761852117579427975\",\"id\":\"17255d32-e8d5-4cfc-bed2-13e4d625c11f\"},{\"content\":\"https:\/\/github.com\/polyfillpolyfill\/polyfill-service\/commits\/main\/?since=2014-07-01&amp;until=2014-07-31&amp;after=41a4cfc259d371ce8055d3e0702f230019bc7731+104\",\"id\":\"7ce8fe8c-1e41-436f-82f4-1bfe86676ef9\"},{\"content\":\"https:\/\/github.com\/polyfillpolyfill\/polyfill-service\/commit\/09b75df8387a750d79e643c1ccde73774129c2ae\",\"id\":\"dbef39ee-7569-4f1f-823d-ac41473ff03a\"},{\"content\":\"https:\/\/web.archive.org\/web\/20240318120623\/https:\/\/github.com\/polyfillpolyfill\/polyfill-service\/issues\/2834\",\"id\":\"4b8d6b23-0d48-4c71-8032-222efbdf2d4e\"},{\"content\":\"https:\/\/cside.dev\/blog\/the-polyfill-attack-explained\",\"id\":\"bbf6d698-e582-486f-9749-22bf3f3e6360\"},{\"content\":\"https:\/\/github.com\/polyfillpolyfill\/polyfill-service\/issues\/2873#issuecomment-2182491302\",\"id\":\"03fdfc29-df98-456f-ac61-648560932ceb\"},{\"content\":\"https:\/\/publicwww.com\/websites\/%22polyfill.io%22\/\",\"id\":\"cd24f946-b770-4d45-9295-17414507beab\"},{\"content\":\"https:\/\/github.com\/search?q=https%3A%2F%2Fpolyfill.io%2Fv&amp;type=code\",\"id\":\"672969ac-d59c-42a0-a346-a9485bbcf027\"},{\"content\":\"https:\/\/publicwww.com\/websites\/%22polyfill.io%22+site%3Ade\/5\",\"id\":\"eac4ee8a-8dd7-4e1d-b356-94148d710dfc\"},{\"content\":\"https:\/\/www.golem.de\/news\/angriff-via-polyfill-io-ueber-100-000-webseiten-verbreiten-ploetzlich-malware-2406-186452.html\",\"id\":\"2a3216d6-7596-418b-b70f-ddba5286e803\"},{\"content\":\"https:\/\/www.golem.de\/news\/grossteil-aus-deutschland-fast-400-000-webhosts-verbreiten-malware-via-polyfill-io-2407-186716.html\",\"id\":\"cb2c7ffc-b39a-4445-8334-658980b183a6\"},{\"content\":\"https:\/\/github.com\/uBlockOrigin\/uAssets\/pull\/24255\",\"id\":\"7027822b-d4fc-4dad-b822-d6eeee80495c\"},{\"content\":\"https:\/\/www.securityweek.com\/over-380k-hosts-still-referencing-malicious-polyfill-domain-censys\/\",\"id\":\"0f2c3f88-70e4-4f34-8b70-3c0b65175d82\"},{\"content\":\"https:\/\/www.npmjs.com\/package\/is-even\",\"id\":\"661b7233-6293-4a91-a642-d65c4ffb4e94\"},{\"content\":\"https:\/\/futurezone.at\/digital-life\/grabstein-grab-internet-explorer-suedkorea-meme-viral-tot-microsoft\/402045145\",\"id\":\"92393cc8-21ae-43b2-92eb-4a4c90aa96f0\"},{\"content\":\"https:\/\/caniuse.com\/?search=web%20bluetooth\",\"id\":\"3ed51a0c-4269-4c2c-950e-3070ffc0cbc9\"},{\"content\":\"https:\/\/trends.builtwith.com\/websitelist\/Polyfill-IO\",\"id\":\"54606b89-b27e-46d7-85f8-5682b8355c6c\"},{\"content\":\"https:\/\/www.wappalyzer.com\/technologies\/javascript-libraries\/polyfill\/\",\"id\":\"5e396a91-07a3-4c22-a869-e8821f875c24\"},{\"content\":\"https:\/\/cside.dev\/blog\/the-2021-cdnjs-vulnerability\",\"id\":\"39ad27b3-3a6b-4317-b5df-c4c787ab7bbb\"},{\"content\":\"https:\/\/w3techs.com\/technologies\/overview\/content_delivery\",\"id\":\"be8885dc-4e31-44ee-8898-845d7a8dcf31\"},{\"content\":\"https:\/\/blog.cloudflare.com\/polyfill-io-now-available-on-cdnjs-reduce-your-supply-chain-risk\",\"id\":\"1992dc9f-b603-4c8a-bbde-d0d6a6cbe530\"},{\"content\":\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/Security\/Subresource_Integrity\",\"id\":\"3f33dee3-d734-4a21-a70a-3c4118abe207\"}]"},"categories":[85],"tags":[],"class_list":["post-13484","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sicherheit"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/13484","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=13484"}],"version-history":[{"count":7,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/13484\/revisions"}],"predecessor-version":[{"id":13498,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/13484\/revisions\/13498"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/13497"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=13484"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=13484"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=13484"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}