So verhinderst Du, dass pip ein bösartiges oder anfälliges Paket installiert

Es ist spät und Du bist voll im Flow. Du sagst Deinem KI-Assistenten, was Du willst – „Erstelle mir ein kleines Tool, das die Fotos von meiner Kamera abruft und sie nach Datum sortiert“ – und schaust zu, wie es losgeht. Es schreibt den Code, stellt fest, dass es ein oder zwei Bibliotheken braucht, um die Aufgabe zu erledigen, und installiert sie für Dich. Ein paar Zeilen scrollen im Terminal vorbei. Du liest sie nicht; warum solltest Du auch? Es funktioniert. Das ist der ganze Reiz des „Vibe-Codings“: Du beschreibst, es erstellt, Du bleibst im Flow.

Hier ist, was diese paar Zeilen beim Scrollen eigentlich bewirkt haben, denn niemand nimmt sich die Zeit, das zu erklären. Eine Bibliothek zu installieren bedeutet, dass Dein Computer auf ein riesiges öffentliches repository mit Code zugreift, der von Fremden geschrieben wurde, eines dieser Pakete herunterlädt und – das überrascht die meisten Leute – sehr oft ein Stück dieses Codes sofort und direkt ausführt, automatisch, als Teil der Installation. Nicht später, wenn Du die Bibliothek endlich nutzt. Genau in diesem Moment, mit welchen Zugriffsrechten auch immer Du gerade auf Deinem Rechner hast. Und es ist fast nie nur die eine Bibliothek, die Du angefordert hast: Moderne Software baut auf der Software anderer Leute auf, also zieht das gewünschte Paket still und leise eine Handvoll eigener Pakete mit sich, und jedes davon zieht weitere mit, bis – ohne dass Du jemals etwas davon ausgewählt hast – Dutzende von Paketen von Dutzenden von Fremden auf Deinem Computer liegen.

Fast alle sind in Ordnung. Aber es reicht schon eine einzige. Selbst eine einzige dependency, die drei oder vier Ebenen tief in etwas vergraben ist, von dem Du noch nie gehört hast, reicht schon aus – und die beliebte, vertrauenswürdige Bibliothek, für die Du Dich tatsächlich entschieden hast, kann völlig sauber sein, während eine ihrer versteckten dependencies vor ein paar Stunden still und leise übernommen wurde. Ein paar Stunden reichen völlig aus, denn das gefährlichste Paket ist meist das neueste, die Version, die heute Morgen veröffentlicht wurde: Die Sicherheitsdatenbanken, die Dich eigentlich warnen sollen, haben es einfach noch nicht erfasst. Zahlreiche Tools werden Dir morgen gerne mitteilen, dass Du etwas Bösartiges installiert hast – aber bis morgen ist es bereits ausgeführt worden. Nur sehr wenige Tools prüfen vorher, ob der eingebundene Code ausgeführt werden darf, und genau in dieser Lücke – zwischen der Veröffentlichung einer bösartigen Version und dem Zeitpunkt, an dem die Welt davon Notiz nimmt – lauern Supply-Chain-Angriffe.

pip-cve-gate ist eines der wenigen Programme, die diese Lücke schließen – und im weiteren Verlauf dieser Seite wird erklärt, wie es funktioniert und wie Du es für Deine eigenen Installationen einrichten kannst.

Das Problem, ganz einfach ausgedrückt

Ein pip install ist nicht passiv. Viele Pakete führen ihren eigenen Code während der Installation aus, sodass ein bösartiges Paket nicht darauf wartet, dass Du es importierst – es wird sofort ausgeführt, sobald es auf dem Rechner landet. Deshalb kann ein Scan, der nach der Installation läuft, wie pip-audit oder safety, zu spät kommen: Der Code befindet sich bereits auf der Festplatte und wurde möglicherweise schon ausgeführt.

Die gefährlichsten Pakete sind gleichzeitig auch die neuesten. Bei der TrapDoor-Kampagne im Mai 2026 war jedes bösartige PyPI-Paket zum Zeitpunkt der Meldung weniger als 72 Stunden alt – viel zu neu, als dass irgendeine CVE-Datenbank es bereits indexiert hätte. Ein Scanner, der nur veröffentlichte Sicherheitshinweise kennt, erkennt den Angriff, auf den es am meisten ankommt, nie.

Wem passiert das schon?

Jeder, der Python-Pakete installiert – also fast jeder, der Python programmiert: der Anfänger, der eine pip install-Zeile aus einem Tutorial einfügt, der Einzelentwickler, der noch eine weitere dependency einbindet, der datenschutzbewusste Entwickler, der nicht möchte, dass ein Cloud-Dienst seine dependency-Liste einsehen kann. Keiner von ihnen kann den gesamten Baum eines Pakets auf einen vier Stunden alten Sicherheitsverstoß hin überprüfen. Ein gate kann das.

Was „pip-cve-gate“ macht – und wie es funktioniert

pip-cve-gate bietet einen einzigen Befehl, safe-pip – einen direkten Ersatz für pip install. Es löst den gesamten Dependency-Baum auf, überprüft jedes Paket anhand von drei unabhängigen Signalen und übergibt erst dann an das eigentliche pip, wenn alles in Ordnung ist.

Wie ein Pre-Install CVE-Gate ein bösartiges Paket blockiertEin Install-Befehl wird von einem Gate abgefangen, das den gesamten Dependency-Baum und einen Freshness Hold prüft, bevor Code läuft, sodass ein bösartiges Paket vor der Installation blockiert wird.pip installführt Code beim Install ausCVE-Gateprüft den Baum+ Freshness HoldBlockiertbevor Code läuft
Die Prüfung rückt vor den Install: ein bösartiges oder zu frisches Paket erreicht Deinen Rechner nie.

