2 Punkte von GN⁺ 2024-05-26 | 1 Kommentare | Auf WhatsApp teilen

Problem

  • Letzte Nacht wurde beim Durchsuchen des Inhalts der Checksum-Datenbank von Go ein interessantes Ergebnis entdeckt.
  • Das Ausführen des Befehls sqlite> select path, count(path) from modules group by path order by count(path) desc; ergab:
    • github.com/homebrew/homebrew-core|39438
    • github.com/Homebrew/homebrew-core|30896
    • github.com/concourse/concourse|25372
    • github.com/openshift/release|24065
    • github.com/cilium/cilium|22138
  • Von Homebrew ist bekannt, dass es Ruby verwendet, daher war die Verbindung zu Go rätselhaft.
  • Auch die GitHub-Sprachstatistik bestätigte dies.
  • Das Repository wurde geklont, um nach Go-bezogenen Dateien (go.mod oder Go-Quelldateien) zu suchen, doch es wurde nichts gefunden.

Untersuchung

  • Ein neuer Tag begann, und die Neugier verlangte nach einer Antwort.
  • Wenn das Git-Repository nichts mit Go-Code zu tun hat, stellte sich die Frage, wie es in der Go-Checksum-Datenbank auftauchen konnte.
  • Es wurde festgestellt, dass proxy.golang.org der Standard-Modul-Proxy ist und sum.golang.org die Checksum-Datenbank.
  • Beim Lesen der Go-Dokumentation wurde klar, dass die Checksum-Datenbank versucht, ein Modul vom Ursprungsserver zu holen, wenn eine Modulversion noch nicht im Log verzeichnet ist.
  • Um zu prüfen, ob ein neues Go-Modul-Repository zur Checksum-Datenbank und zum Proxy hinzugefügt wird, wurde der lookup-Endpunkt aufgerufen.
  • Nach dem Erstellen eines neuen Go-Moduls und dem Hochladen in ein GitHub-Konto wurden zwei Varianten des lookup-Befehls ausprobiert, beide führten jedoch zu Fehlern.
  • Anschließend wurde die korrekte Pseudo-Version erzeugt und die Checksum-Datenbank erneut abgefragt, um zu prüfen, ob das Modul heruntergeladen worden war.
  • Durch Abfragen des Proxys und Herunterladen der Modul-zip-Datei wurde nachgewiesen, dass sich beliebige Daten in der Go-Infrastruktur speichern lassen.

Missbrauchsmöglichkeiten

  • Es könnte genutzt werden, um Download-Beschränkungen auf Entwicklerrechnern und CI/CD-Servern zu umgehen.
  • Malware könnte Payloads speichern und sie bei Bedarf vom Proxy abrufen.
  • Ein Denial-of-Service-(DoS)-Angriff auf proxy.golang.org könnte möglich sein.
  • Ein Command-and-Control-(C2)-System ließe sich leicht implementieren.

Fazit

  • Es wurde verstanden, wie der Prozess der Checksum-Datenbank funktioniert.
  • Derzeit scheint es kein schwerwiegendes Problem für die Go-Infrastruktur zu sein, doch Missbrauch ist möglich.
  • Es bleibt die weiterführende Frage, warum sich Nicht-Go-Projekte in der Datenbank befinden.
  • Diese Untersuchung hat viele Ideen geliefert, die weiter erforscht werden sollen.

Meinung von GN⁺

  1. Sicherheitslücke: Dieser Artikel weist auf eine Sicherheitslücke in der Checksum-Datenbank von Go hin, durch die sich beliebige Daten speichern lassen. Das könnte einen einfachen Verteilungsweg für Schadsoftware schaffen.
  2. Verbesserungsbedarf: Um Sicherheit und Integrität der Go-Infrastruktur zu stärken, müssen die Zugriffskontrollen für die Checksum-Datenbank und die Proxy-Server verbessert werden.
  3. Integration anderer Sprachen: Es muss geklärt werden, warum Nicht-Go-Projekte in der Go-Checksum-Datenbank enthalten sind, und es sind zusätzliche Validierungsschritte nötig, um dies zu verhindern.
  4. Schulung von Entwicklern: Entwickler müssen über solche Sicherheitsrisiken informiert werden und die besten Methoden zu deren Vermeidung verstehen.
  5. Alternative Lösungen: Checksum-Datenbanken und Proxy-Server anderer Sprachen mit ähnlicher Funktionalität könnten verglichen werden, um Anhaltspunkte für Verbesserungen der Go-Infrastruktur zu gewinnen.

1 Kommentare

 
GN⁺ 2024-05-26
Hacker-News-Kommentare

Zusammenfassung ausgewählter Hacker-News-Kommentare

  • Missbrauchspotenzial von Online-Diensten

    • Jeder Online-Dienst kann letztlich für Command-and-Control, Urheberrechtsverletzungen oder das Hosting von CSAM missbraucht werden. Solche Fälle gibt es bereits bei Twitter, Telegram und der PGP-Schlüsselinfrastruktur.
  • Googles Probleme mit Dateihosting

    • Google hat häufig mit dem Hosting bösartiger Dateien zu tun, daher ist es möglich, dass das Go-Team mit GCP und Drive zusammengearbeitet hat. Das unterscheidet sich nicht wesentlich von anderen Endpunkten, die Google bereits zulässt.
  • Vergleich mit GitHub

    • Manche meinen, dass es sich kaum davon unterscheidet, Dateien auf GitHub hochzuladen. Auch dort kann man mit einem Account beliebige Daten speichern.
  • Nicht-Python-Projekte auf PyPI

    • Auf PyPI gibt es auch Nicht-Python-Projekte, und es braucht die Möglichkeit, Wheels (kompilierte Binärdateien) zu verteilen, falls Nutzer Bibliothekscode nicht selbst kompilieren können. Das ist auch für in C und Golang geschriebenen Code möglich.
  • Golang-Proxy und Checksum-Log

    • Jemand hat ausprobiert, mit dem Golang-Proxy und sumdb die Checksummen beliebiger URLs transparent zu protokollieren.
  • Erkundung von Domains

    • Beim Durchsuchen einer bestimmten Domain war das meiste von dem enthalten, was erwartet wurde.
  • Bekanntes Problem

    • Es wurde ein Link zu einem bekannten Problem in Golang geteilt.
  • Modulsystem von CUE

    • Das Modulsystem von CUE befindet sich im Rollout. Man mag zwar das MVS von Go, aber es ist auf OCI-Infrastruktur aufgebaut. Wer sich für Dependency-Management-Systeme interessiert, kann die verlinkten Ressourcen ansehen.
  • Probleme mit Web-Caches

    • Die W3C hat praktisch alles im Web cachebar gemacht, aber warum es dennoch so wenige Proxy-Caches für allgemeine Zwecke gibt, bleibt fraglich. Es stellt sich die Frage, ob Publisher unnötig kurze Cache-Control: max-age- oder Vary: Cookie-Antworten senden oder ob zu viele ISPs Transitkosten zahlen.
  • Probleme mit Proxy-Caches

    • Dass ein Proxy Nicht-Go-Repositories cached, könnte Verschwendung sein, aber wenn man ihn Go-Repositories cachen lässt, kann man auch beliebige Daten speichern. Das wird nicht als großes Problem angesehen.