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⁺
- 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.
- 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.
- 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.
- Schulung von Entwicklern: Entwickler müssen über solche Sicherheitsrisiken informiert werden und die besten Methoden zu deren Vermeidung verstehen.
- 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
Hacker-News-Kommentare
Zusammenfassung ausgewählter Hacker-News-Kommentare
Missbrauchspotenzial von Online-Diensten
Googles Probleme mit Dateihosting
Vergleich mit GitHub
Nicht-Python-Projekte auf PyPI
Golang-Proxy und Checksum-Log
Erkundung von Domains
Bekanntes Problem
Modulsystem von CUE
Probleme mit Web-Caches
Cache-Control: max-age- oderVary: Cookie-Antworten senden oder ob zu viele ISPs Transitkosten zahlen.Probleme mit Proxy-Caches