Zusammenfassung
- Eine Website, die
cdn.polyfill.iogeladen hat, hat mehr getan, als nur ein Open-Source-Projekt zu zitieren. Sie hat einem live-Remote-Dienst erlaubt, JavaScript auszuwählen und zur Ausführung im Browser-Kontext der Site zurückzugeben. Das Vertrauensobjekt umfasste daher die Domain, den Betreiber, den Routing- und Antwortpfad, nicht nur Quellcode, der an anderer Stelle eingesehen werden konnte. [15][16][17] - Die Kontrolle über die Polyfill.io-Domain und die damit verbundene Projektpräsenz änderte sich im Februar 2024. Fastly, Cloudflare und ein FormatJS-Projektproblem reagierten damals und zeigten, dass eine Neubewertung durch nachgelagerte Stellen möglich war, bevor im Juni bösartige Lieferungen öffentlich gemeldet wurden. Die Übertragung selbst sollte nicht als Beweis für böswillige Absicht beschrieben werden. [2][3][4]
- Sansec berichtete am 25. Juni, dass der Dienst selektiv modifiziertes JavaScript zurückgab, das berechtigte Besucher umleitete. Cloudflare sagte, Page-Shield-Indikatoren hätten Übereinstimmungen ab dem 8. Juni gezeigt, während Akamai eine serverseitige Stichprobe gefolgt von clientseitigen Prüfungen beschrieb. Diese Beobachtungen belegen eine Weiterleitungskampagne, nicht jede Aktion, die ein Remote-JavaScript theoretisch ausführen könnte. [1][5][9]
- Sansecs Schätzung von mehr als 100.000 Websites bezog sich auf Websites, die den Dienst einbetteten oder nutzten. Cloudflare führte eine Nutzungsschätzung von fast vier Prozent aller Websites an. Keine der Zahlen ist eine bestätigte Anzahl von Websites, die den bösartigen Zweig ausgeliefert, Besucher umgeleitet oder Verluste erlitten haben. [1][5]
- Cloudflares automatisches Umschreiben und Namecheaps Sperre der Domain schränkten den Lieferpfad ein. Sie entfernten keine veralteten Verweise aus nachgelagertem Code, stellten nicht fest, was jeder frühere Besucher erhalten hatte, oder schlossen die Untersuchung jedes Website-Betreibers ab. [5][6][10]
- Fides, Jellyfish und Wordfence veranschaulichen drei verschiedene Evidenzaufgaben: Feststellen, ob ein bedingter Pfad erreichbar war, einen transitiven Anbieter zurückverfolgen, die Entfernung überprüfen und vermeiden, einen Verweis auf den Endpunkt als Beweis für die Ausnutzung zu behandeln. [11][12][13][14][22]
- Verantwortlichkeit ist hier keine rechtliche Schlussfolgerung oder Behauptung gleicher Schuld. Es bedeutet, dass jede Partei für die Kontrollen rechenschaftspflichtig sein sollte, die sie tatsächlich ausüben konnte. Website-Betreiber behielten die Kontrolle über Notwendigkeit, Bestandsaufnahme, Anbieterwahl, Self-Hosting, Eigentumsüberwachung, browser-seitige Beobachtung, Untersuchung, Reparatur und Kommunikation.
Ein Script-Tag delegierte Autorität, nicht nur Bequemlichkeit
Die zentrale technische Entscheidung sah gewöhnlich aus. Eine Website platzierte einscript-Element in einer Seite und zeigte es aufcdn.polyfill.io. Wenn ein Besucher diese Seite lud, forderte der Browser JavaScript vom Remote-Dienst an. Der Dienst konnte die Eigenschaften der Anfrage inspizieren und passende Polyfills für den Browser bereitstellen, sodass ältere Browser Web-Funktionen nutzen konnten, die sie nativ nicht implementierten.
Diese Anordnung löste ein praktisches Kompatibilitätsproblem. Anstatt jede Kompatibilitätsfunktion an jeden Besucher auszuliefern, konnte eine Site einen spezialisierten Dienst bitten, das zurückzugeben, was ein bestimmter Browser zu benötigen schien. Das Ergebnis konnte kleiner und einfacher zu warten sein als ein universelles lokales Bündel. Aber die Effizienz kam von der Dynamik der Antwort. Die Website lud nicht einfach ein festes Paket während der Entwicklung herunter und setzte geprüfte Bytes aus eigener Infrastruktur ein. Sie lud einen anderen Betreiber ein, zur Seitenladezeit zu entscheiden, welche Bytes ein Besucher ausführen würde.
Die Unterscheidung bestimmt den Verantwortlichkeitsrahmen. Ein Open-Source-Repository ist überprüfbarer Code und Verlauf. Ein gehosteter Dienst ist eine Betriebsbeziehung. Der Live-Dienst hängt von einer Domain, DNS, Routing, Hosting, Zertifikaten, Bereitstellungszugriff und den Personen oder Organisationen ab, die die Antwort ändern können. Eine Website kann dem öffentlichen Code vertrauen, ohne zu prüfen, ob der Endpunkt, der ihre Besucher bedient, noch unter derselben Kontrolle steht, demselben Prozess folgt oder dieselbe Klasse von Ausgaben zurückgibt.
HTTPS kollabiert diese Fragen nicht. Es kann einem Browser helfen, zu authentifizieren, dass er den Inhaber gültiger Autorität für die angeforderte Domain erreicht hat, und die Antwort während der Übertragung schützen. Es verspricht nicht, dass der Domaininhaber unverändert ist, dass das zurückgegebene Programm wohlwollend ist oder dass der Inhalt über Anfragen hinweg invariant ist. Wenn die Domainkontrolle legitim wechselt, kann HTTPS weiterhin genau wie vorgesehen funktionieren, während es eine neue Betriebsrealität authentifiziert.
Der Browser gibt remote geladenem JavaScript einen umfassenden praktischen Einfluss auf die einbettende Seite. Die genaue Reichweite hängt von der Seite und den Browserkontrollen ab, aber die grundlegende Schwachstelle ist gut bekannt: Drittanbieter-Funktionalität wird im Web-Kontext der ersten Partei ausgeführt. MITREs CWE-830 beschreibt diese Art der Einbindung als Vertrauensübertragung auf Code von einer anderen Domain, und OWASP behandelt Drittanbieter-JavaScript als Governance-Problem, da es Daten und Seitenverhalten beeinflussen kann.
GitHub CodeQLs Leitfaden wendet dieselbe Logik auf Funktionalität an, die von einer nicht vertrauenswürdigen Domain geladen wird. [15][16][17]
Deshalb sollte der Vorfall nicht auf „Open Source wurde unsicher“ reduziert werden. Der ursprüngliche Open-Source-Code, eine geprüfte selbst gehostete Kopie und ein live-domänengesteuerter Dienst waren unterschiedliche Vertrauensobjekte. Eine Website, die eine feste lokale Kopie verwendete, traf nicht dieselbe Laufzeitdelegation wie eine Website, die eine sich ändernde Antwort voncdn.polyfill.ioanforderte. Ein alternativer Host schuf ebenfalls eine andere Betriebsbeziehung, selbst wenn er Code aus demselben Projekt auslieferte.
Die erste Verantwortlichkeitsfrage ist daher nicht, ob Entwickler jeder externen Bibliothek misstrauen sollten. Sondern ob die Website wusste, welche Partei im Moment der Nutzung ausführbare Bytes für ihre Besucher auswählen konnte. Ein nützliches Inventar würde mindestens fünf Fragen beantworten: welche Seiten das Skript anforderten, ob die Einbindung direkt oder transitiv war, welche Benutzer und Browserpfade es erreichen konnten, welche Geschäftsfunktion es erforderte und wer derzeit den Endpunkt kontrollierte.
Diese Fragen gehören dem Website-Betreiber, weil die Website die Einbindung wirksam machte. Ein Besucher verhandelte nicht mit Polyfill.io oder wählte dessen Betreiber. Der Besucher forderte eine Seite von der Website an und erlebte vernünftigerweise die zurückgegebenen Skripte als Teil dieser Seite. Selbst wo ein Theme, Plugin, Tag-Manager oder Anbieter den Verweis einfügte, blieb die nachgelagerte Organisation die Partei, die den kombinierten Erlebnissen ihren Nutzern präsentierte.
Dies macht den Website-Betreiber nicht zum Autor bösartigen Codes oder löscht die Kontrolle des Dienstanbieters aus. Es bedeutet, dass delegierte Macht die Erstparteienverantwortlichkeit nicht beseitigt. Der Dienstanbieter konnte die Antwort wählen. Der Website-Betreiber konnte wählen, ob dieser Anbieter einen Platz in der Seite behielt. Das sind unterschiedliche Kontrollen, und der Vorfall testete beide.
Die Februar-Übertragung war ein Software-Governance-Ereignis
Die öffentliche Chronologie bietet ein ungewöhnlich wichtiges Warnintervall. Im Februar 2024 wechselte die Kontrolle über die Polyfill.io-Domain und die zugehörige GitHub-Präsenz zu Funnull, wie in den zeitgenössischen Quellen beschrieben. Die Quellen belegen einen Wechsel der Kontrolle und Vertrauensbasis. Sie begründen nicht allein dadurch die Motivation des neuen Betreibers, einen kriminellen Plan, einen rechtlichen Verstoß oder die endgültige Identität jeder Person, die später die Lieferung beeinflusste.
Für eine konventionelle informative Website kann eine Domain-Übertragung hauptsächlich die Veröffentlichungsbefugnis ändern. Für eine Domain, die ausführbares JavaScript an andere Websites zurückgibt, ändert die Übertragung, wer die Software auf diesen nachgelagerten Seiten beeinflussen kann. Das macht Eigentumsinformationen zu einem Teil des Abhängigkeitszustands. Ein neuer Eigentümer des Endpunkts ist betrieblich vergleichbar mit einem neuen Betreuer, einer neuen Signaturautorität oder einem neuen Veröffentlichungskanal, selbst wenn das Quellrepository vertraut erscheint.
Fastlys Hinweis vom 28. Februar macht die Governance-Bedeutung sichtbar. Er kündigte Ersatzdomains an und gab Benutzern Optionen, die Migration, Self-Hosting oder Entfernung des Dienstes umfassten. Diese Optionen waren nicht nur Markenalternativen. Jede änderte, wer die an Besucher ausgelieferten Bytes kontrollierte. Migration wählte eine andere Dienstbeziehung. Self-Hosting stellte die Lieferung unter die eigenen Bereitstellungskontrollen der Website. Entfernung beseitigte die Kompatibilitätsabhängigkeit, falls sie nicht mehr benötigt wurde. [3]
Cloudflare folgte am 29. Februar mit einem auf cdnjs gehosteten Alternative. Seine Erklärung verband den Anbieterwechsel mit dem Lieferkettenrisiko: Websites hatten sich auf eine andere Partei verlassen, um einen Dienst zu warten und zu sichern, der Code in ihren Seiten ausführen konnte. Cloudflares Alternative machte Drittanbieter-Hosting nicht risikofrei, zeigte aber, dass Infrastrukturanbieter den Eigentümerwechsel als Grund für eine neue Vertrauensentscheidung verstanden. [2]
Ein FormatJS-Problem, das am 28. Februar eröffnet wurde, liefert eine nachgelagerte Projektaufzeichnung aus demselben Zeitraum. Es äußerte Bedenken hinsichtlich der Eigentums- und CNAME-Beziehung und bat das Projekt, die Empfehlung des Endpunkts einzustellen. Diese Aufzeichnung ist wichtig, weil sie zeigt, dass ein Betreuer auf eine Dokumentationsabhängigkeit reagierte, bevor eine öffentlich gemeldete bösartige Kampagne bekannt wurde. Das Entfernen einer Empfehlung repariert nicht jede Website, die ihr zuvor gefolgt ist, begrenzt aber die zukünftige Verbreitung und schafft einen nachverfolgbaren Warnhinweis. [4]
Zusammen verhindern diese Aufzeichnungen eine allzu bequeme Erzählung, dass nachgelagerte Eigentümer bis zum 25. Juni kein Signal hatten. Nicht jeder Site-Betreiber hätte den Fastly-Hinweis, den Cloudflare-Beitrag oder das FormatJS-Problem gesehen. Die Quellen belegen keine universelle Kenntnisnahme, und es wäre unfair, die öffentliche Verfügbarkeit in einen Beweis umzuwandeln, dass jede Organisation tatsächlich Bescheid wusste. Sie belegen jedoch, dass der Eigentumswechsel beobachtbar war, dass Alternativen verfügbar waren und dass einige verantwortliche Parteien den Endpunkt Monate vor dem Vorfallsbericht neu bewerteten.
Diese Unterscheidung ist wesentlich für die Verantwortlichkeit. Eine Pflicht zur Überwachung bedeutet nicht Allwissenheit. Es bedeutet, einen Prozess zu entwerfen, der relevante Änderungen für Abhängigkeiten mit hoher Autorität empfangen kann. Eine Site kann Paketwarnungen verfolgen, während sie Domain-Eigentum, DNS oder Hosting-Änderungen ignoriert. Für ein versioniertes Paket können Release- und Schwachstellenfeeds die wichtigen Signale sein. Für einen Remote-Skript-Endpunkt gehören auch Registrierung, DNS, Betreiber und Antwortverhalten zum Überwachungsmodell.
Das Februar-Ereignis zeigt auch die Grenzen einer einmaligen Anbieterüberprüfung. Ein Team kann Polyfill.io Jahre zuvor basierend auf dem Betreiber, der Infrastruktur, dem Projektruf und den damaligen Browseranforderungen genehmigt haben. Wenn der Genehmigungsdatensatz nur die Zeichenfolgecdn.polyfill.ioenthielt, könnte das Team die Abhängigkeit fälschlicherweise als unverändert betrachten, solange die URL unverändert blieb. In Wirklichkeit hatte sich die Partei hinter dem stabilen Namen geändert.
Eine verantwortungsvolle Genehmigung sollte die Vertrauensbasis aufzeichnen, nicht nur die Adresse. Diese Basis könnte den Betreiber, den Dienstzweck, die erwarteten Antworteigenschaften, die vertragliche oder gemeinschaftliche Beziehung, verfügbare Prüfungsnachweise, einen Notfallplan und Überprüfungsauslöser umfassen. Ein Eigentümerwechsel würde dann die Genehmigung ungültig machen oder zumindest wieder öffnen. Ohne einen solchen Datensatz kann eine Organisation nicht leicht erklären, warum die fortgesetzte Delegation gerechtfertigt blieb, nachdem die Prämisse geändert wurde.
Die Frage der Notwendigkeit hätte ebenfalls wieder aufgeworfen werden müssen. Polyfills sind an die Browserfähigkeit gebunden. Browser-Populationen entwickeln sich, Produktsupportrichtlinien ändern sich und Kompatibilitätscode, der einst wesentlich war, kann residual werden. Eine Remote-Abhängigkeit mit Seitenebenen-Autorität sollte nicht fortbestehen, nur weil niemand ihre Entfernung betreibt. Die Februar-Hinweise boten einen Moment, um zu fragen, ob die ältere Browserunterstützung den Endpunkt noch erforderte und ob ein kleineres lokales Bündel den verbleibenden Bedarf decken könnte.
Nichts davon beweist, dass jede Site, die den Verweis behielt, fahrlässig handelte, und es macht die Domain-Übertragung selbst nicht zu einem Angriff. Es stellt einen engeren Punkt fest: Die Übertragung veränderte eine materielle Softwarekontrolle, noch bevor schädliche Ausgaben beobachtet wurden. Die Verantwortlichkeit der Website beginnt damit, ob diese materielle Änderung erkennbar und überprüfbar war.
Selektive Auslieferung machte gelegentliche Inspektion unzuverlässig
Am 25. Juni berichtete Sansec, dasscdn.polyfill.iomodifiziertes JavaScript über Websites auslieferte, die es eingebettet hatten. Das beobachtete Verhalten leitete ausgewählte Besucher über Domains, die Google Analytics nachempfunden waren, auf Betrugs- oder Wettseiten um. Sansec beschrieb Bedingungen, die mobiles Targeting, serverseitige und clientseitige Prüfungen, zeitbasiertes Verhalten und die Vermeidung einiger Administrator- oder Analysekontexte umfassten. [1]
Die beobachtete Handlung braucht ein präzises Nomen. Es war eine Weiterleitungskampagne, die durch modifiziertes JavaScript ausgeliefert wurde. Der Datensatz unterstützt nicht, diese Beobachtung auf Diebstahl von Anmeldeinformationen, Diebstahl von Seitendaten, Host-Kompromittierung, Code-Ausführung außerhalb des Browsers oder einen quantifizierten finanziellen Verlust zu erweitern. Ein remote gesteuerter Skript-Endpunkt könnte prinzipiell JavaScript zurückgeben, das ein viel breiteres Spektrum von Browseraktionen ausführen kann.
CNCF TAG Security, CWE-830 und das allgemeine Browser-Ausführungsmodell unterstützen diese Fähigkeitsschlussfolgerung. Fähigkeit ist kein Beweis dafür, dass jede mögliche Aktion aufgetreten ist. [8][16]
Cloudflare sagte, seine Page-Shield-Daten hätten die Indikatoren bestätigt und Übereinstimmungen ab dem 8. Juni enthalten. Dies ist die früheste Übereinstimmung in Cloudflares Datensatz, wie in der Quellenaufzeichnung beschrieben. Es ist kein Beweis dafür, dass alle bösartigen Aktivitäten an diesem Datum begannen, dass derselbe Zweig jede Website kontinuierlich von da an erreichte oder dass keine frühere Auslieferung außerhalb von Cloudflares Sichtbarkeit stattfand. [5]
Akamai beschrieb separat ein zweistufiges Muster, bei dem eine serverseitige Auswahl basierend auf Anfrage-Headern bestimmen konnte, was gesendet wurde, gefolgt von clientseitigen Prüfungen vor der Weiterleitung. Diese Architektur erklärt, warum eine gewöhnliche Inspektion das Problem übersehen konnte. Ein Entwickler, der das Skript von einem Desktop-Browser anforderte, könnte ein erwartetes Polyfill erhalten. Ein mobiler Besucher mit anderen Headern, Standort, Timing oder Seitenstatus könnte einen anderen Zweig erhalten oder aktivieren. [9]
Selektive Auslieferung ändert die Beweislast. Ein einzelner sauberer Download beweist keine historische Sicherheit. Ein Quellcodevergleich von einem Browser zu einem Zeitpunkt kann nur die für diese Anfrage ausgewählte Antwort zeigen. Ein Suchmaschinen-Crawler, Uptime-Monitor oder Sicherheitsscanner kann Merkmale haben, die von der Auslieferungslogik bewusst ausgeschlossen werden. Ein Administrator, der während der Anmeldung testet, kann ein anderes Verhalten sehen als ein Erstbesucher.
Dies bedeutet nicht, dass Erkennung unmöglich war. Es bedeutet, dass die Überwachung der Variabilität der Abhängigkeit entsprechen musste. Nützliche Beobachtung würde Browser, Geräte, Standorte und Anfragebedingungen abtasten; Antwortkörper und Hashes über die Zeit aufbewahren; neue Domains und Weiterleitungsketten erkennen; und das von echten Clients beobachtete Verhalten mit dem angegebenen Zweck des Dienstes vergleichen. Clientseitige Überwachung hatte eine wichtige Rolle, weil das folgenreiche Programm im Browser zusammengestellt und ausgeführt wurde.
Der Vorfall zeigt auch, wie Optimierung zu Tarnung werden kann. Dynamische Browser-Targeting war Teil des legitimen Servicemodells von Polyfill.io: Der Dienst wählte Kompatibilitätscode basierend auf Browserfähigkeiten aus. Ein bösartiger Zweig konnte die Erwartung ausnutzen, dass Antworten natürlich variieren. Variabilität selbst war kein Beweis für Missbrauch. Sie machte es schwieriger, ein einfaches „bekannter Hash gleich sicherer Dienst“-Modell anzuwenden und gab der selektiven Auslieferung Raum, sich innerhalb eines akzeptierten Betriebsmusters zu verstecken.
Verantwortlichkeit hängt daher von der Definition der erwarteten Variabilität ab. Eine Website sollte angeben können, welche Anfrageattribute der Anbieter legitimerweise verwendet, welche Familien von Code zurückgegeben werden können, welche Ziele das Skript kontaktieren kann und welche Seitenaktionen außerhalb des Zwecks liegen. Ohne diese Grundlinie kann die Überwachung Veränderungen beobachten, ohne zu wissen, ob die Veränderung autorisiert ist.
Serverseitige Stichproben erschweren auch die retrospektive Untersuchung. Das statische Repository einer Site kann nur die Skript-URL enthalten, nicht die bösartigen Bytes, die ein Besucher erhalten hat. Die Bytes kamen von einem anderen System zur Anfragezeit und sind möglicherweise nach der Eindämmung nicht mehr verfügbar. Browser-Telemetrie, CDN-Protokolle, gespeicherte Antworten, Content-Security-Berichte und Endpunktaufzeichnungen können die einzigen Beweise für die Rekonstruktion der Reichweite sein.
Wenn diese Aufzeichnungen nie gesammelt oder zu kurz aufbewahrt wurden, kann eine Site möglicherweise nicht beantworten, welche Besucher auf den Zweig gestoßen sind.
Diese Unsicherheit sollte nicht mit einer breiten Behauptung verdeckt werden, dass alle sicher waren oder alle kompromittiert wurden. Eine verantwortungsvolle Vorfallsaussage kann stattdessen definieren, was gefunden wurde: der Endpunkt wurde referenziert; ein bestimmter bedingter Pfad war erreichbar oder nicht erreichbar; Telemetrie deckte bestimmte Daten und Populationen ab; beobachtete Weiterleitungen stimmten mit bekannten Indikatoren überein oder nicht; und es bleiben Lücken für Anfragen außerhalb der aufbewahrten Beweise.
Selektive Auslieferung ist daher zentral für den Verantwortlichkeitstest. Sie erklärt, wie schädliche Ausgaben mit gutartiger Inspektion koexistieren konnten, warum Endpunktverweise keine Opferzahlen sind und warum eine verifizierte Behebung mehr erfordert als das einmalige Laden der Seite, nachdem die Domain gesperrt wurde.
Skalenschätzungen waren keine Opferzahlen
Sansec beschrieb mehr als 100.000 Websites, die den Dienst einbetteten oder nutzten. Cloudflare zitierte Schätzungen, dass Polyfill.io auf fast vier Prozent aller Websites erschien. Diese Zahlen vermitteln die potenzielle Breite eines weit verbreiteten Dienstes. Sie teilen nicht denselben Nenner, und keine etabliert eine vollständige Menge bestätigter Kompromittierungen. [1][5]
Mehrere Populationen müssen getrennt bleiben. Eine ist die Menge der Websites, deren aktueller oder historischer Code einen Polyfill.io-Endpunkt referenzierte. Eine andere ist die Menge, für die der relevante Einbindungspfad in der Produktion erreichbar war. Eine dritte ist die Menge, die eine bösartige Antwort während der Kampagne anforderte. Eine vierte ist die Menge, deren Besucher die serverseitigen und clientseitigen Bedingungen erfüllten. Eine fünfte sind die Besucher, die tatsächlich weitergeleitet wurden. Eine sechste ist eine Population, die später einen messbaren Verlust erlitt.
Der verfügbare öffentliche Datensatz liefert keine bestätigte Anzahl für die meisten dieser Gruppen. Es wäre daher ungenau, jeden Verweis als Opfer, jede einbindende Site als kompromittiert oder jeden Besucher als exponiert zu bezeichnen. Es wäre ebenso ungenau, Verweise als harmlos abzutun, nur weil selektive Auslieferung eine universelle Beobachtung verhinderte. Ein Verweis etabliert einen Vertrauenspfad. Zusätzliche Beweise sind erforderlich, um Erreichbarkeit, Auslieferung und Auswirkung festzustellen.
Dieses Vokabular ist wichtig für nachgelagerte Hinweise. „Unser Code enthielt einen Verweis“ ist anders als „unsere Telemetrie zeigt, dass das Skript angefordert wurde“. Beide unterscheiden sich von „wir haben den bösartigen Zweig beobachtet“ und von „ein Besucher meldete eine Weiterleitung“. Die Kombination kann unnötigen Alarm oder falsche Beruhigung erzeugen. Die Trennung lässt Benutzer verstehen, was die Organisation weiß.
Wordfences Behandlung der betroffenen WordPress-Plugin-Muster verstärkt diese Grenze. Sein Katalog identifizierte Verwendungen von Polyfill.io, warnte aber davor, anzunehmen, dass jede Plugin-Instanz bösartigen Inhalt ausgeliefert hat. Plugins konnten den Endpunkt in viele Sites einführen, was die Inventarisierung dringend machte, während das Vorhandensein des Codes noch nicht den Nachweis einer bösartigen Ausführung in jeder Installation erbrachte. [14]
Amtliche Meldungen wiederholten die ernste Skalenbesorgnis, während sie die Betreiber auf Entfernung und Untersuchung konzentrierten. CERT-AGID beschrieb die Übernahme und die headerabhängige Auslieferung und bezog sich auf die mehr-als-100.000-Zahl. Diese unabhängige Warnung unterstützt breite defensive Aufmerksamkeit, ändert aber nicht den Nenner in bestätigte betroffene Besucher. [21]
Die stärkste Skalenaussage ist daher auch die am stärksten begrenzte: Der Endpunkt hatte einen großen nachgelagerten Fußabdruck, und die beobachtete selektive Kampagne schuf Risiko in diesem Fußabdruck. Die genaue Auswirkung musste Site für Site und Besucherpopulation für Besucherpopulation festgestellt werden.
Eindämmung änderte den Pfad; sie beendete die Behebung nicht
Die Reaktion umfasste Parteien mit unterschiedlichen Arten von Kontrolle. Cloudflare schrieb Polyfill.io-Verweise auf proxied Kundenseiten automatisch in einen Cloudflare-gehosteten Mirror um. Das Unternehmen erklärte, dass das einfache Blockieren der ursprünglichen Domain Sites brechen könnte, die noch auf den Dienst angewiesen waren. Umschreiben versuchte, die erwartete Kompatibilität zu bewahren, während die unmittelbare Abhängigkeit vom geänderten Endpunkt entfernt wurde. [5]
Dieser Eingriff veranschaulicht einen echten betrieblichen Kompromiss. Sicherheitsteams ziehen oft die sofortige Entfernung einer verdächtigen Ressource vor. Produktteams wissen, dass das abrupte Beseitigen einer Kompatibilitätsschicht eine Site für einige Besucher unbrauchbar machen kann. Cloudflares Position in der Lieferkette erlaubte es, eine andere Quelle zu ersetzen, ohne darauf zu warten, dass jeder Website-Betreiber eine Änderung bereitstellt.
Substitution war Eindämmung, nicht Beweis vollständiger Reparatur. Sie änderte den vertrauenswürdigen Betreiber und Antwortpfad für den vom Mechanismus abgedeckten Datenverkehr. Sie etablierte nicht, dass der Ersatz für jeden Browser identisches Verhalten hatte, dass alle Seiten und Lieferpfade abgedeckt waren oder dass nachgelagerte Repositories nicht mehr den alten Verweis enthielten. Sie beantwortete auch nicht, was Besucher vor der Umschreibung erhalten hatten.
Namecheap setzte dann die Polyfill.io-Domain auf Haltezustand, und staatliche Hinweise beschrieben den Endpunkt als am 27. Juni gesperrt. Domaineffektive Maßnahmen entfernten den unmittelbaren Dienstpfad, konnten aber auch Sites brechen, die noch eine Antwort erwarteten. Der Haltestatus war ein wichtiger Eindämmungshebel, der vom Registrar gehalten wurde. Er säuberte nicht nachgelagerte Vorlagen, Plugin-Einstellungen, zwischengespeicherte Seiten, Tag-Manager-Konfigurationen oder Anbieterprodukte. [6][10]
Der Unterschied wird deutlicher, wenn die Domain nicht verfügbar ist. Eine Site mag geschützt erscheinen, weil der Browser das verdächtige Skript nicht mehr abrufen kann. Doch der veraltete Verweis bleibt eine ungelöste Abhängigkeit. Wenn sich der Kontrollstatus erneut ändert, wenn ein alternativer Hostname bestehen bleibt oder wenn eine interne Kopie nicht untersucht wurde, bleibt das zugrundeliegende Governance-Problem bestehen. Selbst ein dauerhaft toter Endpunkt kann Leistungs-, Fehlerbehandlungs- und Kompatibilitätskosten verursachen.
CERT-FR und das Western Australia Cyber Security Unit rieten Betreibern, Verweise zu identifizieren und zu entfernen, auf eine kontrollierte Alternative umzusteigen, wo nötig, und Browserkontrollen wie Subresource Integrity und Content Security Policy in Betracht zu ziehen. Semgrep konzentrierte sich ebenfalls auf repositoryweite Erkennung, anstatt die Domainsperre als ausreichend zu betrachten. [6][7][20]
Diese Sequenz legt vier verschiedene Abschlussbehauptungen nahe. „Eingedämmt“ bedeutet, dass der bekannte schädliche Lieferpfad unterbrochen wurde. „Entfernt“ bedeutet, dass der nachgelagerte Verweis und die transitiven Einfügepfade verschwunden sind. „Untersucht“ bedeutet, dass verfügbare Beweise verwendet wurden, um historische Reichweite und Auswirkung zu bewerten. „Verifiziert“ bedeutet, dass Tests und Überwachung zeigen, dass die aktuelle Site nicht mehr vom alten Pfad abhängt und dass der Ersatz sich innerhalb seines vorgesehenen Umfangs verhält.
Ein Website-Betreiber könnte sich für die erste Behauptung auf einen Infrastrukturanbieter verlassen, während er die anderen drei selbst besitzt. Cloudflare konnte den von ihm gesehenen Datenverkehr umschreiben. Namecheap konnte eine von ihm registrierte Domain sperren. Keiner konnte jede Stelle kennen, an der ein Kunde die URL eingebettet hatte, jeden bedingten Browserpfad innerhalb eines Plugins oder jede Besucherpopulation, die die Website untersuchen musste.
Diese Trennung schützt auch vor einer Überschätzung des Eingriffs Dritter. Eine Registrarsperre ist kein Zuschreibungsbefund. Automatisches Umschreiben belegt nicht, dass jeder geschützte Kunde den bösartigen Zweig ausgeliefert hatte. Ein Indikatorabgleich eines Erkennungsanbieters ist kein vollständiger forensischer Bericht für jede Site. Jede Aktion sollte gemäß der Kontrolle, die sie ausübte, und der Beweise, die sie erzeugte, beschrieben werden.
Operativ sollte die nachgelagerte Behebung mit einer vollständigen Suche beginnen. Der wörtliche Hostname kann in Quelldateien, generierten Bundles, Content-Management-Feldern, Plugin-Code, Tag-Managern, Vorlagen, archivierten Konfigurationen oder Anbieterantworten erscheinen. Suchwerkzeuge können bekannte Zeichenfolgen finden, aber ein Abhängigkeitsinventar muss auch erklären, wer den Verweis eingeführt hat und welcher Build- oder Laufzeitpfad ihn aktiv machte.
Die Entfernung erfordert dann eine funktionale Entscheidung. Wenn das Polyfill nicht mehr notwendig ist, ist die Beseitigung die sauberste Reduzierung der Autorität. Wenn die Legacy-Browser-Unterstützung weiterhin erforderlich ist, kann ein geprüftes lokales Bündel oder ein explizit genehmigter Anbieter angemessen sein. Der Ersatz sollte nicht allein wegen seiner bequemen URL gewählt werden. Sein Betreiber, Aktualisierungsprozess, Antwortvariabilität und Überwachungsmodell werden Teil der neuen Vertrauensbasis.
Schließlich erfordert die historische Bewertung Beweise, die proportional zum Risiko der Site sind. Browser-seitige Beobachtungen, Netzwerkprotokolle, Sicherheitsberichte, Kundenbeschwerden und gespeicherte Skriptantworten können helfen festzustellen, ob bekannte Weiterleitungsindikatoren aufgetreten sind. Fehlende Beweise sollten mit der Abdeckung verknüpft werden. Eine Site ohne aufbewahrte Client-Telemetrie kann sagen, dass sie in den verfügbaren Aufzeichnungen keine Berichte oder Indikatoren gefunden hat; sie kann fehlende Aufzeichnungen nicht in Beweise umwandeln, dass kein Besucher den Zweig erhalten hat.
Fides zeigte, warum ein bedingter Zweig dennoch wichtig ist
CVE-2024-38537 verzeichnet ein nachgelagertes Problem in Fides. Der relevantefides.js-Pfad konnte Polyfill.io für Legacy-Browser laden. Der Datensatz identifiziert betroffene Versionen und sagt, dass Version 2.39.1 die Exposition entfernt hat. Er bewahrt auch eine wichtige Grenze: Es wurde keine Ausnutzung durch Fides identifiziert. [11][12]
Dieser Fall ist nützlich, weil er zwei gegensätzlichen Fehlern widersteht. Der erste würde das Problem abtun, weil nur ein älterer Browserpfad den Endpunkt lud. Bedingte Erreichbarkeit ist dennoch Erreichbarkeit. Wenn eine Produktionsseite Remote-JavaScript für eine unterstützte Besucherpopulation anfordern konnte, gehörte die Abhängigkeit in das Sicherheitsinventar des Produkts, selbst wenn die meisten Entwickler sie nie auslösten.
Der zweite Fehler würde die CVE als Beweis dafür behandeln, dass Fides-Benutzer ausgenutzt wurden. Ein Schwachstellen-Datensatz kann einen unsicheren Einbindungspfad und betroffene Versionen feststellen, ohne zu belegen, dass der bösartige Zweig eine bestimmte Bereitstellung erreicht hat. „Konnte laden“ und „wurde bei der Ausnutzung beobachtet“ beantworten unterschiedliche Fragen. Der Fides-Datensatz hielt diese Unterscheidung explizit aufrecht.
Die Behebung zeigt auch, warum versionierte Reparatur wichtig ist. Das Entfernen der Remote-Abhängigkeit in einer benannten Version gibt nachgelagerten Betreibern eine konkrete Aktion und eine nachverfolgbare Grenze. Sie können bereitgestellte Versionen identifizieren, aktualisieren, nach verbleibenden Verweisen suchen und den Legacy-Pfad testen. Eine allgemeine Warnung, „vorsichtig mit Polyfill.io zu sein“, würde nicht denselben Abschlussnachweis erbringen.
Die Legacy-Bedingung sollte die Verifizierung prägen. Das Testen nur eines modernen Desktop-Browsers könnte den betroffenen Zweig nie ausführen. Die Verifizierung sollte die Bedingung reproduzieren oder inspizieren, die ihn ursprünglich ausgewählt hat. Dies kann das Überprüfen von gebündeltem Code, das Simulieren eines älteren User-Agents, das Überprüfen von Netzwerkanfragen und das Bestätigen umfassen, dass die reparierte Version den Endpunkt nicht mehr konstruiert oder anfordert.
SingCERTs Bulletin diskutierte ebenfalls den nachgelagerten Fides-Fall und behielt die Grenze „keine Ausnutzung beobachtet“ bei. Die Wiederholung durch ein nationales CERT erhöht die Sichtbarkeit des Problems; es verwandelt die Möglichkeit nicht in beobachtete Ausnutzung. [22]
Die Lektion von Fides ist daher nicht, dass jede bedingte Drittanbieter-Anfrage dieselbe Schwere verdient. Sondern dass ein Betreuer die Bedingung, betroffene Versionen, erreichbare Population, Behebungsversion und Beweisgrenze kennen sollte. Verantwortlichkeit ist am stärksten, wenn ein formaler Schwachstellendatensatz sowohl sagt, was passieren konnte, als auch, was nicht beobachtet wurde.
Jellyfish zeigte, wie man eine transitive Abhängigkeit zurückverfolgt
Jellyfishs Advisory dokumentierte einen anderen Pfad. Sein Dienst hing von einem Anbieter ab, der Polyfill.io unter besonderen Bedingungen laden konnte. Jellyfish identifizierte die transitive Beziehung, kontaktierte den Anbieter, verifizierte die Entfernung und grenzte die Browser-Population ein, die den Pfad erreicht haben könnte. [13]
Diese Sequenz ist ein praktisches Modell, weil sie mit der Architektur beginnt, nicht mit der Beschuldigung. Eine kundenorientierte Organisation hat das Script-Tag möglicherweise nicht direkt in ihrem eigenen Repository platziert. Der Verweis kann von einer Analysekomponente, einem Zustimmungstool, einem Plugin, einem Support-Widget oder einem anderen Anbieter-Code stammen. Direktes Eigentum an der Zeile ist nicht dasselbe wie Kontrolle über das Benutzererlebnis.
Transitive Abhängigkeiten schaffen ein Beweisproblem. Eine Software-Stückliste, die auf zur Build-Zeit installierte Pakete ausgerichtet ist, enthält möglicherweise keine Domain, die ein Anbieter dynamisch im Browser anfordert. Vertragsinventare können den Anbieter nennen, aber nicht die eigenen Skriptlieferanten des Anbieters. Netzwerküberwachung kann den Hostnamen sehen, ohne den Geschäftsinhaber zu identifizieren, der ihn eingeführt hat. Alle drei Ansichten sind erforderlich, um eine Anfrage mit einer rechenschaftspflichtigen Beziehung zu verbinden.
Jellyfishs Reaktionssequenz adressiert diese Lücken. Identifizieren Sie zuerst, dass die Abhängigkeit existiert und unter welchen Bedingungen sie aufgerufen werden kann. Zweitens, ordnen Sie sie der Anbieterbeziehung zu. Drittens, bitten Sie die Partei mit Codekontrolle, sie zu entfernen. Viertens, verifizieren Sie die Änderung, anstatt die Zusicherung des Anbieters als Ende der Angelegenheit zu betrachten. Fünftens, grenzen Sie die Population mithilfe der besten verfügbaren Browser- und Produktbeweise ein.
Die Verifizierung ist besonders wichtig, wenn die Bedingung ungewöhnlich ist. Ein Anbieter könnte einen sichtbaren Verweis entfernen, während ein Fallback, ein älteres Bundle oder ein zwischengespeichertes Asset ihn noch enthält. Der Kunde sollte von außen testen und interne Bestätigung akzeptieren. Netzwerkerfassung über relevante Browser, Repository- oder Bundle-Scans und clientseitige Überwachung können zeigen, ob die Anfrage tatsächlich verschwunden ist.
Die eingegrenzte Population sollte ihren Nenner behalten. Wenn nur bestimmte Browserversionen oder Seitenflüsse den Anbieterpfad auslösen konnten, kann die Untersuchung die potenzielle Reichweite eingrenzen. Es sollte nicht implizieren, dass jedes Mitglied dieser Browser-Gruppe bösartigen Inhalt erhalten hat. Umgekehrt entschuldigt die Tatsache, dass ein Pfad selten war, nicht, ihn nicht zu entfernen. Seltene Pfade unterliegen oft weniger routinemäßigen Tests, was sie zu attraktiven Orten für Abhängigkeiten machen kann, die unbemerkt bestehen bleiben.
Jellyfish zeigt auch geteilte, aber nicht fungible Verantwortung. Der Anbieter kontrollierte seinen Code und konnte die Einbindung entfernen. Jellyfish kontrollierte die Eskalation des Anbieters, die kundenorientierte Untersuchung und die Annahme der Reparatur. Infrastruktur- und Sicherheitsanbieter konnten Telemetrie beitragen. Keine dieser Parteien könnte eine andere vollständig ersetzen.
Dieses Modell skaliert über diesen Vorfall hinaus. Eine nachgelagerte Organisation benötigt eine Eskalationsroute für jeden Anbieter, der ausführbaren Code einführen kann. Der Vertrag oder der technische Onboarding-Prozess sollte identifizieren, wer dringende Abhängigkeitsfragen beantworten kann, wie schnell ein Drittanbieter-Skript deaktiviert werden kann, welche Protokolle verfügbar sind und wie der Kunde eine Änderung verifizieren kann.
WordPress-Plugins zeigten, warum Verweise und Ausnutzung getrennt bleiben müssen
Wordfence katalogisierte die Polyfill.io-Nutzung in verschiedenen WordPress-Plugin-Mustern. Diese Art von Inventar ist wertvoll, weil Plugins eine externe Abhängigkeit über viele unabhängig betriebene Websites verteilen können. Eine kleine Entscheidung eines Betreuers kann eine breite nachgelagerte Vertrauensbeziehung werden, ohne dass jeder Site-Betreiber den Endpunkt bewusst hinzufügt. [14]
Der Katalog enthielt auch eine entscheidende Warnung: Die Verwendung des Endpunkts bewies nicht, dass jedes Plugin oder jede Site bösartigen Inhalt ausgeliefert hat. Der Verweis identifizierte einen potenziellen Ausführungspfad. Ob dieser Pfad aktiv war, hing von Plugin-Version, Konfiguration, Seiten-Rendering, Caching, Browser-Bedingungen und der Remote-Antwort zum Zeitpunkt ab.
Für einen WordPress-Site-Betreiber ist die korrekte Antwort nicht zu debattieren, ob der Plugin-Autor oder Dienstanbieter „die eigentliche“ verantwortliche Partei ist. Die unmittelbaren Aufgaben sind lokal: installierte und aktive Versionen identifizieren, feststellen, welche Seiten den Verweis rendern, betroffene Komponenten aktualisieren oder entfernen, generierte Assets gegebenenfalls löschen und das Netzwerkverhalten der öffentlichen Site überprüfen.
Der Plugin-Betreuer hat eine andere Reihe von Aufgaben. Er kann die Abhängigkeit entfernen, eine feste Version veröffentlichen, betroffene Bedingungen erklären, die Dokumentation aktualisieren und Benutzer benachrichtigen. Ein Plugin-Repository oder ein Sicherheitsdienst kann Warnungen verteilen. Der Website-Betreiber muss die Änderung dennoch bereitstellen. Eine feste Version, die nicht installiert ist, ändert den Browserpfad nicht.
Dies ist ein weiterer Grund, warum Skalenzahlen nicht als Zählung geschädigter Organisationen gelesen werden sollten. Ein Plugin kann Tausende von Verweisen erzeugen; eine Site kann mehrere Plugins mit demselben Hostnamen enthalten; ein ruhendes oder deaktiviertes Plugin kann auf der Festplatte verbleiben, ohne das Skript zu rendern; und eine zwischengespeicherte öffentliche Seite kann nach Quellcodeänderungen weiterhin einen alten Verweis ausliefern. Das Zählen von Zeichenfolgen, Installationen, aktiven Anfragen und bösartigen Lieferungen erzeugt unterschiedliche Zahlen.
Ein rechenschaftspflichtiges Ökosystem hält diese Maße gekennzeichnet. Sicherheitsinformationen können eine breite Expositionsliste veröffentlichen, um Maßnahmen zu beschleunigen. Betreuer können betroffene Versionen angeben. Site-Betreiber können die bereitgestellte Erreichbarkeit melden. Vorfallsermittler können beobachtete Indikatoren melden. Keiner sollte Sicherheit von den anderen übernehmen.
SRI und CSP waren Kontrollen, keine Wunderlösungen
Subresource Integrity (SRI) erlaubt es einem Seitenautor, einen kryptografischen Digest für eine externe Ressource bereitzustellen. Ein unterstützender Browser kann die Ressource abrufen und sich weigern, sie auszuführen, wenn die zurückgegebenen Bytes nicht mit dem erwarteten Digest übereinstimmen. W3Cs Spezifikation und MDNs Implementierungsleitfaden präsentieren SRI als eine Möglichkeit, zu verhindern, dass ein kompromittierter Drittanbieter-Host eine Ressource stillschweigend ändert, von der die einbettende Site erwartet, dass sie fest bleibt. [18][19]
Das ist eine starke Kontrolle für ein stabiles Skript. Sie verwandelt eine offene Delegation in die Genehmigung spezifischer Bytes. Wenn der Host etwas anderes zurückgibt, blockiert der Browser die Ausführung. Die Website kann dann den Digest über ihren eigenen Bereitstellungsprozess aktualisieren, nachdem sie eine neue Version überprüft hat.
Polyfill.ios legitimes Design erschwert dieses Modell, da der Dienst absichtlich verschiedene Bundles entsprechend Browserfähigkeiten und Anforderungsparametern generierte. Ein stabiler Digest kann nicht viele gültige Byte-Sequenzen genehmigen, es sei denn, die Site ändert, wie sie den Dienst konsumiert. Ein Team könnte eine begrenzte Menge fester Ressourcen in einigen Architekturen vorberechnen und genehmigen, aber das Anhängen eines Hashs an einen Endpunkt, dessen Zweck die dynamische Antwortauswahl ist, würde wahrscheinlich das erwartete Verhalten unterbrechen oder wichtige Variationen ungebunden lassen.
Die richtige Schlussfolgerung ist nicht, dass SRI nutzlos ist. Sondern dass die Kontrollauswahl dem Ressourcenmodell entsprechen muss. Wenn eine Site Integrity Pinning möchte, muss sie möglicherweise aufhören, einen Remote-Dienst zu bitten, beliebige anforderungsspezifische Bytes zu generieren. Self-Hosting eines geprüften Bundles, das Ausliefern fester versionierter Varianten oder das Eingrenzen unterstützter Browser kann eine bytegenaue Genehmigung praktikabel machen.
Content Security Policy (CSP) adressiert eine andere Ebene. Eine Richtlinie kann einschränken, welche Ursprünge Skripte bereitstellen dürfen, und kann Nonces, Hashes oder verwandte Direktiven verwenden, um die Ausführung einzuschränken. Sie kann unerwartete Domains blockieren und die Freiheit von injiziertem Markup reduzieren, neue Ressourcen zu laden. Aber wenncdn.polyfill.ioexplizit als vertrauenswürdiger Skriptursprung erlaubt ist, wird eine ursprungsgenehmigte bösartige Antwort nicht durch das Erscheinen auf der Zulassungsliste vertrauenswürdig.
CSP kann dennoch helfen, sekundäres Verhalten einzudämmen. Eine sorgfältig gestaltete Richtlinie kann Verbindungen, Frames oder Navigationen einschränken, die an einer Angriffskette beteiligt sind, und Verstoßberichte können Erkennungsnachweise hinzufügen. Der genaue Effekt hängt von der Richtlinie und dem Browserverhalten ab. Die Kernbeschränkung bleibt: Die Ursprungsgenehmigung beantwortet, woher Code kommen darf, nicht, ob der genehmigte Betreiber immer akzeptablen Code zurückgibt.
Mirroring verschiebt die Vertrauensgrenze erneut. Eine Website oder ein Infrastrukturanbieter ruft eine Kopie ab oder pflegt sie und liefert sie von einem kontrollierten Standort aus. Dies kann verhindern, dass die ursprüngliche Domain Bytes zur Anfragezeit ändert. Es schafft auch Verpflichtungen, wie der Mirror bezogen, überprüft, aktualisiert und gesichert wird. Das automatische Umschreiben auf Cloudflares Mirror war eine nützliche Eindämmung, aber es wählte Cloudflare als neue Betriebsautorität; es beseitigte nicht das Konzept des Vertrauens.
Self-Hosting gibt dem Website-Betreiber eine direktere Kontrolle über die Auslieferung. Er kann eine Version überprüfen, sie mit der Anwendung bereitstellen und Änderungen durch seinen normalen Release-Prozess überwachen. Self-Hosting garantiert keinen sicheren Code. Es schränkt ein, wer die Produktionsantwort ändern kann, und macht die bereitgestellten Bytes leichter an eine Version bindbar.
Entfernung ist stärker, wenn die Funktion nicht notwendig ist. Wenn die aktuelle Browserunterstützung keinen Polyfill-Dienst mehr erfordert, ist das Remote-Skript mit dem geringsten Risiko das, das die Seite nicht anfordert. Deshalb gehört die Lebenszyklusüberprüfung neben Sicherheitskontrollen. Kompatibilitätsentscheidungen, die Jahre zuvor getroffen wurden, sollten nicht zu dauerhaften Autoritätszusagen werden.
Sandboxing kann den Einfluss Dritter verringern, wenn Funktionalität in einem eingeschränkten Frame oder isolierten Kontext ausgeführt werden kann. Nicht jedes Skript kann ohne Änderung des Produkts dorthin verschoben werden. Ein Polyfill, das die JavaScript-Umgebung der Seite modifizieren soll, ist besonders an den Hauptausführungskontext gebunden, was die Nützlichkeit der Isolierung begrenzt. Diese Einschränkung sollte beeinflussen, ob die Bequemlichkeit die Autorität noch wert ist.
Code-Scanning-Tools helfen, bekannte Verweise zu finden. CodeQLs Polyfill-spezifische Anleitung betont Sorgfaltspflicht bei der Eigentümerschaft, Logüberprüfung, Self-Hosting und die Grenzen von Integritätskontrollen für dynamische Inhalte. Semgrep schlug Repository-Suchen und Regeln vor, um die Polyfill.io-Nutzung nach dem Vorfall zu identifizieren. [15][20]
Statisches Scannen allein ist unvollständig, da Runtime-Injektionen von Content-Systemen, Tag-Managern oder Anbietern kommen können. Laufzeitbeobachtung allein ist unvollständig, da seltene Bedingungen während der Stichprobe nicht auftreten können. Ein ausgereifter Kontrollstack kombiniert Source- und Bundle-Scanning, ein Drittanbieter-Skriptinventar, DNS- und Eigentumsüberwachung, browser-seitige Telemetrie, Änderungsüberprüfung und einen Notfall-Deaktivierungsmechanismus.
Der Stack sollte auch das Fehlerverhalten spezifizieren. Wenn ein Polyfill nicht geladen werden kann, verliert die Seite dann eine kleine Verbesserung, wird unbrauchbar oder verhindert eine kritische Transaktion? Teams, die die Auswirkung von Fehlern verstehen, können eine verdächtige Ressource schnell entfernen oder blockieren, ohne während eines Vorfalls improvisieren zu müssen. Wenn die Kontinuität von der Ressource abhängt, ist ein getesteter lokaler Fallback sicherer, als die Abhängigkeit zu entdecken, wenn ein Registrar die Domain sperrt.
Kontrollen sind daher kein Menü, aus dem ein modisches Akronym ausgewählt werden kann. Sie sind eine Abfolge von Entscheidungen: unnötige Autorität entfernen, notwendigen Code wo möglich fixieren, einschränken, woher er kommen kann, beobachten, was er tut, Beweise aufbewahren und einen getesteten Pfad zur Deaktivierung oder zum Austausch bereithalten.
Verantwortlichkeit sollte den Kontrollen folgen, die jede Partei hatte
Der Vorfall umfasste einen Dienstanbieter, Website-Betreiber, Infrastrukturanbieter, einen Registrar, Sicherheitsforscher, Plugin- und Produktbetreuer sowie Anbieter, deren Code den Endpunkt einführte. Ihre Verantwortlichkeiten überlappten sich, waren aber nicht austauschbar.
Der Betreiber, der den gehosteten Polyfill.io-Dienst kontrollierte, hatte die direkteste Autorität über die Antwort, die von diesem Dienst zurückgegeben wurde. Das unterscheidet sich von der Wartung des ursprünglichen Open-Source-Codes. Die Verantwortlichkeit auf dieser Ebene betrifft die Verwahrung der Domain und des Bereitstellungspfads, die Änderungskontrolle, die Antwortintegrität, die Transparenz über die Auslieferung und die genaue Kommunikation über den Betrieb. Der verfügbare Datensatz sollte nicht zu einem Befund über jeden einzelnen Akteur, jede Unternehmensbeziehung oder rechtliche Pflicht gedehnt werden.
Fastly und Cloudflare hatten Infrastruktur- und Substitutionsfähigkeiten. Ihre Februar-Hinweise konnten warnen und Alternativen anbieten. Cloudflares spätere Position erlaubte automatisches Umschreiben und clientseitige Telemetrie für abgedeckten Datenverkehr. Diese Kontrollen waren bedeutsam, gaben aber keinem Anbieter vollständige Kenntnis über jede nachgelagerte Site-Quelle, Konfiguration oder Besucherauswirkung. [2][3][5]
Namecheap hatte einen Eindämmungshebel auf Registrar-Ebene. Das Setzen der Domain auf Haltezustand unterbrach die Auflösung oder Nutzung des Endpunkts. Diese Aktion reduzierte die unmittelbare Exposition, während sie potenziell abhängige Sites brechen konnte. Die Registrar-Kontrolle konnte einen Pfad stoppen; sie konnte keine Anwendungen patchen oder die historische Lieferung für jede Website feststellen. [10]
Sicherheitsforscher und staatliche Reaktionsstellen hatten Erkennungs-, Analyse- und Warnfähigkeiten. Sansec veröffentlichte Indikatoren und beobachtetes Verhalten. Akamai und Cloudflare fügten Telemetrieperspektiven hinzu. CERT-FR, Western Australia, CERT-AGID und SingCERT übersetzten den Vorfall in Betreiberanleitungen für ihr Publikum. Diese Parteien konnten die Sichtbarkeit erhöhen und Kontrollen empfehlen; sie konnten keine Korrekturen auf jeder Site bereitstellen. [1][5][6][7][9][21][22]
Plugin-, Bibliotheks- und Anbieterbetreuer kontrollierten Code, der die Abhängigkeit transitiv einführen konnte. Zu ihren rechenschaftspflichtigen Handlungen gehörten die Identifizierung betroffener Versionen und Bedingungen, das Entfernen des Endpunkts, die Veröffentlichung einer Korrektur, die Kommunikation des Umfangs und die Wahrung der Unterscheidung zwischen potenzieller Exposition und beobachteter Ausnutzung. Fides und die WordPress-Plugin-Aufzeichnungen zeigen, warum Versions- und Erreichbarkeitsnachweise wichtig sind. [11][12][14]
Website-Betreiber kontrollierten die endgültige Einbindungsentscheidung, auch wenn deren Ausführung einen Anbieter oder Betreuer erforderte, Code zu ändern. Sie konnten unterstützte Browser definieren, Drittanbieter-Skriptanbieter genehmigen, Inventare führen, Eigentumsverhältnisse überwachen, Ressourcen blockieren oder umschreiben, überprüften Code selbst hosten, Browser-Beweise aufbewahren, Beschwerden untersuchen und mit Besuchern kommunizieren.
Dies impliziert keine gleiche Schuld. Ein kleiner Site-Betreiber kann weit weniger Sichtbarkeit und Fachwissen haben als ein globales Infrastrukturunternehmen. Ein Anbieter kann die einzige Partei sein, die einen gebündelten Fallback ändern kann. Ein Registrar kann die einzige Partei sein, die eine Domain schnell sperren kann. Verantwortlichkeit folgt der praktischen Kontrolle und den Beweisen, die zu ihrer Ausübung verfügbar sind, nicht der Annahme, dass jeder Teilnehmer die gleiche Fähigkeit hatte.
Eine nützliche Pflichtenkarte kann um sechs Fragen organisiert werden.
Erstens, wer konnte unnötige Exposition verhindern? Website- und Produktbetreiber konnten die Browserunterstützung überprüfen und die Abhängigkeit entfernen. Betreuer konnten die Empfehlung oder Bündelung einstellen. Anbieter konnten sicherere Migrationspfade anbieten.
Zweitens, wer konnte verändertes Vertrauen erkennen? Domain- und Infrastrukturmonitore konnten Eigentums-, DNS- und Routing-Änderungen beobachten. Projektbetreuer konnten Kontozugriff und Dokumentation verfolgen. Website-Betreiber konnten relevante Hinweise abonnieren und Abhängigkeiten mit hoher Autorität überprüfen, wenn sich ihr Betreiber änderte.
Drittens, wer konnte schädliche Lieferung beobachten? Der Dienstanbieter und Infrastrukturanbieter konnten serverseitige Antworten sehen. Website-Betreiber und clientseitige Sicherheitsdienste konnten Browserverhalten sehen. Forscher konnten Proben über Bedingungen hinweg vergleichen. Keine einzelne Sicht deckte notwendigerweise die gesamte Kampagne ab.
Viertens, wer konnte den Pfad eindämmen? Der Betreiber konnte die Lieferung stoppen, der Registrar konnte die Domain sperren, Infrastrukturanbieter konnten Datenverkehr umschreiben oder blockieren, Betreuer konnten Korrekturen veröffentlichen und Website-Betreiber konnten Verweise deaktivieren oder entfernen.
Fünftens, wer konnte die Auswirkung untersuchen? Jeder Website-Betreiber besaß seine eigene Seitenarchitektur, Besucheraufzeichnungen, Beschwerden und Bereitstellungsgeschichte. Anbieter hatten Informationen über transiente Bedingungen. Infrastrukturanbieter hatten ausgewählte Datenverkehrs- und Antworttelemetrie. Die Untersuchung erforderte Kooperation, ohne vorzutäuschen, dass der Datensatz einer Partei alle Besucher repräsentierte.
Sechstens, wer konnte die Reparatur verifizieren und kommunizieren? Betreuer konnten Korrekturen an Versionen binden. Anbieter konnten die Entfernung zeigen. Website-Betreiber konnten den öffentlichen Pfad testen und angeben, was ihre Beweise abdeckten. Staatliche und Sicherheitsstellen konnten Anleitungen aktualisieren. Die Verifizierung musste auf die Sichtbarkeit der Partei beschränkt bleiben.
Diese Karte macht Verantwortlichkeit testbar. Anstatt nur zu fragen, wer den Vorfall verursacht hat, fragt sie, welche Partei jede Frage zu Prävention, Erkennung, Eindämmung, Untersuchung und Reparatur beantworten konnte. Sie zeigt auch Kontrolllücken auf. Wenn niemand das Domain-Eigentum für ein Skript mit Seitenebenen-Autorität überwachte, bestand die Lücke, bevor der bösartige Zweig auftauchte.
Was eine nachgelagerte Website nachweisen können sollte
Eine glaubwürdige nachgelagerte Antwort kann als Beweiskette und nicht als allgemeine Zusicherung ausgedrückt werden.
Die Kette beginnt mit dem Inventar. Die Organisation sollte jeden direkten und transitiven Polyfill.io-Verweis identifizieren, die Komponente oder den Anbieter, der ihn eingeführt hat, die Seiten, die ihn gerendert haben, und die Browser-Bedingungen, die ihn erreichbar machten. Suchergebnisse sollten mit dem bereitgestellten Verhalten verbunden werden, nicht als Liste übereinstimmender Dateien hinterlassen werden.
Als nächstes kommt die Notwendigkeit. Der Eigentümer sollte dokumentieren, ob die Kompatibilitätsfunktion für die Browser, die er absichtlich unterstützt, weiterhin erforderlich ist. Wenn nicht, sollte die Entfernung bevorzugt werden. Wenn sie erforderlich ist, sollte die Organisation erklären, warum der gewählte Ersatz oder die selbst gehostete Version angemessen ist.
Der dritte Schritt ist die Neubewertung des Vertrauens. Der Datensatz sollte zeigen, wann die Organisation von der Eigentumsübertragung oder dem Juni-Vorfall erfuhr, wer die Entscheidung traf, den Dienst fortzusetzen, zu blockieren, zu ersetzen oder zu entfernen, und welche Beweise diese Entscheidung stützten. Eine Februar-Überprüfung und eine Juni-Notfallreaktion sind unterschiedliche Ereignisse und sollten nicht zusammengefasst werden.
Der vierte Schritt ist der historische Umfang. Die Organisation sollte angeben, welche Daten, Besucherpopulationen und Telemetriequellen sie untersucht hat. Sie sollte Endpunktverweise, Anfragen, bekannte Indikatorübereinstimmungen, Weiterleitungen und gemeldete Schäden trennen. Wenn Protokolle fehlen, sollte die Lücke explizit bleiben.
Der fünfte Schritt ist die Reparatur. Der Eigentümer sollte die Änderung an ein Release, eine Konfiguration oder eine Anbieterbestätigung binden. Er sollte generierte Assets, Caches, Plugins, Tag-Manager und bedingte Zweige berücksichtigen. Die bloße Beobachtung, dass die gesperrte Domain nicht mehr antwortet, ist kein Entfernungsnachweis.
Der sechste Schritt ist die Verifizierung. Tests sollten relevante Browser-Bedingungen abdecken und bestätigen, dass die öffentliche Seite keine Anfrage an den alten Endpunkt stellt. Die Überwachung sollte auf Wiedereinführung, unerwartete Skriptursprünge und Weiterleitungsverhalten achten. Wenn ein Anbieter die Korrektur bereitgestellt hat, sollte der Kunde das externe Ergebnis überprüfen.
Der siebte Schritt ist die Kommunikation. Ein Hinweis sollte stabile Definitionen verwenden und vermeiden, Nutzung in Opferstatus umzuwandeln. Er sollte erklären, welche Abhängigkeit bestand, ob sie erreichbar war, welche Beweise für bösartige Lieferung gefunden wurden oder nicht, was sich geändert hat und welche Unsicherheiten bleiben. Benutzer benötigen praktische Fakten, keine breite Erklärung, dass das Problem „gelöst“ wurde.
Schließlich sollte der Eigentümer seine Lebenszykluskontrollen aktualisieren. Remote-Skripte mit hoher Autorität benötigen benannte Eigentümer, Überprüfungsdaten, Vertrauensbasisaufzeichnungen, Domain- und Betreiberüberwachung, Notfall-Deaktivierungspfade und die Aufbewahrung nützlicher Browser-Beweise. Andernfalls kann derselbe Governance-Fehler unter einem anderen Hostnamen wieder auftreten.
Diese Nachweise erfordern keine Offenlegung sensibler defensiver Details. Sie erfordern genügend Spezifität, um die Antwort falsifizierbar zu machen. Ein Besucher, Kunde oder Prüfer sollte zwischen „wir haben die Zeichenfolge entfernt“ und „wir haben jeden aktiven Pfad gefunden“ unterscheiden können, und zwischen „wir haben keine Ausnutzung gesehen“ und „unsere Beweise schließen sie für die abgedeckte Population aus.“
Eine Domain-Übertragung kann eine Softwareänderung sein
Polyfill.io machte ein einfaches Prinzip schwer zu ignorieren: Wenn eine Domain ausführbaren Code zurückgibt, ist das Eigentum an der Domain Teil des Sicherheitszustands der Software. Die URL kann stabil bleiben, während sich der effektive Lieferant ändert. Ein Repository kann öffentlich bleiben, während die gehostete Antwort unter andere Kontrolle gerät. HTTPS kann gültig bleiben, während die Vertrauensbasis, die die Einbindung rechtfertigte, nicht mehr besteht.
Die Februar-Hinweise zeigten, dass diese Änderung sichtbar und handelbar war. Die Juni-Berichte zeigten, warum es darauf ankam. Die selektive Weiterleitungslieferung nutzte ein Modell aus, bei dem verschiedene Besucher legitimerweise unterschiedlichen Code erhalten konnten, was eine gelegentliche Inspektion zu einer schwachen Zusicherung machte. Spätere Umschreibung und Domain-Sperre schränkten den Pfad ein, aber nur nachgelagertes Inventar, Entfernung, Untersuchung und Verifizierung konnten den Teil jeder Website des Problems schließen.
Der Vorfall rechtfertigt nicht, mehr als 100.000 Sites als bestätigte Opfer zu bezeichnen. Er beweist nicht, dass jeder Verweis bösartigen Inhalt ausgeliefert hat, dass jeder Besucher exponiert war oder dass jedes nachgelagerte Produkt ausgenutzt wurde. Er rechtfertigt auch nicht, den ursprünglichen Open-Source-Code als allgemein bösartig zu beschreiben oder eine selbst gehostete Kopie als identisch mit der kompromittierten gehosteten Beziehung zu behandeln.
Ebenso unterstützt das Ereignis kein rechtliches Urteil oder eine vollständige Zuschreibungsgeschichte aus dem verfügbaren Datensatz. Verantwortlichkeit ist hier enger und operativer. Es ist die Verpflichtung zu erklären, warum ausführbare Autorität delegiert wurde, wie geänderte Kontrolle erkannt wurde, welche Beweise die Erreichbarkeit feststellten, welche Maßnahme die Exposition reduzierte und wie die Reparatur verifiziert wurde.
Der Dienstanbieter, die Infrastrukturunternehmen, der Registrar, die Betreuer, die Anbieter und die Website-Betreiber hatten jeweils verschiedene Teile dieser Antwort. Die Verantwortung wurde geteilt, weil das System geteilt war, aber sie war nicht fungibel. Ein Registrar konnte eine Domain sperren und dennoch veralteten Code zurücklassen. Ein Anbieter konnte einen Verweis entfernen und dennoch die Besuchertelemetrie des Kunden nicht haben. Eine Website konnte ihre Benutzer untersuchen und dennoch von einer vorgelagerten Partei abhängen, um eine gebündelte Komponente zu ändern.
Für nachgelagerte Eigentümer ist der dauerhafte Standard direkt: Kennen Sie jede externe Partei, die Code für Ihre Besucher auswählen kann; überwachen Sie die Tatsachen, die diese Partei vertrauenswürdig gemacht haben; entfernen Sie Autorität, die keine notwendige Funktion mehr erfüllt; und bewahren Sie genügend Beweise auf, um Exposition, Lieferung und Schaden zu unterscheiden.
Ein Script-Tag mag eine Zeile HTML sein, aber es schafft eine Betriebsbeziehung. Wenn der Eigentümer hinter dieser Zeile wechselt, ändert sich auch die Softwarebeziehung. Die Verantwortlichkeit der Website beginnt damit, diese Änderung zu erkennen, bevor ein Besucher sie aufdecken muss.
Quellen
- https://sansec.io/research/polyfill-supply-chain-attack
- https://blog.cloudflare.com/polyfill-io-now-available-on-cdnjs-reduce-your-supply-chain-risk/
- https://community.fastly.com/t/new-options-for-polyfill-io-users/2540
- https://github.com/formatjs/formatjs/issues/4363
- https://blog.cloudflare.com/automatically-replacing-polyfill-io-links-with-cloudflares-mirror-for-a-safer-internet/
- https://cert.ssi.gouv.fr/actualite/CERTFR-2024-ACT-030/
- https://soc.cyber.wa.gov.au/advisories/20240626004-JavaScript-Polyfill-Supply-Chain-Attack/
- https://tag-security.cncf.io/community/catalog/compromises/2024/polyfill/
- https://www.akamai.com/blog/security/polyfill-supply-chain-attack-what-to-know
- https://socket.dev/blog/namecheap-takes-down-polyfill-io-service-following-supply-chain-attack
- https://www.cve.org/CVERecord?id=CVE-2024-38537
- https://nvd.nist.gov/vuln/detail/cve-2024-38537
- https://jellyfish.co/library/jellyfish-security-advisory-june-27-2024/
- https://www.wordfence.com/threat-intel/vulnerabilities/detail/various-plugins-various-version-use-of-polyfillio
- https://codeql.github.com/codeql-query-help/javascript/js-functionality-from-untrusted-domain/
- https://cwe.mitre.org/data/definitions/830.html
- https://cheatsheetseries.owasp.org/cheatsheets/Third_Party_Javascript_Management_Cheat_Sheet.html
- https://www.w3.org/TR/SRI/
- https://developer.mozilla.org/en-US/docs/Web/Security/Practical_implementation_guides/SRI
- https://semgrep.dev/blog/2024/protect-your-code-from-the-polyfill-supply-chain-attack/
- https://cert-agid.gov.it/news/scoperto-un-grave-attacco-alla-supply-chain-del-servizio-polyfill-io-piu-di-100-000-i-siti-coinvolti/
- https://isomer-user-content.by.gov.sg/36/8bee5efc-3166-44a1-89ae-0f0b095ecb17/03-July-2024.pdf

