Source: tip-o-deincognito (GlassWorm: Part 2). Ce suivi technique couvre 72 h supplémentaires de monitoring de l’infostealer macOS GlassWorm, détaillant la rotation d’infrastructure C2 via mémos Solana, la persistance des panels de gestion, la poursuite des injections GitHub et une mise à jour des IoCs.
-
L’opérateur a publié trois mémos Solana le 13 mars menant à de nouveaux C2, a fait tourner les chemins de payload et maintient plusieurs serveurs C2 Socket.IO actifs en parallèle. Malgré un kill switch HTTP (process.exit(0)), les serveurs continuent l’« inventory-only mode » et les injections GitHub se sont poursuivies jusqu’au 14 mars. Le DHT (ex-« push-like » de config) a été abandonné, au profit de mémos Solana publics.
-
Observations clés: quatre C2 Socket.IO live acceptent le même token _partner et renvoient des commandes identiques; un kill switch actif côté Socket.IO coupe les connexions « doublons »; un module « TCP tunnel » sans dépendances natives a brièvement remplacé l’ancien proxy WebRTC; l’exfiltration reste en clair (HTTP, sans TLS). Tous les C2 observés tournent chez Vultr (AS20473), majoritairement en France, avec un serveur US repéré par scan.
-
Injections GitHub: 28 dépôts publics infectés (3 vagues) via un steganogramme Unicode inséré en fin de fichiers JS/TS (pattern codePointAt + 0xFE00). Les payloads diffèrent par l’obfuscation et le chiffrement (AES-256-CBC pour les vagues 1/2), mais conservent une logique identique à l’échantillon MalwareBazaar. Les tokens GitHub volés (VS Code, git-credentials, etc.) alimentent une « inventaire » central de l’opérateur, qui effectue ensuite les injections depuis son infrastructure. Deux fonctions (photo/OpenVPN) ont été désactivées dans certaines builds; une exclusion CIS n’apparaît que dans la vague 2.
-
Profil et habitudes: activité corrélée à UTC+2 (majoritairement heures ouvrées), indices de chaîne logicielle commune (mêmes artefacts esbuild, même _partner, mêmes fingerprints Express/Helmet sur :5000). Les mémos Solana de deux wallets (anciens/récents) tracent une opération continue depuis octobre 2025; financement initial via ChangeNOW.
IoCs principaux 🧩
- C2 actuels/socket.io: 217[.]69[.]0[.]159:80/4789/5000 (courant, kill switch sur :80), 217[.]69[.]11[.]99:4789 (live), 217[.]69[.]3[.]51:4789 (live, ancien wallet), 45[.]32[.]150[.]251:4789 (Vultr US, live)
- Autres hôtes: 45[.]76[.]44[.]240 (staging, mort), exfil: 208[.]76[.]223[.]59 (down ~Mar 12), 208[.]85[.]20[.]124 (Express, 404 en GET)
- Wallets Solana: BjVeAjPrSKFiingBn4vZvghsGj9KCE8AJVtbc9S8o8SC; 28PKnu7RzizxBzFPoLp69HLXp9bJL3JFtT2s5QzHsEA2
- Stego/hashes (extraits de dépôts):
- Vague 2 (AES, 9123 o): SHA256 c99cdff8…, Stage1 déchiffré SHA256 0f799899…, Clé AES zetqHyfDfod88zloncfnOaS9gGs90ONX, IV a041fdaa…
- Vague 1 (AES, 8035 o): SHA256 479c0457…, Stage1 déchiffré SHA256 48109c33…, Clé AES GQo1e24s…, IV 0264ec12…
- Vague 0 (plaintext, 3538 o): SHA256 05933d76…
- Empreintes services: Socket.IO sur :4789; panel Express.js + Helmet sur :5000 (CORS: http://localhost:3000, même ETag); :80 avec headers de rate limiting (x-ratelimit-limit:30/60s).
- Artefacts/détection: pattern d’injection ‘codePointAt’ + ‘0xFE00’; bot auth _partner: mulKRsVtolooY8S; recherche locale: grep -rl ‘codePointAt’ … puis ‘0xFE00’.
TTPs (extraits) 🛠️
- Résolution C2 via mémos Solana; abandon du DHT; rotation d’IP Vultr (AS20473, France majoritairement) et chemins de payload.
- Command & Control via Socket.IO (:4789), kill switch HTTP 20 octets et kill sélectif des doublons via process.exit() après check_version.
- Vol et triage de crédentiels GitHub (VS Code, git, SSH), inventaire centralisé, injections opérateur dans des dépôts publics avec stéganographie Unicode.
- Exfiltration non chiffrée (HTTP POST, ZIP en clair), endpoints à limitation de débit; invisibilité aux scanners passifs (ports non standard + rate limiting).
- Module de tunnel TCP sans dépendances natives (remplacement ponctuel du proxy WebRTC), préparation possible d’usage proxy.
Conclusion: publication de recherche détaillant l’infrastructure GlassWorm, ses évolutions (rotation C2, kill switches, module tunnel), la campagne d’injection GitHub et une mise à jour des IoCs.
🧠 TTPs et IOCs détectés
TTP
[‘Résolution C2 via mémos Solana’, ‘Abandon du DHT’, ‘Rotation d’IP Vultr (AS20473, France majoritairement) et chemins de payload’, ‘Command & Control via Socket.IO (:4789)’, ‘Kill switch HTTP 20 octets et kill sélectif des doublons via process.exit() après check_version’, ‘Vol et triage de crédentiels GitHub (VS Code, git, SSH)’, ‘Inventaire centralisé’, ‘Injections opérateur dans des dépôts publics avec stéganographie Unicode’, ‘Exfiltration non chiffrée (HTTP POST, ZIP en clair)’, ‘Endpoints à limitation de débit’, ‘Invisibilité aux scanners passifs (ports non standard + rate limiting)’, ‘Module de tunnel TCP sans dépendances natives (remplacement ponctuel du proxy WebRTC)’]
IOC
{‘ip’: [‘217.69.0.159’, ‘217.69.11.99’, ‘217.69.3.51’, ‘45.32.150.251’, ‘45.76.44.240’, ‘208.76.223.59’, ‘208.85.20.124’], ‘wallets_solana’: [‘BjVeAjPrSKFiingBn4vZvghsGj9KCE8AJVtbc9S8o8SC’, ‘28PKnu7RzizxBzFPoLp69HLXp9bJL3JFtT2s5QzHsEA2’], ‘hashes’: [‘c99cdff8…’, ‘0f799899…’, ‘479c0457…’, ‘48109c33…’, ‘05933d76…’], ‘aes_keys’: [‘zetqHyfDfod88zloncfnOaS9gGs90ONX’, ‘GQo1e24s…’], ‘iv’: [‘a041fdaa…’, ‘0264ec12…’]}
🔗 Source originale : https://codeberg.org/tip-o-deincognito/glassworm-writeup/src/branch/main/PART2.md