Es durchsucht den gesamten Baum, nicht nur den Namen, den Du eingegeben hast

Das Paket, das Du installierst, ist selten alles – es zieht Abhängigkeiten nach sich, die wiederum weitere mit sich bringen. pip-cve-gate wertet zuerst diesen gesamten Baum aus, sodass ein Kompromittierungsprogramm, das drei Ebenen tief vergraben ist, genauso überprüft wird wie das von Dir angeforderte Paket.

Bekannte Schwachstellen, ermittelt mit OSV-Scanner

Die CVE-Abfrage ist Standard, daher erfindet pip-cve-gate das Rad nicht neu. Es delegiert die Aufgabe an Googles osv-scanner – die Engine hinter der OSV-Datenbank –, die genau die Versionen scannt, die es aufgelöst hat. Die Engine wird ausgeliehen, die Richtlinien bleiben in eigener Hand: pip-cve-gate behält die wichtigen Teile bei (Erkennung, Aktualität, den Malware-Feed und die unten genannte „Fail-Closed“-Regel).

Ein freshness hold für brandneue Releases

Standardmäßig wird jede release, die weniger als drei Tage alt ist, zurückgehalten. Das ist der Schutz, den pip-audit nicht bieten kann: Es blockiert das „Zero-Hour“-Fenster, bevor Sicherheitshinweise vorliegen. TrapDoor wäre allein aufgrund seines Alters gestoppt worden – ganz ohne CVE. Brauchst Du absichtlich eine aktuelle Version? --skip-fresh-hold lässt sie durch.

Ein Malware-Feed und eine „Fail-Closed“-Regel

Außerdem wird die OSSF-Liste „malicious-packages “ überprüft – also Pakete, die bereits als bösartig bekannt sind und nicht nur von Schwachstellen betroffen sind. Und wenn eine Überprüfung kein Ergebnis liefern kann – weil der osv-scanner fehlt oder ein Feed nicht erreichbar ist –, lehnt pip-cve-gate die Installation ab, anstatt zu raten. „Kann nicht überprüft werden“ bedeutet „nicht zulassen“. Wenn Du wirklich fortfahren musst, ist --allow-unknown die bewusste Opt-out-Option.

Installiere es und nutze es

Installieren

pip install pip-cve-gate

Oder mit Homebrew (macOS / Linux), das die Engine ebenfalls für Dich installiert:

brew install sharkyger/tap/pip-cve-gate

Anforderungen an die Engine (v0.3.0+): Die CVE-Prüfung wird von der externen Binärdatei osv-scanner durchgeführt. Homebrew formula installiert es automatisch; mit pip install fügst Du es selbst hinzu (brew install osv-scanner oder Dein (entspricht der Plattform). Fehlt es, bleibt das gate geschlossen – gib --allow-unknown ein, um es trotzdem zu installieren.

Benutz es

safe-pip funktioniert genau so wie pip install:

safe-pip install flask
safe-pip install "django>=4.2" "celery==5.3.6"
safe-pip install -r requirements.txt

Ein sauberer Lauf führt direkt zu „pip“; ein riskanter Lauf endet mit dem Grund:

[pip-cve-gate] BLOCKED — install aborted
  [CVE] 'somelib==1.2.3' has known vulnerabilities: GHSA-xxxx-yyyy-zzzz
  [FRESH_HOLD] 'dep==0.0.1' was published 1d ago (hold: 3d). Use --skip-fresh-hold to override.

Die vollständige Konfiguration, die unterstützten Plattformen und der Quellcode sind auf GitHub zu finden: github.com/sharkyger/pip-cve-gate (MIT).

FAQ

Ist die Installation von Python-Paketen sicher?

Die meisten sind es – aber PyPI hat keine obligatorische Überprüfung, und jeder kann dort etwas veröffentlichen. Das eigentliche Risiko geht von der kleinen Anzahl bösartiger oder kompromittierter Pakete aus, vor allem von ganz neuen, die noch von keiner Sicherheitsdatenbank als bedenklich eingestuft wurden. pip-cve-gate wurde entwickelt, um diese zu erkennen, bevor sie installiert werden.

Wie kann ich vor der Installation prüfen, ob ein pip-Paket bösartig ist?

Führe die Installation über safe-pip statt über pip durch. Dadurch wird der gesamte Dependency-Baum aufgelöst und jedes Paket anhand der OSV-Schwachstellen-Datenbank sowie des OSSF-Feeds für bösartige Pakete überprüft. Zu neue Releases, die noch nicht geprüft wurden, werden zurückgehalten – und die Installation wird gestoppt, bevor Code ausgeführt wird, falls irgendetwas verdächtig erscheint.

Wodurch unterscheidet sich pip-cve-gate von pip-audit?

pip-audit wird nachdem pip ein Paket bereits heruntergeladen und möglicherweise ausgeführt hat, ausgeführt. pip-cve-gate läuft vor der Installation über den gesamten Dependency-Baum hinweg und fügt einen „freshness hold“ sowie einen Malware-Feed hinzu – so kann es einen Zero-Hour-Angriff abwehren, der noch in keinem Sicherheitshinweis erfasst wurde.


pip-cve-gate ist eines der 5bats supply-chain gates – dieselbe Überprüfung vor der Installation gibt es auch für Composer , Homebrew und die Pakete, die ein KI-Assistent installiert .

Siehe Quelle, Konfigurations- und Installationsanleitung auf GitHub →