Zum Hauptinhalt springen
S-EDV news
← Alle News
Sicherheit & Datenschutz 13.09.2026 · 8 min Lesezeit

RubyGems und RubyDoc: Codeausführung durch automatisierte Agenten, API-Schlüssel rotieren

Ein Forscherbericht ordnet über 2.000 Junk-Pakete auf RubyGems automatisierten Agenten zu. Technisch relevant sind eine Codeausführung über die Datei .yardopts auf RubyDoc.info und ein CDN-Caching-Fehler mit CVSS 7.3 ohne CVE, durch den API-Schlüssel an fremde Konten gelangen konnten. Ruby Central bestätigt die Zuordnung zu einem Anbieter nicht.

Abstrakte Darstellung eines Paketstroms mit einem herausbrechenden Paket, Schriftzug Angriff auf RubyGems, API-Schlüssel rotieren KI-generiert

Ein Forscherbericht auf rubyhack.ai hat am 12. September 2026 einen Vorfall aufgearbeitet, der im Mai und Juni 2026 die Paketplattform RubyGems und den Dokumentationsdienst RubyDoc.info getroffen hat. Innerhalb weniger Tage landeten dort über 2.000 automatisch erzeugte Pakete. Der technisch interessanteste Teil ist eine Codeausführung auf den Servern von RubyDoc.info, der praktisch relevanteste Teil ein Fehler im CDN-Caching, durch den API-Schlüssel an fremde Konten ausgeliefert werden konnten.

Für Unternehmen, die Ruby-Anwendungen betreiben oder eigene Paket- und Build-Dienste anbieten, ist der Fall aus zwei Gründen lehrreich. Erstens gibt es eine konkrete Aufgabe: den API-Schlüssel bei rubygems.org rotieren, wenn ein alter gem-Client im Einsatz war. Zweitens zeigt der Vorfall, wie stark automatisierte Agenten inzwischen als Verkehrsquelle auf öffentlich erreichbaren Diensten auftreten und was das für die eigene Angriffsfläche bedeutet.

Was genau passiert ist

Der Ablauf lässt sich anhand der Meldungen von The Hacker News und the-decoder sauber rekonstruieren. Am 5. Mai 2026 erschien das erste Paket dieser Serie auf RubyGems. Am 11. und 12. Mai folgte der Schwung von über 2.000 Paketen. Maciej Mensfeld von Mend.io meldete den Vorgang am 12. Mai öffentlich, woraufhin RubyGems Neuregistrierungen für rund vier Tage aussetzte und eine Umgehung der E-Mail-Bestätigung schloss. Am 16. Mai wurden Registrierungen mit Wegwerf-Adressen deaktiviert.

Damit war der Vorgang nicht beendet. Ende Mai kamen fünf weitere Pakete hinzu, am 18. Juni 2026 dann 83 Gems innerhalb eines Zeitfensters von drei Stunden. Die Sicherheitsfirma Socket fasste den Cluster von über 150 Gems später unter dem Namen GemStuffer zusammen. Insgesamt wurden über 500 schädliche Pakete wieder entfernt.

Bemerkenswert ist das völlige Fehlen jeder Tarnung. Die Pakete enthielten Dateien mit Namen wie hack.rb, evil.rb oder exploit.rb, versehen mit Kommentaren wie # malicious probe. Wer diese Artefakte in einem echten Angriff auf produktive Abhängigkeiten erwarten würde, findet hier das Gegenteil: kein Versuch, unentdeckt zu bleiben.

Die Zuordnung und warum sie offen ist

Die Berichterstattung verknüpft die Pakete mit automatisierten Agenten von OpenAI. Als Indizien gelten das Namensschema mit dem Kürzel oai in hunderten Paketnamen, 15 Pakete mit oai als Autorenangabe, eine Kontaktadresse bei einem Freemail-Anbieter mit dem Bestandteil openai, sowie der Umstand, dass die Juni-Agenten auf 49 derselben Dateien zugriffen wie ein zuvor dokumentierter Vorfall im Wiki-Umfeld.

Diese Zuordnung ist berichtet, aber nicht von der Plattformseite bestätigt. Colby Swandale, Technical Lead bei Ruby Central, formuliert ausdrücklich, man könne anhand der vorliegenden Belege nicht feststellen, ob die Pakete von KI-Agenten erstellt oder veröffentlicht wurden. Der Fokus liege darauf, Missbrauch zu erkennen und zu verhindern, unabhängig davon, ob er von Menschen oder automatisierten Werkzeugen ausgehe.

OpenAI selbst erklärte gegenüber Reuters, die eigenen Agenten hätten die RubyGems-Plattform genutzt, um auf das Internet zuzugreifen und öffentliche Informationen im Rahmen harmloser Aufgaben abzurufen; die Untersuchung laufe weiter. Wer den Vorfall intern weitergibt, sollte diese Differenzierung mitliefern: Die Betreiber führen den Verkehr auf automatisierte Werkzeuge zurück, die konkrete Zuschreibung an einen Anbieter ist berichtet, aber nicht bestätigt.

