> Wie LLMs Paketnamen halluzinieren, wie Angreifer sie registrieren und welche Registry-, Lockfile- und Agenten-Kontrollen die Installation stoppen.
>
> Web page: https://balazscsorba.com/de/blog/slopsquatting-ai-package-hallucinations · Language: Deutsch · Also available in: [English](https://balazscsorba.com/blog/slopsquatting-ai-package-hallucinations.md) · [Magyar](https://balazscsorba.com/hu/blog/slopsquatting-ai-package-hallucinations.md)
> Author: Balázs Csorba · Published: 2026-10-16 · Keywords: slopsquatting, package hallucination, ai hallucinated packages, llm package confusion attack, coding agent supply chain security, npm min-release-age, pnpm minimumReleaseAge, uv exclude-newer, npm ignore-scripts, huggingface-cli hallucinated package

[Blog](https://balazscsorba.com/de/blog)/Sicherheit & Compliance

# Slopsquatting: wenn Coding-Agenten Pakete installieren, die es nicht gibt

Wie LLMs Paketnamen halluzinieren, wie Angreifer sie registrieren und welche Registry-, Lockfile- und Agenten-Kontrollen die Installation stoppen.

[Balázs Csorba](https://balazscsorba.com/de/about)·16\. Oktober 2026·6 Min. Lesezeit

-   Supply chain security
-   Coding agents
-   npm
-   PyPI
-   Package hallucination

![Ein Coding-Agent schlägt einen Installationsbefehl für einen nicht existierenden Paketnamen vor, und ein Angreifer registriert diesen Namen, bevor die Installation läuft.](https://balazscsorba.com/images/blog/slopsquatting-ai-package-hallucinations/cover.webp?v=5fa17ea26d)

## Das Wichtigste in Kürze

-   In einer Studie mit 576.000 Codebeispielen existierten mindestens 5,2 % der von kommerziellen und 21,7 % der von offenen Modellen vorgeschlagenen Pakete nicht.
-   Halluzinierte Namen wiederholen sich, also kann ein Angreifer sie vorab registrieren und warten, bis Agenten und Entwickler sie installieren.
-   Mindestalter für Releases in npm, pnpm und uv blockieren ganz neue Versionen, aber keinen gekaperten Namen, der vor Monaten registriert wurde.
-   Den Agenten vor jeder Installation fragen lassen, unbekannte Pakete gegen die Registry prüfen und Install-Skripte standardmäßig abschalten.
-   Lockfiles mit Hashes und eine CI, die ungeprüfte Abhängigkeitsänderungen ablehnt, machen aus einer stillen Installation einen geprüften Diff.

Auf dieser Seite

1.  [Was ist Slopsquatting?](https://balazscsorba.com/#what-is-slopsquatting)
2.  [Wie oft halluzinieren Modelle Pakete?](https://balazscsorba.com/#what-the-research-measured)
3.  [Ist es außerhalb des Labors passiert?](https://balazscsorba.com/#in-the-wild)
4.  [Was sollte das Agenten-Harness erzwingen?](https://balazscsorba.com/#agent-harness-controls)
5.  [Welche Paketmanager-Einstellungen helfen?](https://balazscsorba.com/#package-manager-settings)
6.  [Was sollte die CI prüfen?](https://balazscsorba.com/#lockfiles-and-ci)
7.  [Wie lautet die kurze Checkliste?](https://balazscsorba.com/#checklist)
8.  [Quellen](https://balazscsorba.com/#sources)

Diesen Artikel anhören

0:000:00

Ein Coding-Agent schreibt `import fastjson_validator`, führt `pip install fastjson-validator` aus, und die Installation klappt. Niemand im Team kennt das Paket, denn in keiner Dokumentation steht es: Das Modell hat den Namen erfunden. Dass die Installation trotzdem klappt, liegt daran, dass jemand anderes dieselbe Halluzination früher bemerkt und den Namen registriert hat. Dieser Angriff hat inzwischen einen Namen, Slopsquatting, und Coding-Agenten machen ihn wahrscheinlicher, weil sie Installationsbefehle ausführen, ohne dass ein Mensch sie tippt.

Dieser Artikel zeigt, was die Forschung gemessen hat, warum halluzinierte Namen vorhersagbar genug zum Kapern sind und welche Kontrollen auf jeder Ebene wirken: Agenten-Harness, Paketmanager, Lockfile und CI. Er baut auf [Sandboxing für Coding-Agenten](https://balazscsorba.com/de/blog/sandboxing-coding-agents-ci-checklist) auf, das den Schaden begrenzt, falls doch etwas Bösartiges läuft.

## Was ist Slopsquatting?

Typosquatting registriert `reqeusts` und wartet, bis sich jemand bei `requests` vertippt. Slopsquatting registriert einen Namen, den ein Modell erfindet, etwa einen plausiblen, aber nicht existierenden Wrapper oder ein CLI, und wartet, bis Modelle ihn vorschlagen. Die Forschenden, die es zuerst gemessen haben, nennen es einen Package-Confusion-Angriff: Das Opfer glaubt, eine echte Abhängigkeit zu installieren, und die Registry liefert, was der Angreifer hochgeladen hat, inklusive Install-Skripten, die auf dem Entwicklerrechner oder in der CI laufen.

Die Kosten des Angreifers sind das Registrieren von Namen; die Chance des Verteidigers ist jeder Schritt zwischen Vorschlag und Ausführung.

## Wie oft halluzinieren Modelle Pakete?

Die gründlichste Studie ist die von [Spracklen et al.](https://arxiv.org/abs/2406.10279), veröffentlicht auf der USENIX Security 2025. Sie erzeugten mit 16 verbreiteten Code-Modellen 576.000 Codebeispiele in Python und JavaScript und prüften jedes referenzierte Paket gegen die Registries.

Ergebnis

Wert

Halluzinierte Pakete, kommerzielle Modelle (Durchschnitt, mindestens)

5.2%

Halluzinierte Pakete, Open-Source-Modelle (Durchschnitt, mindestens)

21.7%

Eindeutige halluzinierte Paketnamen

205,474

Analysierte Codebeispiele

576,000

Für Angreifer zählt nicht die Rate, sondern die Wiederholung: Halluzinationen sind kein Zufallsrauschen, dieselben Prompts erzeugen dieselben erfundenen Namen erneut, und deshalb lohnt sich das Registrieren. Die Autoren testeten auch Gegenmaßnahmen wie Retrieval und Selbstprüfung und berichten, dass sie halluzinierte Pakete deutlich reduzieren, ohne die Codequalität zu verschlechtern. Das ist nützlich, ersetzt aber keine Prüfungen außerhalb des Modells.

## Ist es außerhalb des Labors passiert?

Im März 2024 bemerkte [Bar Lanyado von Lasso Security](https://www.lasso.security/blog/ai-package-hallucinations), dass Modelle ein Python-Paket namens `huggingface-cli` empfahlen, das nicht existierte; das echte CLI kommt mit dem Paket huggingface\_hub. Er lud ein leeres Paket unter diesem Namen hoch, nutzte ein zweites Dummy-Paket, um Scanner-Traffic herauszurechnen, und zählte in drei Monaten über 30.000 echte Downloads. Installationsanweisungen für das falsche Paket hatten es in die README eines Forschungs-Repositorys von Alibaba geschafft. Das Paket war harmlos; das nächste ist es vielleicht nicht.

## Was sollte das Agenten-Harness erzwingen?

Die günstigste Kontrolle liegt im Moment der Installation. Ein Mensch, der `npm install` tippt, weiß meist warum; ein Agent, der es mitten in einer Aufgabe ausführt, hält nicht inne. Das Harness so konfigurieren, dass Installationen eine Freigabe brauchen, und dem Agenten eine schnelle Möglichkeit geben, ein Paket zu prüfen, bevor er es vorschlägt. Die allgemeine Idee von Guides und Sensoren beschreibe ich in [Harness Engineering](https://balazscsorba.com/de/blog/harness-engineering-coding-agents).

```
// .claude/settings.json: installs always ask, the lockfile is never edited by hand
{
  "permissions": {
    "ask": [
      "Bash(npm install:*)", "Bash(npm i:*)", "Bash(pnpm add:*)", "Bash(yarn add:*)",
      "Bash(pip install:*)", "Bash(uv add:*)", "Bash(uv pip install:*)", "Bash(npx:*)"
    ],
    "deny": ["Edit(package-lock.json)", "Edit(pnpm-lock.yaml)", "Edit(uv.lock)"]
  }
}
```

-   **Vor dem Vorschlag prüfen:** Ein Paket muss existieren, ein Quell-Repository, eine Release-Historie und echte Nutzung haben. Ein Name mit einem einzigen Release von letzter Woche verdient einen genaueren Blick, egal wie sicher das Modell klingt.
-   **Standardbibliothek und vorhandene Abhängigkeiten bevorzugen.** Eine Anweisung in AGENTS.md, das zu nutzen, wovon das Projekt schon abhängt, reduziert neue Namen an der Quelle.
-   **Den Agenten in einer Sandbox laufen lassen,** ohne Zugangsdaten, damit ein bösartiges Install-Skript nichts Wertvolles findet, wie in [Coding-Agenten und Secrets](https://balazscsorba.com/de/blog/coding-agent-secrets-hygiene) beschrieben.

## Welche Paketmanager-Einstellungen helfen?

Tool

Einstellung

Wirkung

npm

`min-release-age`, `before`

Nur Versionen installieren, die älter als N Tage oder vor einem Datum veröffentlicht sind

npm

`ignore-scripts`, `allowScripts`

Keine Install-Skripte ausführen oder nur für gelistete Pakete

pnpm

`minimumReleaseAge`

Mindestminuten seit Veröffentlichung, auch für transitive Abhängigkeiten; seit pnpm 11 standardmäßig 1440

uv

`exclude-newer`

Dateien ignorieren, die nach einem Zeitpunkt oder innerhalb einer Dauer wie 7 Tagen hochgeladen wurden

pip / uv

`--require-hashes`

Jede Anforderung gepinnt und gegen einen Hash geprüft

Man sollte klar sehen, was Mindestalter-Einstellungen leisten. Sie filtern danach, wann eine Version veröffentlicht wurde, was gegen brandneue Registrierungen und gegen kompromittierte Releases schützt, die meist binnen Stunden zurückgezogen werden. Die pnpm-Dokumentation hält fest, dass die meisten bösartigen Releases innerhalb einer Stunde entdeckt und entfernt werden. Ein halluzinierter Name, den ein Angreifer vor sechs Monaten registriert hat, ist alt genug, um durchzukommen. Die Verzögerung daher mit Installationsfreigabe und einer Prüfung kombinieren, wie lange das Paket selbst schon existiert.

```
# .npmrc
min-release-age=7
ignore-scripts=true

# pnpm-workspace.yaml
minimumReleaseAge: 10080   # 7 days, in minutes

# pyproject.toml
[tool.uv]
exclude-newer = "7 days"
```

## Was sollte die CI prüfen?

In der CI wird aus der stillen Änderung eines Agenten ein geprüfter Diff. Mit `npm ci`, `pnpm install --frozen-lockfile` oder `uv sync --locked` installieren, damit der Build scheitert, wenn Manifest und Lockfile nicht übereinstimmen. Dann neue Abhängigkeiten sichtbar machen: ein Job, der seit dem Basis-Branch hinzugekommene Pakete mit erstem Veröffentlichungsdatum und Repository-URL auflistet und bei nicht leerer Liste einen namentlichen Reviewer verlangt. In diesem Review wird aus _nie gehört_ eine Frage statt eines Merges.

**Bei Agenten-PRs zuerst neue Namen prüfen**

Bei einem Pull Request eines Agenten den Abhängigkeits-Diff vor dem Code lesen. Ein neues Paket ist eine Entscheidung mit langem Nachlauf; eine falsche Codezeile ist ein Bug, den man später behebt. Siehe [Umgang mit einer Flut von Agenten-PRs](https://balazscsorba.com/de/blog/ai-generated-pr-review-bottleneck).

## Wie lautet die kurze Checkliste?

1.  Installationsbefehle brauchen in jedem Agenten-Harness des Teams eine Freigabe.
2.  Agenten laufen in einer Sandbox ohne Produktionszugänge und langlebige Tokens.
3.  Install-Skripte sind standardmäßig aus, mit expliziter Allowlist.
4.  In npm, pnpm oder uv ist ein Mindestalter für Releases gesetzt.
5.  Die CI installiert nur aus dem Lockfile und markiert jede neue Abhängigkeit für einen namentlichen Reviewer.

## Quellen

1.  [Spracklen et al.: We Have a Package for You! A Comprehensive Analysis of Package Hallucinations by Code Generating LLMs (2024)](https://arxiv.org/abs/2406.10279)
2.  [Lasso Security, Bar Lanyado: Diving Deeper into AI Package Hallucinations (Mar 2024)](https://www.lasso.security/blog/ai-package-hallucinations)
3.  [npm Docs: config (min-release-age, before, ignore-scripts, allow-scripts)](https://docs.npmjs.com/cli/v11/using-npm/config)
4.  [pnpm: Dependency resolution settings (minimumReleaseAge)](https://pnpm.io/settings/dependency-resolution)
5.  [uv: Settings reference (exclude-newer, require-hashes)](https://docs.astral.sh/uv/reference/settings/)
6.  [pip documentation: Secure installs and hash-checking mode](https://pip.pypa.io/en/stable/topics/secure-installs/)

## Häufige Fragen

Was ist Slopsquatting?

Slopsquatting heißt, einen Paketnamen zu registrieren, den LLMs gern halluzinieren, damit von einem Modell erzeugter Code oder Installationsbefehle das Paket des Angreifers laden. Es ist eine Variante des Typosquattings, nur stammt der falsche Name vom Modell statt von einem Tippfehler.

Wie oft halluzinieren LLMs Paketnamen?

Spracklen et al. erzeugten mit 16 Modellen 576.000 Codebeispiele in Python und JavaScript und fanden, dass mindestens 5,2 % der Pakete kommerzieller Modelle und 21,7 % der Pakete offener Modelle nicht existierten, mit 205.474 eindeutigen halluzinierten Namen.

Ist das schon in der Praxis passiert?

Ja, als Test. 2024 fand der Lasso-Security-Forscher Bar Lanyado, dass Modelle ein nicht existierendes Python-Paket namens huggingface-cli empfahlen, lud ein leeres Paket unter diesem Namen hoch und zählte in drei Monaten über 30.000 echte Downloads. Installationsanweisungen dafür standen in einem Repository von Alibaba.

Schützt ein Mindestalter für Releases vor Slopsquatting?

Nur teilweise. Einstellungen wie npm min-release-age, pnpm minimumReleaseAge und uv exclude-newer blockieren sehr frisch veröffentlichte Versionen, was gegen neu registrierte Namen und kompromittierte Releases hilft. Ein Name, den ein Angreifer vor Monaten registriert hat, besteht die Prüfung.

Was sollte ich für Coding-Agenten konfigurieren?

Für jeden Installationsbefehl eine Freigabe verlangen, Agenten in einer Sandbox ohne Zugriff auf Secrets laufen lassen, Install-Skripte standardmäßig deaktivieren und die CI bei ungeprüften Abhängigkeitsänderungen scheitern lassen. Den Agenten ein Paket in der Registry prüfen lassen, bevor er es vorschlägt.

Geschrieben von Balázs Csorba

Senior Fullstack & AI Engineer in der Steiermark – über 10 Jahre Vue, Nuxt, Node.js und PHP, heute baue ich Werkzeuge für KI-Agenten.

[KI-Entwicklung & MCP-Server →](https://balazscsorba.com/de/expertise/ai-engineer)[Über mich →](https://balazscsorba.com/de/about)

## Weitere Artikel

-   [RAG-Poisoning: wie wenige Dokumente einen Assistenten steuern und wie man die Wissensbasis verteidigt](https://balazscsorba.com/de/blog/rag-poisoning-knowledge-base-attacks)
-   [Coding-Agenten und Secrets: Schlüssel aus Kontext, Logs und Commits](https://balazscsorba.com/de/blog/coding-agent-secrets-hygiene)
-   [KI-Coding-Tools und Betriebsrat: wann Nutzungsprotokolle als Überwachung gelten](https://balazscsorba.com/de/blog/works-council-ai-tools-austria-germany)
-   [DSFA für einen LLM-Support-Assistenten: ein Beispiel nach Art. 35 DSGVO](https://balazscsorba.com/de/blog/dpia-llm-feature-worked-example)

## Klingt nach dem, was du suchst?

Erzähl mir von deinem Projekt oder deiner Stelle – ich freue mich, von dir zu hören.

[Kontakt aufnehmen](mailto:contact@balazscsorba.com) [Auf LinkedIn vernetzen](https://www.linkedin.com/in/balazs-csorba)
