Bösartige Twitch-Erweiterung stiehlt OAuth-Tokens von 30,000 Benutzern
Detection stack
- AIDR
- Alert
- ETL
- Query
Zusammenfassung
Eine bösartige Browser-Erweiterung namens Twitch Enhanced Viewer | JeetBot zielt auf Chrome- und Firefox-Nutzer ab, um Twitch OAuth-Sitzungstoken zu stehlen. Die Erweiterung leitet Netzwerkrequests über vom Angreifer kontrollierte Proxy-Server um und hängt das Authentifizierungs-Token des Opfers als Klartext-Query-Parameter an. Dies ermöglicht es dem Betreiber, Twitch-Konten zu kapern und möglicherweise auf Chats, Flüsternachrichten und Kontoeinstellungen zuzugreifen.
Untersuchung
Socket-Forscher identifizierten die Erweiterung in großen Browser-Marktplätzen und untersuchten deren JavaScript-Quellcode. Die Analyse zeigte, dass ein Content-Skript den Authorization Header erfasst, während ein Hintergrund-Prozess ihn an eine vom Angreifer kontrollierte Proxy-Infrastruktur weiterleitet. Forscher entdeckten auch eine hartcodierte Whitelist russischer Streamer-Kanäle, die von der Token-Exfiltration ausgeschlossen sind, was auf ein spezifisches Zielmuster oder eine betriebliche Vorliebe hindeutet.
Abhilfemaßnahmen
Benutzer sollten die Twitch Enhanced Viewer | JeetBot Erweiterung sofort entfernen und alle aktiven Twitch-Sitzungen beenden, um möglicherweise gestohlene Tokens zu widerrufen. Sicherheitsteams sollten die identifizierte bösartige Infrastruktur blockieren und Endpunkte auf nicht autorisierte Browser-Erweiterungen überwachen. Entwickler sollten auch vermeiden, authentifizierten Datenverkehr über Drittanbieter-Proxies zu leiten, ohne zuvor die Zugangsdaten zu entfernen.
Reaktion
Sollte die bösartige Erweiterung entdeckt werden, sollten Administratoren alle Endpunkte mit den Erweiterungs-IDs identifizieren und die betroffenen Benutzersitzungen isolieren. OAuth-Tokens, die mit kompromittierten Twitch-Konten verbunden sind, sollten sofort widerrufen werden. Organisationen sollten auch strikte Richtlinien für Browser-Erweiterungen durchsetzen, um die Installation nicht genehmigter oder riskanter Drittanbieter-Add-ons zu verhindern.
Angriffsablauf
Wir aktualisieren diesen Teil noch.
Erkennungen
Verdächtige Command-and-Control-Aktivität durch DNS-Anfrage mit ungewöhnlicher Top-Level-Domain (TLD) (via dns)
Mögliche Dateninfiltration/-exfiltration/C2 über Drittanbieter-Dienste/Tools (via Proxy)
Mögliche Dateninfiltration/-exfiltration/C2 über Drittanbieter-Dienste/Tools (via dns)
IOCs (HashSha256) zur Erkennung: Bösartige Twitch-Browser-Erweiterung setzt 30.000 Benutzerdaten-OAuth-Token einem russischen Bot-Dienst aus
IOCs (SourceIP) zur Erkennung: Bösartige Twitch-Browser-Erweiterung setzt 30.000 Benutzerdaten-OAuth-Token einem russischen Bot-Dienst aus
IOCs (DestinationIP) zur Erkennung: Bösartige Twitch-Browser-Erweiterung setzt 30.000 Benutzerdaten-OAuth-Token einem russischen Bot-Dienst aus
Bösartige Twitch-Browser-Erweiterung setzt OAuth-Tokens [Webserver] aus
Simulation Ausführung
-
Angriffsgeschichte und Befehle: Der Angreifer hat erfolgreich eine bösartige Browser-Erweiterung auf dem Rechner des Opfers installiert. Das Hauptziel der Erweiterung ist es, Twitch-Sitzungen zu kapern, um Zugang zu Premium-Funktionen oder Benutzerdaten zu erhalten. Dazu durchsucht die Erweiterung das OAuth-Token des Benutzers im lokalen Speicher des Browsers. Um dieses Token zu exfiltrieren oder über einen Proxy zu validieren, konstruiert die Erweiterung eine GET-Anfrage an
usher.ttvnw.net. Es hängt das gestohlene Token mit dem&auth=Parameter an. Die Simulation wird ein Mock-Event-Log mit der erforderlichenEventID(5678) und der bösartigen URL auslösen, um sicherzustellen, dass die ErkennungsregelBedingung(selection_url UND selection_browser_events) erfüllt ist. -
Regressionstest-Skript:
import requests import json import datetime # Simulationsparameter target_url = "https://usher.ttvnw.net/api/get_playlist?user_id=12345&auth=STOLEN_OAUTH_TOKEN_XYZ_789" mock_event_id = 5678 print(f"[*] Simulation starten: Bösartige Twitch-Erweiterungs-Exfiltration") print(f"[*] Ziel-URL: {target_url}") print(f"[*] Mock-Event-ID: {mock_event_id}") # In einem echten Szenario wird das Proxy-Protokoll durch den Netzwerkverkehr erzeugt. # Um den Protokolleintrag für diesen Test im SIEM zu simulieren: simulation_log = { "timestamp": datetime.datetime.utcnow().isoformat(), "url": target_url, "EventID": mock_event_id, "category": "proxy", "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", "action": "allowed" } print(f"[+] Simulierten Protokolleintrag für SIEM-Aufnahme erzeugen...") print(json.dumps(simulation_log, indent=4)) # Die eigentliche Anfrage ausführen, um sicherzustellen, dass eine Netzwerk-Telemetrie generiert wird try: response = requests.get(target_url) print(f"[+] Anfrage gesendet. Status Code: {response.status_code}") except Exception as e: print(f"[-] Anfrage fehlgeschlagen (dies wird erwartet, wenn die URL ungültig ist): {e}") print("[*] Simulation abgeschlossen.") -
Bereinigungsbefehle:
# Keine dauerhaften Änderungen am System während dieser Simulation vorgenommen. # Falls der Browserverlauf manuell modifiziert wurde, Browser-Cache/-Verlauf löschen. echo "[*] Bereinigung abgeschlossen. Keine Artefakte auf dem Host hinterlassen."