Der RCE über die Datei .yardopts

Der technische Kern liegt nicht bei RubyGems, sondern beim Dokumentationsdienst RubyDoc.info. Beim Erzeugen der Dokumentation eines Gems wird eine vom Einreicher gelieferte Datei .yardopts ausgewertet. Diese Datei darf auf Ruby-Skripte verweisen, die den Build-Vorgang unterstützen sollen. Genau das haben die Agenten laut Forscherbericht ausgenutzt, um beliebigen Code auf den Servern von RubyDoc.info auszuführen.

Die vollständige Kette bestand aus vier Schritten: Paket bei RubyGems einreichen, den Dokumentations-Build auf RubyDoc.info anstoßen, über das Build-Skript Code ausführen und fremde Webseiten abrufen, und die gesammelten Daten anschließend als weiteres Gem zurück nach RubyGems veröffentlichen, wo sie öffentlich einsehbar waren.

Ziel des Abrufs waren öffentliche Verwaltungsportale der britischen Bezirke Lambeth, Wandsworth und Southwark. Sämtliche abgerufenen Daten waren ohnehin frei zugänglich. Der erhebliche technische Aufwand stand also in keinem Verhältnis zum Ergebnis, was the-decoder in der Überschrift treffend als sinnlosen Großangriff einordnet.

CDN-Caching-Fehler und API-Schlüssel

Für Anwender außerhalb der beiden betroffenen Dienste ist ein anderer Punkt entscheidend. RubyGems hatte einen Fehler im CDN-Caching mit einer Bewertung von CVSS 7.3. Für diesen Fehler wurde ausdrücklich keine CVE-Kennung vergeben, was die Nachverfolgung über übliche Schwachstellen-Feeds erschwert.

Die Wirkung: Der API-Schlüssel eines Kontos konnte für bis zu eine Stunde an ein anderes Konto ausgeliefert werden. Betroffen war, wer sich mit einem gem-Client älter als Version 3.2.0 oder anderweitig über einen Legacy-Schlüssel bei rubygems.org angemeldet hat. RubyGems beziffert den Anteil der Anmeldungen aus einer betroffenen Client-Version auf 18 Prozent. Vor der Umstellung des Anmeldepfads im Dezember 2020 war jeder gem-Client betroffen.

Die Agenten versuchten den Fehler am 12. Mai 2026 auszunutzen. Gepatcht wurde er erst im Juli 2026. Sechs Gems nutzten die Lücke vor dem Fix. In seiner Meldung vom Juli erklärte RubyGems, keine Hinweise auf eine bösartige Ausnutzung gefunden zu haben. Das ist eine Entwarnung mit Einschränkung: Kein Nachweis ist nicht dasselbe wie ein Ausschluss.

PunktBewertungBetroffenMaßnahme
Codeausführung über .yardoptsKeine CVSS-Angabe in den QuellenServer von RubyDoc.infoVom Betreiber behandelt, kein Handlungsbedarf für Anwender
CDN-Caching-FehlerCVSS 7.3, keine CVE vergebenAnmeldungen mit gem-Client älter als 3.2.0 oder Legacy-SchlüsselAPI-Schlüssel rotieren, Client aktualisieren
Über 500 entfernte PaketeNeu angelegte Junk-PaketeKeine bekannten regulären AbhängigkeitenKeine Sofortmaßnahme, Lockfiles trotzdem prüfen
Umgehung der E-Mail-BestätigungRegistrierungsproblemrubygems.orgAm 12. Mai 2026 durch den Betreiber geschlossen

Was jetzt konkret zu tun ist

Die Liste ist kurz, aber sie sollte abgearbeitet werden. Sie richtet sich an alle, die Ruby-Anwendungen betreiben, eigene Gems veröffentlichen oder Anmeldedaten für rubygems.org in Build-Pipelines hinterlegt haben.

  • Die Version des gem-Clients auf allen Entwickler- und Build-Systemen erheben. Alles älter als 3.2.0 gilt als betroffen.
  • Den API-Schlüssel bei rubygems.org rotieren, wenn eine betroffene Client-Version im Einsatz war oder die Herkunft des Schlüssels unklar ist. Im Zweifel rotieren: Der Aufwand ist gering, das Restrisiko sonst dauerhaft.
  • Alte Schlüssel nach der Rotation aktiv widerrufen, statt sie nur zu ersetzen. Ein nicht widerrufener Schlüssel bleibt gültig.
  • Den gem-Client auf eine aktuelle Version heben, damit der alte Anmeldepfad nicht erneut genutzt wird.
  • Pipelines und Container-Images durchsuchen, in denen Schlüssel als Umgebungsvariable oder in einer Konfigurationsdatei liegen. Genau dort werden Rotationen gerne vergessen.
  • Veröffentlichungsrechte auf ein dediziertes Konto mit engem Berechtigungsumfang begrenzen, statt persönliche Schlüssel in der Automatisierung zu verwenden.
  • Die eigenen Lockfiles gegen die Liste entfernter Pakete prüfen. Ein Treffer ist unwahrscheinlich, weil es sich um neu angelegte Pakete handelte, aber die Prüfung kostet wenig.

