senn-techsenn-tech
Security
Security2026-10-16· Von Franz Senn

Lieferkette in der Praxis: npm vertraute einem Repository-Namen, GitLab stürzt über einen regulären Ausdruck

In der Woche vom 12. Oktober 2026 sind zwei Meldungen erschienen, die auf den ersten Blick nichts miteinander zu tun haben: eine Schwachstelle in der Vertrauensprüfung von npm Trusted Publishing und eine Lücke mit der Höchstwertung CVSS 10.0 im CI/CD-Teil von GitLab. Beide treffen dieselbe Stelle, nämlich das, was eine Pipeline einem Repository glaubt. Dieser Beitrag beruht auf den Quellen unten. Eigene Messungen haben wir dazu nicht gemacht.

npm-Logo
npm ist die Paketregistry, aus der auch unsere Web-Projekte ihre Abhängigkeiten ziehen. (Quelle: Wikimedia Commons, Datei Npm-logo.svg, gemeinfrei, npm, Inc.)

npm: der Name blieb frei, das Recht ging mit

Trusted Publishing erlaubt, Pakete ohne gespeichertes Zugangstoken zu veröffentlichen: Die Registry vertraut einem Workflow in einem bestimmten GitHub-Repository. Bloom Security fand, dass npm dieses Repository über den Namen in der Form Besitzer/Repository und den Namen der Workflow-Datei band, nicht über die feste numerische ID, die GitHub vergibt. Wurde ein Repository umbenannt, übertragen oder gelöscht, oder ein Konto umbenannt oder gelöscht, war der alte Name frei. Ein Angreifer legte ihn neu an, fügte eine passende Workflow-Datei hinzu und bekam ein gültiges Veröffentlichungstoken für ein Paket, das ihm nicht gehört. Gestohlene Zugangsdaten brauchte er dafür nicht.

Nach Bloom waren mehr als 1.500 Pakete mit zusammen über 10 Millionen Downloads gefährdet, über eine Million im Monat. Ein Paket kam allein auf mehr als 200.000 monatliche Downloads. Bloom hat die Lücke in einem kontrollierten Test genutzt, um eine neue Version eines bestehenden Pakets zu veröffentlichen, und eine Ausnutzung in freier Wildbahn nicht beobachtet. Die Paketnamen veröffentlicht Bloom nicht.

So wurde ein Paketname übernommenMaintainer benenntRepository um oderlöscht esdie Bindung im Paket bleibtbestehenDer alte Name istfreinpm prüft nur den Namen,nicht die IDAngreifer legt denNamen neu anmit passender Workflow-DateiWorkflow läuftnpm stellt ein gültigesVeröffentlichungstoken ausNeue Paketversionunter dem Namen des Opfers
Fünf Schritte nach Bloom Security und CSO Online. Die Prüfung der numerischen ID hätte den vierten Schritt verhindert. (Quelle: Help Net Security und CSO Online, 13.10.2026)

Zum Zeitverlauf: Bloom meldete die Lücke nach Angabe von Help Net Security am 6. Juni 2026 über das HackerOne-Programm von GitHub, GitHub bestätigte sie am 9. Juni, und Bloom schreibt, mehrere Nachfragen seien danach unbeantwortet geblieben. Am 2. Oktober kündigte GitHub die Korrektur an: Nicht validierte Trusted-Publishing-Konfigurationen laufen 48 Stunden nach dem Anlegen ab und können dann nicht mehr zum Veröffentlichen berechtigen. Eine Konfiguration gilt nach dem ersten erfolgreichen Veröffentlichen als validiert. Außerdem lehnt npm jetzt Token ab, die über issue_comment-Ereignisse in GitHub Actions ausgestellt wurden. CSO Online weist darauf hin, dass der Fix die Gefahr durch nicht validierte Konfigurationen schließt, Maintainer ihre bestehenden Vertrauensbeziehungen aber weiter selbst prüfen müssen. Ob schon vor der Änderung gebundene Konfigurationen rückwirkend geschützt sind, sagt die Quelle nicht.

