Zum Inhalt springen

XSS in SourceHut-Build-Logs ermöglichte die Übernahme von Konten

Ein präpariertes Build-Log konnte Skript im Browser von SourceHut-Nutzern ausführen. ansi2html 1.9.4 behebt den Fehler CVE-2026-92973, der die Versionen 1.7.0 bis 1.9.3 betraf.

Von Tech AI Wire Team

3 Min. Lesezeit

XLinkedIn
The GitHub release page for ansi2html v1.9.4, listing the CVE-2026-92973 fix "osc8: ensure proper escaping" under Fixes.
Foto: GitHub, pycontribs/ansi2html

Ein Sicherheitsforscher hat eine Lücke offengelegt, über die ein präpariertes Build-Log SourceHut-Konten übernehmen konnte. Der Fehler steckte in ansi2html, einer Python-Bibliothek, die farbige Terminalausgabe in HTML umwandelt, und wird als CVE-2026-92973 geführt. Jedes Projekt, das nicht vertrauenswürdige Logs mit ansi2html in den Versionen 1.7.0 bis 1.9.3 darstellt, ist genauso betroffen.

SourceHut ist eine gehostete Software-Forge, ein Dienst für Git-Repositorys, Mailinglisten und Continuous Integration. Sein CI-Dienst builds.sr.ht führt Jobs aus und zeigt deren Logs im Browser. Der Forscher, der als Arusekk veröffentlicht, beschrieb den Angriff am 23. September 2026.

Wie ein Build-Log zum Angriff wurde

Der Angriff nutzte Cross-Site-Scripting, kurz XSS. Dabei bringt man eine Website dazu, JavaScript eines Angreifers im Browser eines Besuchers auszuführen, mit dessen angemeldeter Sitzung.

Terminals verstehen Escape-Sequenzen, versteckte Codes in der Textausgabe. Die meisten setzen Farben. Eine Art, OSC 8, macht aus einem Textstück einen anklickbaren Hyperlink. ansi2html übersetzt diese Codes in HTML, damit ein Log auf einer Webseite gleich aussieht.

Laut dem Bericht maskierte ansi2html das Linkziel in OSC-8-Sequenzen nicht korrekt. Ein Job konnte eine Sequenz ausgeben, deren "Link" aus dem HTML-Attribut ausbrach und neue hinzufügte, darunter einen Event-Handler, der Code ausführt. Wer die Log-Seite dieses Jobs öffnete, führte ihn aus.

Was ein Angreifer tun konnte

Das eingeschleuste Skript konnte das CSRF-Token der Seite lesen, schreibt der Forscher. Ein CSRF-Token ist das Geheimnis, mit dem eine Website bestätigt, dass eine Anfrage wirklich aus der eigenen Sitzung des Nutzers stammt. Damit konnte das Skript Build-Jobs im Namen des Opfers einreichen und an dessen Deploy-Keys gelangen, die Zugangsdaten, mit denen Jobs Code pushen oder Releases ausliefern.

Betroffene SoftwareVerwundbare Versionen
ansi2html1.7.0 bis ausschließlich 1.9.4
builds.sr.ht0.40.0 bis ausschließlich 0.105.1

Der Bericht nennt keine dokumentierte Ausnutzung in freier Wildbahn.

Der Zeitplan der Offenlegung

SourceHut reagierte schnell. Die Korrektur in der Upstream-Bibliothek dauerte einen Monat länger, und die öffentliche Offenlegung wartete, bis beide verfügbar waren.

Datum (2026)Ereignis
1. AugustFehler gemeldet
4. AugustAbhilfe auf builds.sr.ht ausgerollt
2. Septemberansi2html 1.9.4 mit der Korrektur veröffentlicht
17. SeptemberCVE-2026-92973 vergeben
23. SeptemberÖffentlicher Bericht veröffentlicht

Die Release Notes zu ansi2html 1.9.4 auf GitHub führen die Korrektur als "osc8: ensure proper escaping", Pull Request 263. Arusekk schrieb den Patch, und Maintainer hartwork genehmigte ihn.

Warum ein Audit der Abhängigkeit nicht reichte

Der Forscher macht einen Punkt, der über diesen Fehler hinausgeht. Die Lücke steckt in Code, der sich von Release zu Release ändert, also kann eine einmalige Prüfung sie nicht erfassen. "Note how even carefully auditing ansi2html would not save SourceHut, unless redone on every bump", heißt es im Bericht.

Eine Abhängigkeit, die bei Ihrer Prüfung sicher war, kann später eine neue Funktion bekommen. Ein gewöhnliches Versions-Update bringt diese Funktion dann samt jedem Fehler darin direkt in Ihr Produkt.

SourceHut war dieses Jahr wegen seiner Beitragsregeln in den Nachrichten, darunter sein Verbot von LLM-gestütztem Code und Tickets. Diese Offenlegung erinnert daran, dass auch der eigene Code des Dienstes eine Lieferkette hat wie der aller anderen.

Was das für Entwickler bedeutet

Aktualisieren Sie ansi2html überall, wo Sie es nutzen, auf 1.9.4 oder neuer. Durchsuchen Sie Ihre Lockfiles und Container-Images, nicht nur Ihre direkten Abhängigkeiten, denn die Bibliothek kommt oft als Abhängigkeit eines Test- oder CI-Werkzeugs mit. pip show ansi2html in jeder Umgebung zeigt Ihnen die Version, die Sie tatsächlich ausliefern.

Behandeln Sie Build-Ausgabe als feindliche Eingabe. Ein CI-Log enthält, was auch immer der Code eines Pull Requests ausgeben wollte. Wenn Ihr eigenes Dashboard Logs als HTML darstellt, prüfen Sie, dass jeder Attributwert maskiert wird. Ergänzen Sie eine Content Security Policy, die Inline-Event-Handler blockiert, damit eine vergessene Maskierung nicht zur Codeausführung wird.

Prüfen Sie, was eine gestohlene Sitzung erreichen könnte. Hier gab ein einziger Seitenaufruf die Macht preis, Jobs zu starten und Deploy-Keys zu lesen. Beschränken Sie Deploy-Keys auf einzelne Repositorys und rotieren Sie alle, die Sie nicht zuordnen können.

Lesen Sie schließlich Changelogs erneut, wenn eine Render- oder Parser-Bibliothek eine Funktion hinzufügt. Neue Unterstützung für Escape-Sequenzen, neues Markup oder neue Link-Behandlung sind genau die Änderungen, die einen zweiten Blick verdienen.

Quellen

  1. SourceHut account takeover via build logs - arusekk.pl
  2. ansi2html v1.9.4 - GitHub

Ähnliche Artikel

Radicles Offenlegungsseite zu einer Schwachstelle im Netzwerkprotokoll, datiert 23.09.2026, unter einem violetten illustrierten Banner.
Dev-Tools

Radicle bis 1.10.3 sendet private Repos im Klartext

Jede Radicle-Version bis 1.10.3 überträgt Repository-Daten unverschlüsselt und lässt Angreifer vertrauenswürdige Peers imitieren. Ein Fix fehlt noch; Radicle 2.0 ändert das Netz.