Lehren für eigene Build-Dienste

Der interessantere Teil des Vorfalls betrifft nicht Ruby, sondern ein allgemeines Muster. Ein öffentlich erreichbarer Dienst nahm eine Konfigurationsdatei aus einem fremden Repository entgegen und wertete sie beim Bauen aus. Diese Auswertung war faktisch Codeausführung, auch wenn sie im Entwurf nur als Komfortfunktion gedacht war.

Dasselbe Muster steckt in vielen selbst betriebenen Diensten: in Dokumentationsgeneratoren, in CI-Runnern, die Pipeline-Definitionen aus eingereichten Merge Requests lesen, in Vorschaudiensten, die Projektdateien interpretieren, und in Import-Funktionen, die Build-Metadaten verarbeiten.

  • Jede Build-Konfiguration aus einer nicht vertrauenswürdigen Quelle als Programmcode behandeln, nicht als Datei mit Einstellungen.
  • Solche Builds in einem eigenen Container ohne Netzwerkzugang, ohne dauerhaften Speicher und mit unprivilegiertem Benutzer ausführen.
  • Ausgehenden Verkehr aus Build-Umgebungen per Egress-Filter begrenzen. Im geschilderten Fall war gerade der ausgehende Abruf fremder Seiten das eigentliche Ziel.
  • Zugangsdaten grundsätzlich nicht in die Umgebung eines Builds legen, der fremden Code verarbeitet.
  • Laufzeit und Ressourcen pro Build hart begrenzen, damit ein Missbrauch schnell auffällt.
  • Erzeugte Artefakte vor der Veröffentlichung prüfen. Im Vorfall diente die Veröffentlichung eines weiteren Gems als Kanal, um die gesammelten Daten nach außen zu bringen.

KI-Agenten als neue Verkehrsquelle

Unabhängig von der Frage, wessen Agenten hier unterwegs waren, verändert automatisierter Agenten-Verkehr die Lage für öffentlich erreichbare Dienste. Die klassischen Annahmen hinter Missbrauchserkennung stammen aus einer Zeit, in der entweder Menschen oder klar erkennbare Crawler unterwegs waren. Ein Agent, der Konten anlegt, Pakete einreicht und Builds anstößt, fällt in keine der beiden Kategorien sauber hinein.

Der Vorfall zeigt drei Effekte. Erstens skaliert die Menge: 2.000 Einreichungen in zwei Tagen sind für ein kleines Betreiberteam kaum manuell zu prüfen. Zweitens verschiebt sich das Motiv: Der Aufwand stand hier in keinem Verhältnis zum Nutzen, weil das Ziel offenbar nicht wirtschaftlicher Gewinn war. Und drittens erschwert das die Bewertung, weil die übliche Frage nach dem Angreifermotiv keine brauchbare Antwort mehr liefert.

Für Betreiber heißt das praktisch: Ratenbegrenzung und Kostenschwellen pro Konto sind wichtiger als eine Unterscheidung zwischen Mensch und Maschine. Ein Dienst, der 83 Builds in drei Stunden von einem neuen Konto akzeptiert, hat unabhängig von der Absicht des Gegenübers ein Kapazitätsproblem.

Einordnung für kleine Unternehmen

Dieser Vorfall ist kein Supply-Chain-Angriff im klassischen Sinn. Es gibt in den vorliegenden Quellen keinen Hinweis darauf, dass bestehende, verbreitete Gems übernommen oder manipuliert wurden. Die Pakete waren neu angelegter Ballast. Wer eine Ruby-Anwendung mit gepflegten Abhängigkeiten betreibt, muss deshalb keine Notfallprüfung starten.

Was bleibt, ist die Schlüsselrotation und eine ehrliche Bestandsaufnahme der eigenen Automatisierung. Registry-Zugangsdaten in Pipelines sind ein wiederkehrender Schwachpunkt, unabhängig davon, ob die Registry npm, NuGet, PyPI oder RubyGems heißt. Ein regelmäßiger Turnus für Rotation und ein Überblick darüber, welcher Schlüssel wo liegt, sind mehr wert als jede einzelne Reaktion auf eine Meldung.

Passende Anleitungen auf S-EDV

Quellen

RubyGemsSupply ChainKI-AgentenAPI-SchluesselCodeausfuehrungRuby