Bloom gibt an, dass KI-Agenten pro Endgerät und Monat etwa 70 Pakete installieren, auf Entwicklerrechnern rund 350, ohne transitive Abhängigkeiten. Das ist eine Herstellerangabe ohne unabhängige Nachprüfung.

GitLab: eine Zahl läuft über

CVE-2026-97229 ist ein Ganzzahlüberlauf im Compiler für reguläre Ausdrücke im CI/CD-Teil von GitLab, bewertet mit CVSS 10.0. Rapid7 beschreibt die Kette: Ein präparierter Ausdruck besteht die Prüfung, solange er als US-ASCII übersetzt wird. Wird er später gegen einen Repository-Pfad mit UTF-8-Zeichen ausgewertet, übersetzt Rubys Onigmo-Engine ihn neu, und ein Überlauf in der Berechnung der Programmgröße erzeugt ungültige Anweisungen. Daraus wird die Ausführung eines Betriebssystembefehls als Benutzer git. Rapid7 hat die Kette auf GitLab 19.4.1 CE mit aktivem ASLR nachgestellt und festgestellt, dass dieselbe Eingabe auf 19.4.2 nicht ausgeführt wird.

Behoben ist die Lücke in 19.2.8, 19.3.5 und 19.4.2 vom 12. Oktober 2026. Betroffen sind selbst betriebene Instanzen, GitLab.com ist bereits aktualisiert, und Kunden von GitLab Dedicated müssen nichts tun. heise zählt in demselben Release 24 geschlossene Lücken, die Beschreibung stützt sich dort auf sechs, eine davon kritisch.

Zur Einordnung der Einstufung „ohne Anmeldung": Nach Rapid7 muss der Angreifer eine .gitlab-ci.yml in ein Repository legen und einen Pfad mit UTF-8-Zeichen verwenden. Wo normale Konten öffentliche Projekte anlegen dürfen, genügt ein Konto, bei offener Selbstregistrierung entfällt auch das. Rapid7 hat eine Proof-of-Concept auf GitHub veröffentlicht und seinen Beitrag am 16. Oktober aktualisiert. Eine Ausnutzung in freier Wildbahn ist laut Rapid7 nicht bestätigt. Bis zum Update empfiehlt Rapid7, anonymen Zugriff auf öffentliche Projekte zu beschränken und nicht vertrauenswürdigen Benutzern das Anlegen oder Schreiben in öffentlichen Projekten zu untersagen. Das behebe den Fehler nicht, verringere aber die Angriffsfläche.

GitLab-Logo
Selbst betriebene GitLab-Instanzen sind von CVE-2026-97229 betroffen, GitLab.com ist bereits aktualisiert. (Quelle: Wikimedia Commons, Datei GitLab logo.svg, Lizenz MIT, GitLab)

Wie lange die Korrekturen brauchten

Tage von der Meldung bis zur Korrekturnpm Trusted Publishing (6.6. bis 2.10.)118curl HTTP/2-Lücke (15.9. bis 14.10.)290130
Eigene Rechnung aus den Daten der Quellen: Bloom meldete am 6. Juni, GitHub kündigte den Fix am 2. Oktober an. Beim curl-Advisory liegen zwischen Meldung am 15. September und Release am 14. Oktober 29 Tage. Für GitLab nennen die Quellen keinen Meldetermin. (Quelle: Help Net Security (npm), curl-Advisory CVE-2026-92392)

Was beide Fälle gemeinsam haben

In beiden Fällen entscheidet eine Zeichenkette aus dem Repository über das, was eine Pipeline darf. Bei npm ist es der Name, bei GitLab der Ausdruck in der Konfigurationsdatei. In beiden Fällen lag der Fehler in der Plattform und nicht in der Arbeit des Betreibers. Und in beiden Fällen bleibt nach dem Fix eine Aufgabe, die die Plattform dem Betreiber nicht abnimmt: bestehende Bindungen zu prüfen.

