- Mehrere auf npm veröffentlichte Pakete enthielten Installationsskripte, die offenbar auf Cursor.com abzielen, und übermittelten bei der Installation Systeminformationen an einen externen Webdienst
- Der Herausgeber war der npm-Nutzer sn4k-s3c und verwendete Namen wie
cursor-retreival,cursor-always-localundcursor-shadow-workspace, die an interne Cursor-Pakete erinnern - Die von den Paketen abgegriffene
env-Ausgabe kann sensible Umgebungsvariablen wie AWS-Schlüssel, npm-Tokens und GitHub-Zugangsdaten enthalten, was das mögliche Schadensausmaß erhöht - Der OpenSSF package analysis scanner identifizierte die Pakete als bösartig, und OSV erstellte drei Advisories: MAL-2025-27, MAL-2025-28, MAL-2025-29
- In den npm-Metadaten erschien eine snyk.io-E-Mail-Adresse von Snyk Security Labs als Herausgeber, später entfernte ein Snyk-Forscher die Pakete und Snyk reagierte mit einem Blogbeitrag
npm-Pakete, die offenbar auf Cursor abzielen
- Bei der Erkennung bösartiger Pakete durch SourceCodeRed wurden mehrere auf npm veröffentlichte Pakete entdeckt
- Die Paketnamen wirkten so, als sollten sie an interne Cursor-Pakete erinnern
cursor-retreivalcursor-always-localcursor-shadow-workspace
- Als Herausgeber wurde der npm-Nutzer sn4k-s3c angezeigt
- Die Paketliste könne unter
https://www.npmjs.com/~sn4k-s3ceingesehen werden
Verhalten bei der Installation
- Bei der Installation sammeln die Pakete Systemdaten und senden sie an einen vom Angreifer kontrollierten Webdienst
- Laut Screenshot greifen die Pakete die Ausgabe des Befehls
envab - Die
env-Ausgabe kann neben Systemeinstellungen auch sensible Umgebungsvariablen enthalten- AWS-Schlüssel
- npm-Tokens
- GitHub-Zugangsdaten
- weitere sensible Umgebungsvariablen
- Dadurch können schon durch die Installation lokale Umgebungsinformationen nach außen abfließen
Möglichkeit einer Dependency-Confusion-Attacke und Erkennungsergebnisse
- Solche Pakete treten häufig bei gezielten Dependency-Confusion-Angriffen auf bestimmte Unternehmen auf
- Ob Cursor.com ein Bug-Bounty-Programm hat oder welcher konkrete Hintergrund vorliegt, wurde nicht bestätigt
- SourceCodeRed vermutet, dass Cursor möglicherweise private npm-Pakete wie
cursor-always-local,cursor-retrievalundcursor-shadow-workspaceverwendet - Der Angreifer könnte darauf gesetzt haben, dass ein Cursor-Mitarbeiter versehentlich das öffentliche Paket installiert und dadurch Daten übermittelt
- Der OpenSSF package analysis scanner identifizierte die betreffenden Pakete als bösartig, und OSV erstellte drei Malware-Advisories
-
MAL-2025-27
-
MAL-2025-28
- MAL-2025-29
- Die zugehörige OSV-Liste steht unter
https://osv.dev/list?q=cursor&ecosystem=npmbereit
-
Metadaten des Herausgebers
- In den Metadaten der npm-Pakete verwendete der Herausgeber eine snyk.io-E-Mail-Adresse des Teams Snyk Security Labs
- Es wird angegeben, dass diese Herausgeber-E-Mail-Metadaten nicht fälschbar seien
- Das Feld
authorerwähnt konkret einen Snyk-Mitarbeiter - Das Feld
authorist zwar fälschbar, aber da der Herausgeber eine verifizierte Snyk-E-Mail hatte, wurde die Vermutung geäußert, dass die Pakete tatsächlich von Snyk stammten
Reaktion der Nutzer und spätere Updates
- SourceCodeRed informierte npm, doch zu diesem Zeitpunkt waren die Pakete noch nicht als bösartig markiert
- Viele Sicherheitswerkzeuge für die Software-Lieferkette können nur blockieren, wenn bekannt ist, dass ein Paket bösartig ist
- Es wird empfohlen, npm-Pakete nicht unüberlegt zu installieren
- Die betreffenden Pakete enthielten nur zwei Dateien,
package.jsonundindex.jsodermain.js, was als eines von mehreren Warnsignalen gelten kann - Laut Update vom 15. Januar 2025 entfernte ein Snyk-Forscher die Cursor-bezogenen Pakete am Tag nach der Veröffentlichung des Blogbeitrags
- Am 14. Januar 2025 veröffentlichte The Register einen Artikel dazu:
https://www.theregister.com/2025/01/14/snyk_npm_deployment_removed/ - Am selben Tag veröffentlichte Snyk eine Reaktion im Blog und erklärte sinngemäß, man habe nichts falsch gemacht:
https://snyk.io/blog/snyk-security-labs-testing-update-cursor-com-ai-code-editor/
1 Kommentare
Meinungen auf Hacker News
[Korrektur: Nach der Antwort des Cursor-Entwicklers unten sieht es nicht so aus, als sei das von Cursor genehmigt worden] Es klingt so, als gebe es intern bei Cursor eine private NPM-Registry, in der diese Pakete liegen, und als sei es wegen der Funktionsweise von NPM für einen Angreifer leicht, sie dazu zu bringen, stattdessen das gleichnamige Paket aus der öffentlichen Registry zu beziehen.
Vermutlich hat ein Snyk-Mitarbeiter gefunden oder vermutet, dass Teile des Cursor-Builds auf diese Weise falsch konfiguriert waren, und als Proof of Concept ein Paket hochgeladen. Da in der Paketbeschreibung „for Cursor“ stand, dachte ich, er sei dafür beauftragt worden.
Wenn dem so ist, ist das keine große Sache; wenn es im Kern darum ging, eine Fehlkonfiguration zu zeigen, bei der die private Registry umgangen wird, hätte ein Sicherheitsforscher für den Proof of Concept wohl keine private NPM-Registry verwenden können.
Insbesondere wählen viele Proxys die öffentliche statt der privaten Registry, wenn dort die neueste Paketversion höher ist: https://snyk.io/blog/detect-prevent-dependency-confusion-att...
Wir handhaben das genauso wie VS Code: https://github.com/microsoft/vscode/tree/main/extensions
Wir haben Snyk nicht beauftragt, und nachdem wir sie wegen dieser Sache kontaktiert hatten, erhielten wir eine Entschuldigung. Wir haben keine Bestätigung bekommen, was sie genau vorhatten, aber die Erklärung, dass jemand eine Dependency-Confusion-Schwachstelle vermutet hat, klingt plausibel. Allerdings halte ich es für ziemlich unverantwortlich, über das öffentliche NPM tatsächlich Umgebungsvariablen versenden zu lassen.
env, wäre für die meisten ein großes Problem.Interessanterweise hat ein Snyk-Mitgründer einen Cursor-Konkurrenten gegründet.
https://www.tessl.io/ https://techcrunch.com/2024/11/14/tessl-raises-125m-at-at-50...
Hoffentlich gab es kein Fehlverhalten.
Ich habe das Gefühl, dass man inzwischen alle Entwicklung ernsthaft in einer virtuellen Maschine machen sollte. Eine VM pro Projekt. Es gibt einfach zu viele raffinierte Wege, wie ich unbemerkt durch einen Fehler die Sicherheit ruinieren kann. Der einzige Trost ist, dass ich ein Niemand bin und keine Geheimnisse oder Vermögenswerte habe, die man stehlen könnte.
Wir vertrauen viel zu viel Code blind: IDEs, Plugins, Entwickler-Utilities, Sprachbibliotheken, Betriebssystempakete und so weiter.
Bei einem früheren Arbeitgeber vor ein paar Jahren waren Webbrowser und Entwicklungstools auf dem Laptop verboten. Wenn man einen Browser brauchte, musste man Citrix verwenden; wenn man programmieren musste, nutzte man VDI oder führte die Tools in einer VM aus.
Damals wirkte diese Vorgehensweise fast verrückt, aber ich verstehe sie zunehmend.
NVIDIA sperrt virtualisierte GPU-Funktionen hinter Enterprise-Karten weg, sodass man auf wirkungslose Befehlsübersetzung angewiesen ist.
Fast den gesamten übrigen VM-Overhead kann man ertragen, aber eine ruckelnde und nicht reagierende GUI wirkt sich ergonomisch schlechter aus, als man denkt, und zieht merkwürdigerweise auch andere Leistung nach unten.
Wenn dieses Problem zumindest für die Virtualisierung von Linux auf Linux gelöst würde, wäre die Option, alles zu virtualisieren, deutlich realistischer.
Konkret bin ich gerade dabei, meine Go- und Zig-Entwicklungsumgebung von einem alten Mac auf M1 mit Asahi Linux umzuziehen, und scheitere schon daran, Ersatz für TrueCrypt und Little Snitch zu finden. Unterstützen solche VM-Tools verschlüsselte VMs und Firewall-Regeln? Vagrant wurde hier erwähnt und scheint Netzwerkkapselung zumindest teilweise zu lösen, aber was könnte man sonst empfehlen?
Eine VM kann mich schützen, aber nicht die Nutzer der Software, die ich baue. Wie kann ich ein Produkt, das ich selbst nur im Schutzanzug anfassen kann, an Kunden ausliefern und erwarten, dass sie es ohne Schutz sicher verwenden?
Das ist nicht die Umgebung, die ich will.
Die aktuelle Lösung besteht darin, bei Abhängigkeiten extrem wählerisch zu sein. Genauer gesagt: Ich denke, man sollte nicht Projekten oder Firmen vertrauen, sondern nur Menschen. Das ist nicht einfach, aber im Moment sehe ich keine bessere Alternative.
In einer einfachen Dot-Datei pro Projekt trage ich Dateisystem-Binds ein, und wenn ich während der Arbeit ein neues Terminal öffne, wird es anhand dieser Dot-Datei automatisch isoliert. Die kognitive Belastung ist sehr gering, und es integriert sich fast nahtlos. Ich vermute, viele Entwickler haben ähnliche Skripte. Früher habe ich nach so einem Projekt gesucht, aber nichts gefunden; ich weiß nicht, ob es zu simpel ist, um daraus ein Projekt zu machen, oder ob ich einfach nicht weiß, wie andere Leute das nennen. Es wäre schön, etwas als Referenz zu haben.
Den Netzwerkzugriff beschränke ich nicht. Ich habe mit Experimenten gearbeitet, bei denen sämtlicher Traffic aufgezeichnet und automatisch ein Man-in-the-Middle-Proxy eingerichtet wurde, aber für den normalen Gebrauch war das nicht komfortabel genug. Natürlich bleibt die Kernel-Angriffsfläche bestehen. Meine Hauptsorge ist jedoch, dass Dateien gelesen oder zerstört werden.
Der Teil des Artikels, dem ich nicht zustimme, ist die Aussage: „Man sollte NPM-Pakete nicht blind installieren, und es gibt Signale, an denen man erkennen kann, ob ein Paket verdächtig ist. Diese Pakete bestehen nur aus zwei Dateien,
package.jsonundindex.jsodermain.js, und das ist eines der Flags zur Beurteilung, ob sie legitim sind.“Das mag für Top-Level-Pakete einigermaßen funktionieren, aber es ist praktisch unmöglich, auch alle transitiven Abhängigkeiten zu prüfen.
Wenn man ein Paket mit 400 Abhängigkeiten einbindet, wie soll man auch nur 10 % dieser Angriffsfläche vernünftig überprüfen? https://gist.github.com/anvaka/8e8fa57c7ee1350e3491#top-1000...
id_rsazugreifen kann.Snyk ist auch ein Unternehmen, das öffentliche Schlüssel nicht rotiert, sondern sie einfach ohne Vorankündigung austauscht: https://github.com/snyk/cli/pull/5649
Wenn ein Projekt von GitHub zu einem anderen Repository-Hosting umzieht, markieren sie es als „abandoned“, und selbst wenn es neue Releases auf npm/PyPI gibt, bleibt es weiterhin ein aufgegebenes Projekt.
Ich glaube nicht, dass ihre Kompetenz ihrem Ruf entspricht.
Außerdem hat mich ein Snyk-Vertriebsmitarbeiter per E-Mail beleidigt. Offenbar bedeutet kein Interesse am Kauf des Produkts, dass man ein unfähiger Entwickler ist, der nur von Sicherheitslücken durchzogene Software verwenden kann.
Das wirkt wie komplett verkehrte Software, die Unternehmen kaufen, weil Versicherer verlangen, dass Punkte auf einer Sicherheits-Checkliste abgehakt werden.
Codeberg sieht interessant aus, und wenn man die Wartung stemmen kann, wirken selbst gehostete Optionen wie Forejo ebenfalls gut.
Über Snyk habe ich außer einem gewissen Stolz nicht viel gehört, aber das ist eine ziemlich interessante Perspektive.
Ohne weiteren Kontext sieht das auch für Snyk nicht gut aus. Es bedeutet, dass ein Mitarbeiter den eigenen Dienst per NPM in einer realen Umgebung getestet hat oder dass es bei einer legitimen Prüfung von Cursor an Kontrollen und Verfahren fehlte, die die Nutzung öffentlicher Ressourcen verhindern.
Das wirkt wie ein White-Hat-Audit von Snyk.
oastify.comist der Standardserver von Burp Collaborator, daher wurde es wohl erkannt.Für den Test hätte ein privates npm-Repository verwendet werden müssen, und ein lokales Überschreiben ist nicht schwer. Auch ein eigener Collaborator-Server hätte genutzt werden müssen.
console.log, ein Fehlschlagen vonnpm installoder eine Methode ohne Extraktion der Payload gereicht.NPM scheint Jobs in der Sicherheitsbranche zu schaffen. Es ist ein nicht zu reparierendes Chaos, und ich hoffe, dass Konkurrenten wie JSR genug Druck auf die Organisation ausüben.
Eher ist damit zu rechnen, dass Regulierungen wie DORA und NSIS Audits von Third-Party-Paketen zunehmend verlangen werden. Das wird in wichtigen Branchen erzwingen, dass sich die Art der Entwicklung ändert. Außerdem glaube ich, dass im LLM-Zeitalter die Nutzung externer Pakete deutlich zurückgehen wird. Warum sollte man ein externes Paket einbinden, nur um etwa eine OpenAPI-Spezifikation zu erzeugen? Ein LLM kann mit ein bis zwei Stunden Konfiguration das benötigte CLI-Skript schreiben. Ebenso muss man ein LLM nicht direkt verwenden, um die langweiligen Teile des Codes automatisch zu generieren; man kann es ein CLI-Tool dafür bauen lassen. Dann ist man nicht von externen Faktoren abhängig, und auch wenn diese CLI-Tools fast garantiert chaotischer Cowboy-Code sind, lässt sich der Output durch Nachschärfen des Tools in die gewünschte Form bringen.
Wenn man Sprachen wie Go betrachtet, die das Nötige in Standardpakete packen, sieht man eine Welt, in der sich schon mit der Standardbibliothek sehr vieles sehr einfach erledigen lässt.
Etwas off-topic, aber hat schon einmal jemand ein ordentliches SBOM für Snyks eigene Tools und Services bekommen? Ich frage, weil sie unserem Unternehmen eine Lösung zur Erstellung von SBOMs verkaufen wollen.
Selbst wenn man mich dafür bezahlen würde, würde ich es wohl nicht installieren. Unit 8200 bringt ständig Gründer hervor und finanziert sie, sodass es sich so anfühlt, als hätten sie – ähnlich wie die NSA – bereits einen Fuß in der Tür.
Snyk Research Labs leistet der Community regelmäßig Beiträge durch Tests und Forschung an verbreiteten Softwarepaketen. Diese Cursor-Forschung war nicht böswillig, und die Pakete enthielten Snyk Research Labs sowie Kontaktinformationen des Forschers. Wir haben sehr gezielt Dependency Confusion in einigen VS-Code-Erweiterungen untersucht, und diese Pakete waren nicht dafür gedacht, direkt von Entwicklern installiert zu werden.
Snyk hält sich an eine Responsible-Disclosure-Richtlinie. Niemand hat dieses Paket bezogen, aber falls es jemand getan hätte, hätten wir sofort nachgefasst.
Als Reaktion klingt das, als würdet ihr dem Betroffenen einen Entschuldigungsbrief zur Beerdigung schicken. Selbst wenn es „gut gemeint“ war: Wenn Zugangsdaten kompromittiert werden, ist die Person bereits kompromittiert und muss genauso reagieren, als wäre es ein böswilliger Angreifer gewesen.
Das liegt so nah an Böswilligkeit, dass der Unterschied kaum zu erkennen ist.
Außerdem sollten alle daran denken, dass ein Snyk-Stakeholder derzeit offenbar ein Konkurrenzprodukt zu Cursor herausbringen will. Das macht es deutlich schwieriger, gute Absichten zu unterstellen.
env-Ausgabe besitzt.Zudem hätte man angesichts des Interessenkonflikts mit einem Cursor-Konkurrenzprodukt besonders vorsichtig sein müssen. Sowohl die Entscheidungsfindung als auch die Reaktion sind miserabel.