Immer mehr Protestware in Open-Source-Anwendungen: 4 Varianten und ihre Auswirkungen
March 22, 2022
0 Min. LesezeitVor wenigen Tagen berichteten wir über einen neuen Angriffsvektor in der Open-Source-Community: Protestware. Spezifisch ging es dabei mit „peacenotwar“ um eine transitive Schwachstelle im Paket „node-ipc“, die Auswirkungen auf die Lieferkette vieler Entwickler hat. Über diverse Threat-Feeds und zugehörige Algorithmen haben wir stets den Finger am Puls potenzieller neuer Bedrohungen im Open-Source-Bereich. Hier sind wir der Meinung: Es handelt sich womöglich nur um die Spitze des Eisbergs.
Seit unserem ersten Bericht zum Thema node-ipckonnten wir einen signifikanten Anstieg der Alerts in diesem Zusammenhang beobachten. In der Folge war selbiges auch im Hinblick auf potenzielle Protestware zum russischen Angriffskrieg gegen die Ukraine zu verzeichnen.
Protestware kann dabei verschiedenste Formen annehmen. In einigen Fällen geht es um Inhalte, die im Rahmen der Redefreiheit generell akzeptierbar wären. Im Fall von node-ipc allerdings sind sie schädlicherer, zerstörerischer Natur. Als Unternehmen möchte Snyk einen Beitrag leisten, um die Folgen abzumildern. Wir möchten helfen, mit der Engineering-Community einen Konsens zu erarbeiten, wie Protestware in all seinen Varianten und Facetten differenziert adressiert werden kann.
Was ist Protestware?
Protestware erfasst begrifflich Pakete, die durch inhaltliche Änderungen auf bestimmte Umstände aufmerksam machen sollen. Im Gegensatz zu Schadpaketen zeichnen für diese Änderungen nicht etwa Hacker oder Cyberkriminelle verantwortlich, sondern häufig bekannte und respektierte Mitglieder der Open-Source-Community, die aktiv an umfangreichen Projekten beteiligt sind oder diese als Maintainer sogar leiten.
Bevor wir uns nun eingehender mit dem Thema befassen an dieser Stelle noch ein Hinweis in aller Deutlichkeit: Wir stehen klar auf der Seite der Ukraine. Deutlich gemacht haben wir dies mit verschiedenen Formen der Unterstützung, der Präsenz, die wir fantastischen Open-Source-Lösungen aus der Ukraine gegeben haben, sowie durch unseren Abbruch geschäftlicher Beziehungen mit Unternehmen in Russland und Belarus. Gleichzeitig bleibt es auch unsere Pflicht, über Bedrohungen zu berichten, die wir in der Open-Source-Community verzeichnen, und eine Rolle bei ihrem Schutz zu spielen.
In diesem Blog gehen wir daher auf die vier Protestware-Varianten ein, die wir bislang beobachten konnten, sowie unsere zugehörigen Empfehlungen und Methodik. Wir hoffen, diese Inhalte können zum weiteren Austausch mit und in der Community dienen.
Protestware: Varianten
1. Repo-Banner
Bei diesen Paketen fügen die Maintainer in „Bannern“ im Repository politische Nachrichten ein. Sie ähneln README-Dateien, die angepasst wurden, um Unterstützung für die Ukraine zum Ausdruck zu bringen. In anderen Fällen werden sie als Änderungen an der Paketbeschreibung eingespielt oder als offene Probleme bei einer Nachricht. Wir verorten diese Form des Protests ganz klar im Bereich freier Meinungsäußerung ohne destruktiven Hintergrund. Alle Maintainer und beitragenden Entwickler sollten das Recht haben, ihre Meinung zu einem Thema frei kundzutun.
In derartigen Fällen sehen wir somit kein Handlungserfordernis auf unserer Seite.
2. CLI-Logs
Die zweite von uns beobachtete Variante geht einen Schritt weiter: Hier werden Protestnachrichten als Bestandteil von CLI-Logs direkt auf die Geräte der Nutzer übertragen, dies im Verlauf und nach Abschluss der Installation. Ein gutes Beispiel für das Auftreten in einem sehr beliebten Open-Source-Paket ist es5-ext. Der dabei verwendete Vektor ist zudem recht repräsentativ für diese Form der Protestware:
Ein lokaler Computer führt einen Zeitzonencheck aus, um den Standort des Nutzergeräts zu bestimmen.
Je nach Standort wird ein CLI-Log mit einem Post-Install-Script hinterlassen. In diesem wird Unterstützung für die Ukraine bekundet, zusammen mit Download-Hinweisen für den Tor-Browser, mit dem die Zensur der russischen Regierung von Websites mit Nachrichten über den Krieg umgangen werden kann.
Nach Prüfung beider Teile dieses Vektors ist unser Standpunkt, dass es sich dabei zwar um ungewöhnliches Verhalten handelt, dieses jedoch nicht zum ersten Mal im Software-Ökosystem zu beobachten ist. Bei einem Zeitzonencheck sind lokale Systemüberprüfungen bisweilen Teil des normalen Installationsvorgangs, etwa zur Prüfung des optimalen Installationswegs für ein Paket. Im Verlauf der Installation eines Pakets werden in der CLI häufig sehr konkrete Nachrichten erfasst. Nicht alle beziehen sich dabei direkt auf die Paketinstallation selbst – so werden teils auch Credits und Danksagungen, Emojis und andere für die Funktionalität nicht wichtige Informationen abgelegt.
Solange derartige Nachrichteninhalte sich auf die Installationsumgebung der CLI beschränken, sind wir aktuell der Meinung, dass diese Pakete keiner besonderen Aufmerksamkeit bedürfen.
3. Protestlogs außerhalb der Installationsumgebung
Eine hervorragende Überleitung direkt zu unserer dritten Variante: Pakete, bei denen der Protest-Code außerhalb der Installationsumgebung ausgeführt wird. Beispiele sind die Pakete event-source-pollyfill und peacenotwar. In beiden Fällen kommt zwar auch die Standortbestimmung per Zeitzonencheck zum Einsatz. Doch sie gehen dabei einen Schritt weiter über Logs hinaus und führen zum Protest aktiv Code auf dem Nutzergerät aus.
Zwar findet sich auch bei diesem Verhalten keine destruktive Vorgehensweise, allerdings erachten wir dies bei einem Open-Source-Paket nicht als erwartbar oder wünschenswert. So kann es hierbei zu Popup-Alerts kommen, es können Websites mit einschlägigen Informationen automatisch aufgerufen oder sogar neue Dateien mit Info-Dumps auf dem Desktop erstellt werden.
Für derartige Pakete werden wir einen Hinweis mit dem Titel „Undesired Behavior“ hinzufügen, um dieses unerwünschte Verhalten entsprechend zu dokumentieren. Unsere CVSS-Vektoren werden präzise abbilden, bei was es sich um unerwünschtes Verhalten handelt und wie es die Integrität des Geräts beeinträchtigt, auf dem es ausgeführt wird.
4. Destruktive Proteste
Kommen wir nun zu den Paketen mit eindeutig destruktivem Verhalten, die eine direkte Bedrohung für Endgeräte darstellen, auf denen sie ausgeführt werden. Bei node-ipc handelt es sich aktuell um das umfassendste und bekannteste dieser Pakete. Mit ihm wird versucht, die Festplatten des betroffenen Systems zu löschen. Wir hatten in diesem Artikel darüber berichtet.
Pakete, bei denen eindeutig schädliches Verhalten zu beobachten ist (z. B. Löschung von Dateien oder Informations-Leaks) werden unter dem Titel „Malicious Package“ mit, je nach Auswirkung, hohem bzw. kritischem Schweregrad erfasst.
Protestware-Variante | Beispiel | Aktuelle Empfehlung von Snyk |
---|---|---|
Repo-Banner | README mit Protestdetails | Kein Hinweis |
CLI-Logs | Installations-Log mit Protestdetails | Kein Hinweis |
Protestlogs außerhalb der Installationsumgebung | Auf Desktop abgelegte Datei mit Protestdetails | Hinweis „Undesired Behavior“ mit niedrigem bis mittlerem Schweregrad |
Destruktive Proteste | Überschreiben von Dateien auf Festplatte mit Protestdetails | Hinweis „Malicious Package“ mit hohem bis mittlerem Schweregrad |
Protestware: Entwicklungen im Auge behalten
Zusammenfassend lässt sich sagen, dass sich die Situation um Protestware mit Sicherheit rasch in Form neuer Bedrohungsvektoren weiterentwickeln wird. Dabei sehen wir unsere Rolle wie folgt:
Wir werden die Community weiterhin auf neu entstehende Bedrohungsmuster hinweisen – so schnell und so präzise wie möglich.
Weiter möchten wir zum Community-Dialog im Hinblick auf den Umgang mit allen Protestware-Varianten beitragen und so hoffentlich einen allgemeinen Konsens mitgestalten.
Sie haben weitere Protestware in Open-Source-Paketen identifiziert? Kontaktieren Sie uns bitte mit Informationen über unser Open Source Vulnerability Disclosure Program. Vielen Dank für Ihren Einsatz für sichere Open-Source-Lösungen.
Open-Source-Abhängigkeiten ohne Anfälligkeiten
Ob transitiv oder direkt, mit Snyk beheben Sie Schwachstellen in Open-Source-Abhängigkeiten mit nicht mehr als einem Klick – einfach via Pull-Request.