Was Betreiber prüfen

  1. npm-Maintainer: npm trust list ausführen und prüfen, ob jedes aufgeführte Repository noch zu einem gehört, das man kontrolliert. Bindungen an umbenannte oder übertragene Repositories löschen und neu anlegen. Vor dem Löschen eines Repositories zuerst die Bindung entfernen. Das empfiehlt Bloom.
  2. npm-Nutzer: in der Provenance-Angabe eines Pakets prüfen, dass das genannte Repository zum Projekt gehört. Wer Software für Kunden baut, legt außerdem fest, was Entwickler und KI-Agenten installieren dürfen (Empfehlung von Bloom).
  3. GitLab-Betreiber: Version prüfen, auf 19.2.8, 19.3.5 oder 19.4.2 aktualisieren und bis dahin das Anlegen öffentlicher Projekte einschränken.
  4. Wer eine andere Plattform für Git und CI betreibt, zum Beispiel Gitea, sucht dort nach derselben Klasse: Wo entscheidet eine vom Benutzer gesetzte Zeichenkette über Rechte der Pipeline? Eine Aussage dazu für Gitea ist in den Quellen nicht enthalten.

Was Foren dazu sagen

Wir haben auf Hacker News gesucht und zu beiden Fällen keine Einreichung gefunden (Suche am 16.10.2026). Das GitLab-Thema behandelt noted.lol, ein Blog für selbst betriebene Software, mit einer Zusammenfassung.

So haben wir geprüft

Wir haben am 16. Oktober 2026 die Berichte von Help Net Security und CSO Online zu npm gelesen, den Beitrag von Rapid7 zu GitLab (Stand 16.10.) und den Bericht von heise. Quellen weichen ab: Help Net Security nennt für den npm-Fix den 2. Oktober, ein anderer Bericht datiert die verschärften Regeln von GitHub auf den 13. Oktober. Wir folgen dem Datum 2. Oktober, das CSO Online dem npm-Team zuschreibt und mit dem GitHub-Changelog verknüpft. Auch die betroffenen GitLab-Versionen wurden in den Berichten unterschiedlich angegeben. Rapid7, Help Net Security und heise nennen 19.2.8, 19.3.5 und 19.4.2 als Fixes, das Advisory von GitLab selbst haben wir nicht gelesen.

Weiterführende Quellen

Primärquellen

Unabhängige Berichte

Herstellerangabe

Community

Fragen?
Bin ich als reiner npm-Nutzer betroffen?+

Nicht unmittelbar. Die Lücke lag bei Maintainern, die Trusted Publishing mit GitHub verbinden. Ein Nutzer ist betroffen, wenn ein Paket in seiner Lieferkette mit einer solchen Bindung veröffentlicht und der Name übernommen wurde. Bloom hat keine Ausnutzung beobachtet und veröffentlicht die Paketnamen nicht. Wer Pakete prüft, sieht in der Provenance-Angabe, aus welchem Repository sie stammen.

Ist die GitLab-Lücke ohne Anmeldung ausnutzbar?+

Nach GitLab mit CVSS 10.0 ohne Rechte. Nach Rapid7 braucht der Angreifer aber ein Repository, in dem er eine .gitlab-ci.yml mit dem Ausdruck ablegt, und einen Repository-Pfad mit UTF-8-Zeichen. Auf Instanzen, die das Anlegen öffentlicher Projekte erlauben, genügt ein normales Konto, bei offener Selbstregistrierung entfällt auch das.

Gibt es einen öffentlichen Exploit für GitLab?+

Rapid7 verweist in seinem Beitrag, aktualisiert am 16.10.2026, auf eine Proof-of-Concept auf GitHub. Eine Ausnutzung in freier Wildbahn ist nach derselben Quelle nicht bestätigt. Das Update auf 19.2.8, 19.3.5 oder 19.4.2 ist deshalb nicht mehr auf den nächsten Patchzyklus zu schieben.