Paketmanager npm: Entwickler macht eigene Packages unbrauchbar

Die manipulierten Pakete sollen offensichtlich eine Botschaft an Großunternehmen sein, die Open Source nutzen, ohne die Developer zu bezahlen.

In Pocket speichern vorlesen Druckansicht 575 Kommentare lesen

(Bild: Nice to meet you / Shutterstock.com)

Lesezeit: 4 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

Der Entwickler der Open-Source-Projekte colors.js und Faker.js hat die zugehörigen npm-Pakete so angepasst, dass die jüngsten Versionen unbrauchbar sind. Die Manipulation ist wohl eine Protestaktion gegen Großunternehmen, die Open-Source-Projekte nutzen, ohne die Entwicklerinnen und Entwickler angemessen zu bezahlen.

Das Paket colors.js enthält in den Versionen 1.4.1 sowie 1.4.44-liberty-2 eine Endlosschleife. Was auf den ersten Blick nach einer externen Attacke aussah, entpuppte sich als reguläre Ergänzung durch den Maintainer und Entwickler des Open-Source-Projekts. Auf GitHub findet sich dazu die Ergänzung "Adds new American flag module".

Nach den drei Textzeilen

LIBERTY LIBERTY LIBERTY 
LIBERTY LIBERTY LIBERTY
LIBERTY LIBERTY LIBERTY

folgt allerdings eine endlose Ausgabe einer wilden Zeichenfolge. Aufgefallen ist der vermeintliche Bug unter anderem in dem AWS Cloud Development Kit (AWS CDK) mit einem zugehörigen Issue, auf den auch ein Tweet aufmerksam machte.

Ein Blick auf den weiteren Code zeigt die deutlich gekennzeichnete Endlosschleife

for (let i = 666; i < Infinity; i++;) {

Die Kommentare zu der Zeile gehen von "Dependency terrorism?" über "Feel the power from the infinity side" bis zu "my hero". Dazu finden sich amüsante Verbesserungsvorschläge zu einem Extradurchlauf "Could change to i <= Infinity for 1 extra loop" oder zum Vereinfachen: "while (true) { is the best practice."

Die Zahl des Antichristen 666 aus der Offenbarung des Johannes, in Developer-Kreisen eventuell besser bekannt als "The Number of the Beast" von Iron Maiden, zum Initialisieren der Variable i ist ebenso wie der Bezeichner Infinity kaum zufällig gewählt.

Dieselbe Zahl findet sich in der aktuellen Version des Pakets faker: Das Release trägt die Nummer 6.6.6 und enthält keinen Code mehr. Dasselbe gilt für das zugehörige GitHub-Repository. Ursprünglich diente die Library dazu, Pseudodaten für unterschiedliche Bereiche wie Namen oder Adressen zu erstellen, die beim Testen und Entwickeln von Anwendungen helfen sollten.

In dem GitHub-Repository fand sich vor dem kompletten Aufräumen der Issue #1046, in dem sich der Entwickler bereits Ende 2020 beklagt hatte, dass er keine unbezahlte Arbeit mehr für Fortune-500-Unternehmen leisten wolle: "No more free work from Marak – Pay Me or Fork This". Damals schrieb er "Nehmt es als Gelegenheit, mir einen sechsstelligen Jahresvertrag zu schicken oder das Projekt zu forken und jemand anderen daran arbeiten zu lassen."

Der Streik der Arbeitsroboter mit Bender in Futurama findet sich nach dem Aufräumen des Repository nur noch im Webarchiv.

Das GitHub-Repository und die npm-Seite von Faker.js enthalten zwar keinen Code mehr, das Readme weist aber auf den Internet-Aktivisten Aaron Swartz hin, der sich 2013 im Alter von 26 Jahren das Leben genommen hatte: "What really happened with Aaron Swartz?"

Der aktuelle Vorfall erinnert an das aus npm entfernte Paket left-pad im Jahr 2016. Es hatte lediglich neun Codezeilen und füllte Strings auf der linken Seite bis zur gewünschten Breite um Leer- oder andere Zeichen auf. Viele Entwickler fanden die Hilfsfunktion sinnvoll und nutzten das Paket in ihren Anwendungen. Als der Entwickler left-pad nach einem Streit mit dem Paketmanagerdienst npm entfernte, scheiterte der Build zahlreicher Anwendungen, unter denen sich prominente wie Node.js und Babel befanden.

Die Reaktionen auf die Vorgehensweise des Entwicklers von colors.js und Faker.js, der sich auf GitHub und Twitter schlicht marak nennt, sind gemischt. Während einige schon in der Codeerweiterung die Endlosschleife feiern, finden andere das Verhalten unverantwortlich:

GitHub hat ebenfalls reagiert und dem Entwickler den Zugang zu seinen Repositorys gesperrt, was wiederum zu kritischen Reaktion geführt hat. Ein Thread auf Twitter zeigt Beispiele für Reaktionen auf beiden Seiten: dem Entwickler, "der ausflippt"

und der zentralisierten Instanz GitHub:

Grundsätzlich zeigt das Vorgehen kurz nach der weitaus schwerwiegenderen Sicherheitslücke in Log4j erneut, wie verwundbar Projekte mit zahlreichen Abhängigkeiten sind. Die Frage, ob die Betreiber von Open-Source-Projekten zu wenig Unterstützung durch die Unternehmen erhalten, die davon profitieren, ist damit eng verbunden.

Weitere Details und Hintergründe zu dem Vorfall finden sich auf Bleepingcomputer und in einem Blogbeitrag bei Snyk.

(rme)