npm (Software)
npm
| |
---|---|
Datei:Npm-logo.svg | |
Basisdaten
| |
Entwickler | Isaac Z. Schlueter / npm, Inc.[1] |
Erscheinungsjahr | 12. Januar 2010[2] |
Programmiersprache | JavaScript |
Kategorie | Paketverwaltung |
Lizenz | Artistic License 2.0 |
deutschsprachig | nein |
www.npmjs.com |
npm (ehemals Node Package Manager) ist ein Paketmanager für die JavaScript-Laufzeitumgebung Node.js. npm wurde 2010 von Isaac Schlueter als Mitarbeiter des kalifornischen Cloud-Plattform-Anbieters Joyent programmiert. 2014 gründete er die „npm, inc.“[3]
Unter dem Namen npm Registry bzw. npm Open Source wird ein Repository betrieben, über das 350.000 Pakete (Stand 13. Januar 2017[4]) unter einer freien Lizenz bereitgestellt werden.[5] Für private Pakete (also nicht Open Source) wird eine kommerzielle Version angeboten.[6]
Hinter der Entwicklung und dem Betrieb des Repository steht die Firma npm, Inc. mit Sitz in Oakland, Kalifornien,[7] die seit 2020 GitHub gehört[8] und somit zum Microsoft-Konzern.
Sicherheit
Wie jedes Repository ist die npm Registry dafür anfällig, dass Pakete mit Schadcode eingestellt werden. Sobald solche Pakete via Abhängigkeiten in einem Softwareprojekt verwendet werden, können verschiedenste Angriffe ausgeführt werden. In der Vergangenheit wurden Attacken via Typosquatting[9] und Social Engineering[10] bekannt. Im Jahr 2021 präsentierte ein Sicherheitsforscher einen weiteren Angriffsvektor, indem er schadhafte Pakete auf npm.com veröffentlichte und dabei den Paketnamen so wählte, dass er dem von Softwarefirmen intern verwendeten Paketnamen entspricht. Bei einer Fehlkonfiguration wurde in weiterer Folge das schadhafte Paket heruntergeladen und dessen Code ausgeführt.[11]
Probleme
Wegen einer Meinungsverschiedenheit in Bezug auf den Namen eines Pakets und der Reaktion der npm Registry darauf löschte im März 2016 ein Entwickler sämtliche seiner Pakete aus dem Repository, unter anderem auch left-pad
. Daraufhin konnte eine Vielzahl von Paketen wie Babel (ein JSX-nach-JavaScript-Compiler) und React nicht mehr kompiliert werden, weil diese das Paket benötigen.[12][13][14] Dies löste eine Debatte über den Einsatz von vielen Mikro-Modulen in der JavaScript-Community und die Abhängigkeit von einem kommerziell geführten Repository aus.[15] Des Weiteren wurden im Repository Maßnahmen gesetzt, um in Zukunft solche Probleme zu vermeiden: Veröffentlichte Versionen von Paketen können nur innerhalb von 24 Stunden selbstständig oder durch Kontaktieren des Supports zurückgezogen werden.[16][17][18]
Im Januar 2018 wurde versehentlich ein Benutzer blockiert und damit auch der Download seiner 102 Pakete. Aus diesem Grund konnte eine Vielzahl von bekannten JavaScript-Projekten nicht installiert/gebaut werden.[19]
Am 4. November 2021 wurde bekannt, dass mittels eines kompromittierten Maintainer-Zugangs, Schadcode über die Repositories „coa“[20] (Command Line Parser) und „rc“[21] (Configuration Loader) ausgeliefert wurde.[22]
Im Januar 2022 fügte der Entwickler des Pakets colors
bewusst eine Endlosschleife ein und machte somit dieses Paket, welches seinerseits als Abhängigkeit in circa 20.000 Paketen verwendet wird, unbrauchbar.[23][24]
Im April 2022 wurde ein weiterer Angriffsvektor publik – „Package Planting“: npm ermöglichte es, Maintainer zu Paketen hinzuzufügen, ohne dass diese zustimmen mussten. Ein Angreifer konnte sich Typosquatting bedienen und ein für ein populäres Paket (wie beispielsweise Express.js) ein ähnlich geschriebenes Paket mit Schadcode veröffentlichen. Durch das Hinzufügen der ursprünglichen Maintainer konnte dem schadhaften Paket Vertrauenswürdigkeit verliehen werden und die unwissenden Maintainer des richtigen Paketes konnten diffamiert werden.[25]
Name
Die Bezeichnung Node Package Manager geht auf die Readme-Datei des Projekts zurück.[26] Im Dezember 2014 wurde die Bezeichnung allerdings entfernt.[27] Auf der FAQ-Seite des Projekts wurde zwischen August 2011 und November 2015 npm als "rekursives" Backronym für „npm is not an acronym“ („npm ist kein Akronym“) definiert, welches tatsächlich jedoch nicht rekursiv ist.[28][29] Seit September 2014 werden Community-basiert mögliche Erklärungen für npm im GitHub-Projekt npm-expansions
gesammelt und auf der Webseite angezeigt.[30]
Siehe auch
- Bower – Paketverwaltung für clientseitige JavaScript-Pakete
Einzelnachweise
- ↑ About
- ↑ Erste Versionen von npm. In: GitHub . Abgerufen am 5. Januar 2019.
- ↑ increment.com: Glenn Fleischmann: Interview with Isaac Z. Schlueter, CEO of npm
- ↑ State of the Union: npm. In: Linux.com | The source for Linux information. Abgerufen am 16. Januar 2017.
- ↑ npm Open Source. (Nicht mehr online verfügbar.) In: npmjs.com. Archiviert vom Original am 25. März 2016; abgerufen am 24. März 2016 (englisch). Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.
- ↑ npm Private Packages. In: npmjs.com. Abgerufen am 24. März 2016 (englisch).
- ↑ About npm. In: npmjs.com. Abgerufen am 24. März 2016 (englisch).
- ↑ npm is joining GitHub. In: github.blog. Abgerufen am 16. März 2020 (englisch). npm wird Teil von GitHub. In: microsoft.com. Abgerufen am 20. März 2020.
- ↑ `crossenv` malware on the npm registry. In: The npm Blog. 2. August 2017, abgerufen am 12. Januar 2018 (englisch).
- ↑ David Gilbertson: I’m harvesting credit card numbers and passwords from your site. Here’s how. In: Hacker Noon. 6. Januar 2018 (englisch, hackernoon.com [abgerufen am 12. Januar 2018]).
- ↑ Sicherheitsforscher bricht über Open-Source-Repositories bei PayPal & Co. ein. In: heise online. 10. Februar 2021, abgerufen am 11. Februar 2021.
- ↑ JavaScript-Paket aus NPM entfernt: Node, Babel und Co. scheiterten beim Build. In: heise online. 23. März 2016, abgerufen am 25. März 2016.
- ↑ Azer Koçulu: I’ve Just Liberated My Modules. In: Medium. 22. März 2016, abgerufen am 25. März 2016 (englisch).
- ↑ Mike Roberts: A discussion about the breaking of the Internet. In: Medium. 23. März 2016, abgerufen am 25. März 2016 (englisch).
- ↑ NPM and Left-Pad: Have We Forgotten How to Program? In: Hacker News. Abgerufen am 25. März 2016.
- ↑ kik, left-pad, and npm. In: blog.npmjs.org. 23. März 2016, abgerufen am 25. März 2016 (englisch).
- ↑ changes to npm’s unpublish policy. In: blog.npmjs.org. 29. März 2016, abgerufen am 30. März 2016 (englisch).
- ↑ JavaScript: npm ändert Unpublish Policy für Pakete. In: heise online. 30. März 2016, abgerufen am 30. März 2016.
- ↑ Incident report: npm, Inc. operations incident of January 6, 2018. 11. Januar 2018, abgerufen am 12. Januar 2018 (englisch).
- ↑ https://github.com/advisories/GHSA-73qr-pfmq-6rp8
- ↑ https://github.com/advisories/GHSA-g2q5-5433-rhrf
- ↑ https://twitter.com/npmjs/status/1456310581846163457
- ↑ heise online: Paketmanager npm: Entwickler macht eigene Packages unbrauchbar. 11. Januar 2022, abgerufen am 27. April 2022.
- ↑ colors. In: npmjs.com. Abgerufen am 27. April 2022 (englisch).
- ↑ heise online: Npm-Schwachstelle „Package Planting“: Vertrauen ist gut, Kontrolle ist besser. 27. April 2022, abgerufen am 27. April 2022.
- ↑ Initial drop. Ugly, sketchy, and not even yet quite a „work in progr…“ · npm/npm@4626dfa. In: GitHub. 29. September 2009, abgerufen am 7. April 2016: „npm – The Node Package Manager“
- ↑ npm is a nice JavaScript package manager · npm/npm@cbb890e. In: GitHub. 12. Dezember 2014, abgerufen am 7. April 2016.
- ↑ Question about Capitalization · npm/npm@9c0b248. In: GitHub. 6. August 2011, abgerufen am 7. April 2016: „Contrary to the belief of many, „npm“ is not in fact an abbreviation for „Node Package Manager“. It is a recursive bacronymic abbreviation for „npm is not an acronym“.“
- ↑ doc: remove FAQ · npm/npm@b88c37c. In: GitHub. 25. November 2015, abgerufen am 7. April 2016.
- ↑ npm/npm-expansions. In: GitHub. Abgerufen am 7. April 2016: „What does n-p-m stand for?“