Die Erweiterung «Claude Code for VS Code» im Cursor Marketplace wurde laut Phorion mit Schadsoftware unterwandert. Die infizierte Version gelangte per automatischem Update auf die Rechner. Angreifer erhielten damit Zugriff auf betroffene Systeme. Ein Update allein genügt nicht, Betroffene sollten weitere Schritte einleiten.
Inhalt 11 Abschnitte
- Das Wichtigste in Kürze
- Was bei Claude Code im Cursor Marketplace passiert ist
- Was die Schadsoftware tut
- Warum der Fall viele Entwickler betrifft
- So prüfst du dein System
- Was unklar bleibt
- Prüfskripte für Mac, Linux und Windows
- Was zu tun ist
- Einordnung: Was das für Entwickler und Admins heisst
- Fazit
- Änderungshistorie

Eine Erweiterung mit Millionen Installationen enthielt eine Hintertür für Angreifer, und ein Update allein löst das Problem nicht.
Die Erweiterung «Claude Code for VS Code» im Cursor Marketplace wurde mit Schadsoftware unterwandert. Das meldet das Sicherheitsunternehmen Phorion. Die infizierte Version kam über ein automatisches Update auf die Rechner. Wer sie installiert hatte, muss sein System prüfen, denn Deinstallieren entfernt die Hintertür nicht.
Phorion hat die Warnung am 30. Oktober 2026 veröffentlicht und zuletzt am 31. Oktober 2026 aktualisiert. Ergänzt am 2. November 2026: Die betroffenen Versionen, das Zeitfenster, die Skripte und die Handlungsstufen sind spätere Nachträge. Weiter unten stehen die Skripte für Mac, Linux und Windows.
Das Wichtigste in Kürze
- Betroffen sind die Versionen 2.1.312 und 2.1.313 von «Claude Code for VS Code» im Cursor Marketplace. Sie waren am 29. Oktober 2026 etwa von 10:30 bis 21:30 Uhr MEZ (UTC+1) abrufbar, danach hat Cursor sie entfernt.
- Der Code läuft beim Laden der Erweiterung ohne Zutun. Er richtet einen SSH-Zugang und einen Tunnel zu einem fremden Server ein.
- Deinstallieren genügt nicht. Die Hintertür bleibt auf dem Rechner, bis du die Spuren von Hand entfernst.
- Prüfe dein System jetzt. Unten stehen die Schritte samt lesenden Befehlen.
Was bei Claude Code im Cursor Marketplace passiert ist
Dazu berichtet das Medium derStandard über den Fall und beruft sich auf die Warnung von Phorion. Demnach wurde die Erweiterung «Claude Code for VS Code» im Cursor Marketplace unterwandert. derStandard spricht von millionenfacher Nutzung.
Dabei nennt Phorion die Versionen 2.1.312 und 2.1.313. Laut dem Sicherheitshinweis von Cursor (29. Oktober 2026, am Folgetag aktualisiert) war die manipulierte Version zwischen etwa 2:27 und 13:35 Uhr Pazifikzeit im Marketplace. Das entspricht etwa 10:30 bis 21:30 Uhr MEZ (UTC+1). Cursor hat sie unmittelbar nach der Entdeckung entfernt. Dabei gilt: Hattest du Cursor in diesem Zeitfenster geöffnet oder die Erweiterung danach erstmals aktualisiert, solange eine der Versionen noch im Cache lag, prüfe dein System. Die Artefaktpfade nennen darwin-arm64, also Apple Silicon. Die Implantatlogik deckt laut den Forschern aber alle drei Systeme ab: macOS, Linux und Windows.
Was die Schadsoftware tut
So startet der Code, sobald die Erweiterung lädt. Dafür muss niemand etwas anklicken. Phorion beschreibt mehrere Schritte:
- Er hängt einen SSH-Schlüssel mit dem Kommentar svc-telemetry an die Datei ~/.ssh/authorized_keys.
- Er versucht, Remote Login einzuschalten.
- Er baut einen Reverse-SSH-Tunnel zum Server 134.209.82[.]225 auf.
- Er sichert sich Persistenz: unter macOS mit dem LaunchAgent ~/Library/LaunchAgents/com.apple.sysmond.plist, der ~/.config/.smt startet. Unter Linux dient ein @reboot-Eintrag in der Crontab, unter Windows die Aufgabe «SysMon» oder das Startup-Skript sysmon.cmd.
- Er sendet einmalig einen Beacon mit Hostname, Benutzer, IP-Adresse und git-E-Mail. Dazu kommen die Namen (nicht die Werte) von Umgebungsvariablen, die KEY, TOKEN, SECRET, PASS, AWS oder GCP enthalten.
Der infizierte extension.js hat den SHA-256-Hash ecb58cb29078d9646ad1dcdbe51526f2d9cfea06be5fb2ab183e8ecc3ab6bf15.
Warum der Fall viele Entwickler betrifft
Cursor stellt einen KI-gestützten Code-Editor her. Er basiert auf Microsofts Visual Studio Code. Gerade bei der KI-Entwicklung ist der Editor sehr beliebt. Die Firma gehört seit einigen Monaten zu SpaceXAI.
Daher trifft ein solcher Vorfall eine grosse Gruppe. Entwicklerrechner enthalten oft Zugangsdaten, Quellcode und Verbindungen zu internen Systemen. Ein Eindringling auf einem solchen Gerät kann viel Schaden anrichten.
Im Überblick, was die Quellen belegen:
| Punkt | Wert | Bedeutung |
|---|---|---|
Betroffene Versionen |
2.1.312 und 2.1.313 |
Cursor hat beide aus dem Marketplace entfernt |
Verbreitungsweg |
Automatisches Update |
Der Code läuft beim Laden der Erweiterung ohne Zutun |
Folge |
SSH-Zugang und Reverse-Tunnel |
Der Angreifer erreicht den Rechner über 134.209.82[.]225 |
Empfehlung |
Spuren entfernen, Zugangsdaten rotieren |
Deinstallieren entfernt die Hintertür nicht |
So prüfst du dein System
- 1Version nachsehenOrdner ~/.cursor/extensions nach claude-code durchsuchenBetroffen sind 2.1.312 und 2.1.313
- 2Nach Spuren suchensvc-telemetry-Schlüssel, Persistenzdateien, TunnelprozessDie Befehle stehen unter dem Ablauf
- 3Remote Login kontrollierenIst SSH-Zugriff eingeschaltet, obwohl du ihn nie aktiviert hast?Unter macOS in den Freigaben
- 4Bei einem Fund bereinigenSchritte laut Phorion, dann Zugangsdaten rotierenRotieren besonders, falls SSH aktiv war
Diese Befehle lesen nur und ändern nichts:
ls ~/.cursor/extensions | grep claude-code grep svc-telemetry ~/.ssh/authorized_keys ls ~/Library/LaunchAgents/com.apple.sysmond.plist ~/.config/.smt ls /tmp/.stk_* ps aux | grep 134.209.82
Dann helfen dir die Schritte der Forscher, falls du etwas findest. Beende zuerst die Tunnelprozesse. Lösche dann den LaunchAgent, die Crontab-Zeile oder die Aufgabe sowie ~/.config/.smt und .smtk. Entferne den svc-telemetry-Eintrag aus authorized_keys und lösche /tmp/.stk_*. Prüfe danach, ob Remote Login unerwartet aktiv ist. War SSH aktiv, rotiere deine Zugangsdaten.
Was unklar bleibt
Ein Punkt ist offen: Weder Phorion noch derStandard erklären, wie die Angreifer in die Erweiterung gelangten. Prüfe die Details deshalb direkt bei Phorion und im Hinweis von Cursor.
Prüfskripte für Mac, Linux und Windows
Die Skripte lesen nur, ändern nichts und senden nichts. Was ihr Ergebnis bedeutet, steht unter „Was zu tun ist“.
macOS
Speichere den Code als check.sh und starte ihn im Terminal mit bash, gefolgt vom Dateinamen. Getestet auf einem Mac.
Code anzeigen 188 Zeilen
#!/usr/bin/env bash
# =============================================================================
# claude-code-pruefung-mac.sh
# Zweck: Prueft, ob die Hintertuer der infizierten Erweiterung "Claude Code
# for VS Code" (Cursor Marketplace, Versionen 2.1.312 und 2.1.313)
# auf diesem Mac installiert war oder Spuren hinterlassen hat.
# Quelle: Phorion, https://phorion.io/blog/offical-claude-code-vsx-compromise
# Stand: 31.10.2026
# Aufruf: bash claude-code-pruefung-mac.sh
# Testen: PRUEFUNG_HOME=<Ordner> und PRUEFUNG_TMP=<Ordner> ersetzen Home und
# Temp-Ordner (nur fuer Tests des Skripts, im Alltag nicht setzen).
# Haftung: Bereitgestellt ohne Gewaehr. Das Skript liest nur; die Bewertung und
# alle Folgeschritte liegen bei Ihnen.
# Exit: 0 = GRUEN, 1 = GELB, 2 = ROT
# =============================================================================
# Dieses Skript liest nur. Es loescht und aendert nichts und sendet nichts ins Netz.
HOME_DIR="${PRUEFUNG_HOME:-$HOME}"
TMP_DIR="${PRUEFUNG_TMP:-${TMPDIR:-/tmp}}"
TESTMODUS=""; [ -n "$PRUEFUNG_HOME" ] && TESTMODUS=1
HASH_BEKANNT="ecb58cb29078d9646ad1dcdbe51526f2d9cfea06be5fb2ab183e8ecc3ab6bf15"
FINGERPRINT="SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk"
IP_C2="134.209.82.225"
QUELLE="https://phorion.io/blog/offical-claude-code-vsx-compromise"
if [ -z "$NO_COLOR" ]; then
R=$'\033[1;37;41m'; G=$'\033[1;30;43m'; V=$'\033[1;30;42m'; N=$'\033[0m'
RT=$'\033[1;31m'; GT=$'\033[1;33m'; VT=$'\033[1;32m'
else
R=""; G=""; V=""; N=""; RT=""; GT=""; VT=""
fi
ROT=0; GELB=0
ok() { echo "[OK] $1"; }
fund() { echo "${RT}[FUND]${N} $1"; ROT=$((ROT+1)); }
gelb() { echo "${GT}[FUND]${N} $1"; GELB=$((GELB+1)); }
nicht() { echo "[NICHT PRUEFBAR] $1"; }
echo "Pruefung auf die Claude-Code-Hintertuer (Phorion, Stand 31.10.2026)"
echo "Dieses Skript liest nur. Es loescht und aendert nichts und sendet nichts ins Netz."
echo "Benutzer: $(id -un 2>/dev/null) Home: $HOME_DIR Temp: $TMP_DIR"
echo
echo "--- 1. Spuren eines Einbruchs ---"
# authorized_keys (eigener Benutzer, bei Nicht-Test auch alle anderen, soweit lesbar)
AK_LISTE=("$HOME_DIR/.ssh/authorized_keys")
if [ -z "$TESTMODUS" ]; then
for f in /Users/*/.ssh/authorized_keys /var/root/.ssh/authorized_keys; do
case "$f" in "$HOME_DIR/.ssh/authorized_keys") continue;; esac
AK_LISTE+=("$f")
done
fi
for f in "${AK_LISTE[@]}"; do
if [ -r "$f" ]; then
if grep -q "svc-telemetry" "$f" 2>/dev/null; then fund "Schluessel svc-telemetry in $f"
else ok "kein svc-telemetry in $f"; fi
elif [ -e "$f" ]; then nicht "$f (nicht lesbar, ohne Rechte)"
else
case "$f" in "$HOME_DIR"/*) ok "$f existiert nicht";; esac
fi
done
for f in "$HOME_DIR/.config/.smt" "$HOME_DIR/.config/.smtk"; do
if [ -e "$f" ]; then fund "Datei $f vorhanden"; else ok "$f nicht vorhanden"; fi
done
PLIST_LISTE=("$HOME_DIR/Library/LaunchAgents/com.apple.sysmond.plist")
if [ -z "$TESTMODUS" ]; then
for f in /Users/*/Library/LaunchAgents/com.apple.sysmond.plist; do
case "$f" in "$HOME_DIR/Library/LaunchAgents/com.apple.sysmond.plist") continue;; esac
PLIST_LISTE+=("$f")
done
fi
for f in "${PLIST_LISTE[@]}"; do
if [ -e "$f" ]; then fund "LaunchAgent $f vorhanden (Persistenz der Hintertuer)"
else
case "$f" in "$HOME_DIR"/*) ok "$f nicht vorhanden";; esac
fi
done
STK=""
for d in "$TMP_DIR" /tmp; do
[ -d "$d" ] || continue
for f in "$d"/.stk_* "$d"/stk_*; do [ -e "$f" ] && STK="$STK $f"; done
[ "$TMP_DIR" = "/tmp" ] && break
done
if [ -n "$STK" ]; then fund "Dateien .stk_* gefunden:$STK"; else ok ".stk_* nicht vorhanden in $TMP_DIR und /tmp"; fi
# eigener Prozess und dessen Aufrufer werden ausgeblendet (ihre Befehlszeile kann die Suchmuster enthalten)
PS_AUS=$(ps -axo pid,command 2>/dev/null | awk -v a="$$" -v b="$PPID" '$1 != a && $1 != b')
if echo "$PS_AUS" | grep -F -- '-R *:0:localhost:22' >/dev/null; then
fund "laufender Prozess mit Rueckwaertstunnel (-R *:0:localhost:22)"
echo "$PS_AUS" | grep -F -- '-R *:0:localhost:22' | sed 's/^/ /'
else ok "kein Prozess mit -R *:0:localhost:22"; fi
if echo "$PS_AUS" | grep -F "$IP_C2" >/dev/null; then fund "Prozess mit $IP_C2"; else ok "kein Prozess mit $IP_C2"; fi
NET=$(netstat -an -p tcp 2>/dev/null)
if [ -z "$NET" ]; then nicht "Netzwerkverbindungen (netstat nicht verfuegbar)"
elif echo "$NET" | grep -F "$IP_C2" >/dev/null; then fund "Verbindung zu $IP_C2"
else ok "keine Verbindung zu $IP_C2"; fi
nicht "Anmeldeprotokolle (log show) bewusst ausgelassen: dauert zu lange und braucht oft Rechte"
SSHD=""
echo "$NET" | grep -E 'LISTEN' | grep -Eq '[.:]22 ' && SSHD=1
if [ -n "$SSHD" ]; then echo "[INFO] Remote Login (SSH) ist aktiv: Port 22 wartet auf Verbindungen"; else echo "[INFO] Remote Login (SSH) ist nicht aktiv (Port 22 nicht offen)"; fi
echo
echo "--- 2. Infizierte Version installiert (gewesen)? ---"
EXT_BASEN=".cursor/extensions .vscode/extensions .vscode-insiders/extensions .vscode-oss/extensions .windsurf/extensions .vscode-server/extensions .cursor-server/extensions"
SAUBER=""
for b in $EXT_BASEN; do
base="$HOME_DIR/$b"
if [ ! -d "$base" ]; then continue; fi
ok "geprueft: $base"
for d in "$base"/anthropic.claude-code-2.1.312-* "$base"/anthropic.claude-code-2.1.313-*; do
[ -e "$d" ] && gelb "infizierte Version installiert: $d"
done
for d in "$base"/anthropic.claude-code-*; do
[ -d "$d" ] || continue
v=$(basename "$d" | sed -E 's/^anthropic\.claude-code-([0-9.]+).*/\1/')
case "$v" in 2.1.312|2.1.313) ;; *) echo " $b: anthropic.claude-code $v, nicht betroffen";; esac
done
for j in "$base/extensions.json" "$base/.obsolete"; do
if [ -r "$j" ]; then
if tr '\n' ' ' < "$j" | grep -Eq 'claude-code.{0,80}2\.1\.31[23]([^0-9.]|$)'; then gelb "Version 2.1.312/2.1.313 erwaehnt in $j"
else ok "kein 2.1.312/2.1.313 in $j"; fi
fi
done
for d in "$base"/anthropic.claude-code-*; do
[ -d "$d" ] || continue
find "$d" -name extension.js -type f 2>/dev/null | while read -r ej; do
h=$(shasum -a 256 "$ej" 2>/dev/null | awk '{print $1}')
[ "$h" = "$HASH_BEKANNT" ] && echo "HASHFUND $ej"
done
done > "${TMP_DIR}/.pruefung_hash.$$" 2>/dev/null
if [ -s "${TMP_DIR}/.pruefung_hash.$$" ]; then
while read -r _ ej; do gelb "infizierter Code liegt noch auf der Platte: $ej (Hash stimmt). Cursor beenden, Erweiterung entfernen, Spuren erneut pruefen"; done < "${TMP_DIR}/.pruefung_hash.$$"
fi
rm -f "${TMP_DIR}/.pruefung_hash.$$" 2>/dev/null
done
LOG_LISTE=("Library/Application Support/Cursor/logs" "Library/Application Support/Code/logs" "Library/Application Support/Code - Insiders/logs" "Library/Application Support/VSCodium/logs" "Library/Application Support/Windsurf/logs")
for l in "${LOG_LISTE[@]}"; do
ld="$HOME_DIR/$l"
[ -d "$ld" ] || continue
if grep -rIlE 'claude-code[-@ v]{0,3}2\.1\.31[23]([^0-9]|$)' --include='*.log' "$ld" >/dev/null 2>&1; then
gelb "Version 2.1.312/2.1.313 in den Logs erwaehnt: $ld"
else ok "Logs ohne 2.1.312/2.1.313: $ld"; fi
done
[ -d "$HOME_DIR/.cursor/extensions" ] || [ -d "$HOME_DIR/.vscode/extensions" ] || echo " (keine Erweiterungsordner von Cursor/VS Code gefunden)"
echo
if [ "$ROT" -gt 0 ]; then
echo "${R} ${N}"
echo "${R} ROT: SPUREN EINES EINBRUCHS GEFUNDEN ($ROT Fund/e) ${N}"
echo "${R} ${N}"
[ -n "$SSHD" ] && echo "${RT}Remote Login (SSH) ist auf diesem Mac aktiv: ein Zugriff war moeglich.${N}"
cat <<TXT
Naechste Schritte (nach Phorion, $QUELLE):
1. Tunnelprozesse beenden (ssh mit -R *:0:localhost:22, Verbindung zu $IP_C2).
2. LaunchAgent ~/Library/LaunchAgents/com.apple.sysmond.plist (zuerst mit launchctl bootout beenden), Dateien ~/.config/.smt, ~/.config/.smtk und .stk_* entfernen.
3. Den Eintrag svc-telemetry aus ~/.ssh/authorized_keys loeschen.
4. Systemeinstellungen > Allgemein > Teilen > Entfernte Anmeldung (Remote Login) pruefen und ausschalten, wenn nicht gebraucht.
5. Alle Zugangsdaten rotieren, die als Umgebungsvariablen oder Dateien erreichbar waren
(API-Schluessel, Tokens, SSH-Schluessel, Cloud-Zugaenge). Deinstallieren allein reicht nicht.
TXT
EXITCODE=2
elif [ "$GELB" -gt 0 ]; then
echo "${G} ${N}"
echo "${G} GELB: INFIZIERTE VERSION WAR INSTALLIERT ($GELB Fund/e) ${N}"
echo "${G} ${N}"
cat <<TXT
Kein Einbruch gefunden, trotzdem empfohlen (nach Phorion, $QUELLE):
- Cursor beenden, die Erweiterung anthropic.claude-code entfernen, danach dieses Skript erneut ausfuehren.
- Zugangsdaten rotieren, die im Umfeld von Cursor als Umgebungsvariablen lagen
(API-Schluessel, Tokens, Cloud-Zugaenge).
TXT
EXITCODE=1
else
echo "${V} ${N}"
echo "${V} GRUEN: weder betroffene Version noch Spuren gefunden ${N}"
echo "${V} ${N}"
EXITCODE=0
fi
echo
echo "Quelle: $QUELLE"
exit $EXITCODE
Linux
Speichere den Code als check.sh und starte ihn im Terminal mit bash, gefolgt vom Dateinamen. Getestet unter Linux.
Code anzeigen 201 Zeilen
#!/usr/bin/env bash
# =============================================================================
# claude-code-pruefung-linux.sh
# Zweck: Prueft, ob die Hintertuer der infizierten Erweiterung "Claude Code
# for VS Code" (Cursor Marketplace, Versionen 2.1.312 und 2.1.313)
# auf diesem Rechner installiert war oder Spuren hinterlassen hat.
# Quelle: Phorion, https://phorion.io/blog/offical-claude-code-vsx-compromise
# Stand: 31.10.2026
# Aufruf: bash claude-code-pruefung-linux.sh
# Testen: PRUEFUNG_HOME=<Ordner> und PRUEFUNG_TMP=<Ordner> ersetzen Home und
# Temp-Ordner (nur fuer Tests des Skripts, im Alltag nicht setzen).
# Haftung: Bereitgestellt ohne Gewaehr. Das Skript liest nur; die Bewertung und
# alle Folgeschritte liegen bei Ihnen.
# Exit: 0 = GRUEN, 1 = GELB, 2 = ROT
# =============================================================================
# Dieses Skript liest nur. Es loescht und aendert nichts und sendet nichts ins Netz.
HOME_DIR="${PRUEFUNG_HOME:-$HOME}"
TMP_DIR="${PRUEFUNG_TMP:-${TMPDIR:-/tmp}}"
TESTMODUS=""; [ -n "$PRUEFUNG_HOME" ] && TESTMODUS=1
HASH_BEKANNT="ecb58cb29078d9646ad1dcdbe51526f2d9cfea06be5fb2ab183e8ecc3ab6bf15"
FINGERPRINT="SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk"
IP_C2="134.209.82.225"
QUELLE="https://phorion.io/blog/offical-claude-code-vsx-compromise"
if [ -z "$NO_COLOR" ]; then
R=$'\033[1;37;41m'; G=$'\033[1;30;43m'; V=$'\033[1;30;42m'; N=$'\033[0m'
RT=$'\033[1;31m'; GT=$'\033[1;33m'; VT=$'\033[1;32m'
else
R=""; G=""; V=""; N=""; RT=""; GT=""; VT=""
fi
ROT=0; GELB=0
ok() { echo "[OK] $1"; }
fund() { echo "${RT}[FUND]${N} $1"; ROT=$((ROT+1)); }
gelb() { echo "${GT}[FUND]${N} $1"; GELB=$((GELB+1)); }
nicht() { echo "[NICHT PRUEFBAR] $1"; }
echo "Pruefung auf die Claude-Code-Hintertuer (Phorion, Stand 31.10.2026)"
echo "Dieses Skript liest nur. Es loescht und aendert nichts und sendet nichts ins Netz."
echo "Benutzer: $(id -un 2>/dev/null) Home: $HOME_DIR Temp: $TMP_DIR"
echo
echo "--- 1. Spuren eines Einbruchs ---"
# authorized_keys (eigener Benutzer, bei Nicht-Test auch alle anderen, soweit lesbar)
AK_LISTE=("$HOME_DIR/.ssh/authorized_keys")
if [ -z "$TESTMODUS" ]; then
for f in /home/*/.ssh/authorized_keys /root/.ssh/authorized_keys; do
case "$f" in "$HOME_DIR/.ssh/authorized_keys") continue;; esac
AK_LISTE+=("$f")
done
fi
for f in "${AK_LISTE[@]}"; do
if [ -r "$f" ]; then
if grep -q "svc-telemetry" "$f" 2>/dev/null; then fund "Schluessel svc-telemetry in $f"
else ok "kein svc-telemetry in $f"; fi
elif [ -e "$f" ]; then nicht "$f (nicht lesbar, ohne Rechte)"
else
case "$f" in "$HOME_DIR"/*) ok "$f existiert nicht";; esac
fi
done
for f in "$HOME_DIR/.config/.smt" "$HOME_DIR/.config/.smtk"; do
if [ -e "$f" ]; then fund "Datei $f vorhanden"; else ok "$f nicht vorhanden"; fi
done
CT=$(crontab -l 2>/dev/null)
if [ -z "$TESTMODUS" ]; then
if echo "$CT" | grep -E '@reboot' | grep -qF '.smt'; then fund "Crontab: @reboot-Eintrag mit .smt"
else ok "Crontab ohne @reboot-Eintrag mit .smt (crontab -l)"; fi
else
nicht "Crontab im Testmodus uebersprungen"
fi
STK=""
for d in "$TMP_DIR" /tmp; do
[ -d "$d" ] || continue
for f in "$d"/.stk_* "$d"/stk_*; do [ -e "$f" ] && STK="$STK $f"; done
[ "$TMP_DIR" = "/tmp" ] && break
done
if [ -n "$STK" ]; then fund "Dateien .stk_* gefunden:$STK"; else ok ".stk_* nicht vorhanden in $TMP_DIR und /tmp"; fi
# eigener Prozess und dessen Aufrufer werden ausgeblendet (ihre Befehlszeile kann die Suchmuster enthalten)
PS_AUS=$(ps -eo pid,args 2>/dev/null | awk -v a="$$" -v b="$PPID" '$1 != a && $1 != b')
if echo "$PS_AUS" | grep -F -- '-R *:0:localhost:22' >/dev/null; then
fund "laufender Prozess mit Rueckwaertstunnel (-R *:0:localhost:22)"
echo "$PS_AUS" | grep -F -- '-R *:0:localhost:22' | sed 's/^/ /'
else ok "kein Prozess mit -R *:0:localhost:22"; fi
if echo "$PS_AUS" | grep -F "$IP_C2" >/dev/null; then fund "Prozess mit $IP_C2"; else ok "kein Prozess mit $IP_C2"; fi
NET=$(ss -tn 2>/dev/null || netstat -tn 2>/dev/null)
if [ -z "$NET" ]; then nicht "Netzwerkverbindungen (ss/netstat nicht verfuegbar)"
elif echo "$NET" | grep -F "$IP_C2" >/dev/null; then fund "Verbindung zu $IP_C2"
else ok "keine Verbindung zu $IP_C2"; fi
LOGGEFUNDEN=0; LOGGEPRUEFT=0
if [ -r /var/log/auth.log ]; then
LOGGEPRUEFT=1
grep -qE "svc-telemetry|0Z6R\+DF64Do2nwQic8a7kkfDLNNk4IiK\+2U2Rci4htk" /var/log/auth.log 2>/dev/null && LOGGEFUNDEN=1
fi
if command -v journalctl >/dev/null 2>&1; then
for u in ssh sshd; do
J=$(journalctl -u "$u" --no-pager -q 2>/dev/null)
if [ -n "$J" ]; then
LOGGEPRUEFT=1
echo "$J" | grep -qE "svc-telemetry|0Z6R\+DF64Do2nwQic8a7kkfDLNNk4IiK\+2U2Rci4htk" && LOGGEFUNDEN=1
fi
done
fi
if [ "$LOGGEFUNDEN" = 1 ]; then fund "Login mit dem Schluessel svc-telemetry (auth.log/journal, $FINGERPRINT)"
elif [ "$LOGGEPRUEFT" = 1 ]; then ok "Anmeldeprotokolle (auth.log/journal) ohne svc-telemetry"
else nicht "Anmeldeprotokolle (/var/log/auth.log, journalctl -u ssh) nicht lesbar"; fi
SSHD=""
if command -v systemctl >/dev/null 2>&1; then
for u in ssh sshd; do systemctl is-active --quiet "$u" 2>/dev/null && SSHD=1; done
fi
echo "$PS_AUS" | grep -E 'sshd' | grep -v grep >/dev/null && SSHD=1
if [ -n "$SSHD" ]; then echo "[INFO] SSH-Server laeuft auf diesem Rechner"; else echo "[INFO] kein SSH-Server erkannt"; fi
echo
echo "--- 2. Infizierte Version installiert (gewesen)? ---"
EXT_BASEN=".cursor/extensions .vscode/extensions .vscode-insiders/extensions .vscode-oss/extensions .windsurf/extensions .vscode-server/extensions .cursor-server/extensions"
SAUBER=""
for b in $EXT_BASEN; do
base="$HOME_DIR/$b"
if [ ! -d "$base" ]; then continue; fi
ok "geprueft: $base"
for d in "$base"/anthropic.claude-code-2.1.312-* "$base"/anthropic.claude-code-2.1.313-*; do
[ -e "$d" ] && gelb "infizierte Version installiert: $d"
done
for d in "$base"/anthropic.claude-code-*; do
[ -d "$d" ] || continue
v=$(basename "$d" | sed -E 's/^anthropic\.claude-code-([0-9.]+).*/\1/')
case "$v" in 2.1.312|2.1.313) ;; *) echo " $b: anthropic.claude-code $v, nicht betroffen";; esac
done
for j in "$base/extensions.json" "$base/.obsolete"; do
if [ -r "$j" ]; then
if tr '\n' ' ' < "$j" | grep -Eq 'claude-code.{0,80}2\.1\.31[23]([^0-9.]|$)'; then gelb "Version 2.1.312/2.1.313 erwaehnt in $j"
else ok "kein 2.1.312/2.1.313 in $j"; fi
fi
done
for d in "$base"/anthropic.claude-code-*; do
[ -d "$d" ] || continue
find "$d" -name extension.js -type f 2>/dev/null | while read -r ej; do
h=$(sha256sum "$ej" 2>/dev/null | awk '{print $1}')
[ "$h" = "$HASH_BEKANNT" ] && echo "HASHFUND $ej"
done
done > "${TMP_DIR}/.pruefung_hash.$$" 2>/dev/null
if [ -s "${TMP_DIR}/.pruefung_hash.$$" ]; then
while read -r _ ej; do gelb "infizierter Code liegt noch auf der Platte: $ej (Hash stimmt). Cursor beenden, Erweiterung entfernen, Spuren erneut pruefen"; done < "${TMP_DIR}/.pruefung_hash.$$"
fi
rm -f "${TMP_DIR}/.pruefung_hash.$$" 2>/dev/null
done
LOG_LISTE=(".config/Cursor/logs" ".config/Code/logs" ".config/Code - Insiders/logs" ".config/VSCodium/logs" ".config/Windsurf/logs" ".cursor-server/data/logs" ".vscode-server/data/logs")
for l in "${LOG_LISTE[@]}"; do
ld="$HOME_DIR/$l"
[ -d "$ld" ] || continue
if grep -rIlE 'claude-code[-@ v]{0,3}2\.1\.31[23]([^0-9]|$)' --include='*.log' "$ld" >/dev/null 2>&1; then
gelb "Version 2.1.312/2.1.313 in den Logs erwaehnt: $ld"
else ok "Logs ohne 2.1.312/2.1.313: $ld"; fi
done
[ -d "$HOME_DIR/.cursor/extensions" ] || [ -d "$HOME_DIR/.vscode/extensions" ] || echo " (keine Erweiterungsordner von Cursor/VS Code gefunden)"
echo
if [ "$ROT" -gt 0 ]; then
echo "${R} ${N}"
echo "${R} ROT: SPUREN EINES EINBRUCHS GEFUNDEN ($ROT Fund/e) ${N}"
echo "${R} ${N}"
[ -n "$SSHD" ] && echo "${RT}Ein SSH-Server laeuft auf diesem Rechner: ein Zugriff war moeglich.${N}"
cat <<TXT
Naechste Schritte (nach Phorion, $QUELLE):
1. Tunnelprozesse beenden (ssh mit -R *:0:localhost:22, Verbindung zu $IP_C2).
2. Crontab-Eintrag mit .smt, Dateien ~/.config/.smt, ~/.config/.smtk und .stk_* entfernen.
3. Den Eintrag svc-telemetry aus ~/.ssh/authorized_keys loeschen.
4. Pruefen, ob ein SSH-Server laeuft, und ihn wenn moeglich abschalten.
5. Alle Zugangsdaten rotieren, die als Umgebungsvariablen oder Dateien erreichbar waren
(API-Schluessel, Tokens, SSH-Schluessel, Cloud-Zugaenge). Deinstallieren allein reicht nicht.
TXT
EXITCODE=2
elif [ "$GELB" -gt 0 ]; then
echo "${G} ${N}"
echo "${G} GELB: INFIZIERTE VERSION WAR INSTALLIERT ($GELB Fund/e) ${N}"
echo "${G} ${N}"
cat <<TXT
Kein Einbruch gefunden, trotzdem empfohlen (nach Phorion, $QUELLE):
- Cursor beenden, die Erweiterung anthropic.claude-code entfernen, danach dieses Skript erneut ausfuehren.
- Zugangsdaten rotieren, die im Umfeld von Cursor als Umgebungsvariablen lagen
(API-Schluessel, Tokens, Cloud-Zugaenge).
TXT
EXITCODE=1
else
echo "${V} ${N}"
echo "${V} GRUEN: weder betroffene Version noch Spuren gefunden ${N}"
echo "${V} ${N}"
EXITCODE=0
fi
echo
echo "Quelle: $QUELLE"
exit $EXITCODE
Windows
Speichere den Code als check.ps1 und starte ihn mit powershell -ExecutionPolicy Bypass -File .\pruefung.ps1. Nicht auf einem Windows-Rechner getestet. Lies den Code vor dem Start.
Code anzeigen 223 Zeilen
<#
=============================================================================
claude-code-pruefung-windows.ps1
Zweck: Prueft, ob die Hintertuer der infizierten Erweiterung "Claude Code
for VS Code" (Cursor Marketplace, Versionen 2.1.312 und 2.1.313)
auf diesem Rechner installiert war oder Spuren hinterlassen hat.
Quelle: Phorion, https://phorion.io/blog/offical-claude-code-vsx-compromise
Stand: 31.10.2026
Aufruf: powershell -ExecutionPolicy Bypass -File claude-code-pruefung-windows.ps1
Testen: Die Umgebungsvariablen PRUEFUNG_HOME, PRUEFUNG_TMP und PRUEFUNG_APPDATA
ersetzen Benutzerordner, Temp-Ordner und AppData (nur fuer Tests des
Skripts, im Alltag nicht setzen).
Haftung: Bereitgestellt ohne Gewaehr. Das Skript liest nur; die Bewertung und
alle Folgeschritte liegen bei Ihnen.
Exit: 0 = GRUEN, 1 = GELB, 2 = ROT
=============================================================================
#>
# Dieses Skript liest nur. Es loescht und aendert nichts und sendet nichts ins Netz.
$ErrorActionPreference = 'SilentlyContinue'
$TestModus = [bool]$env:PRUEFUNG_HOME
$HomeDir = if ($env:PRUEFUNG_HOME) { $env:PRUEFUNG_HOME } else { $env:USERPROFILE }
$TmpDir = if ($env:PRUEFUNG_TMP) { $env:PRUEFUNG_TMP } else { $env:TEMP }
$AppData = if ($env:PRUEFUNG_APPDATA) { $env:PRUEFUNG_APPDATA } elseif ($env:PRUEFUNG_HOME) { Join-Path $env:PRUEFUNG_HOME 'AppData\Roaming' } else { $env:APPDATA }
$HashBekannt = 'ecb58cb29078d9646ad1dcdbe51526f2d9cfea06be5fb2ab183e8ecc3ab6bf15'
$Fingerprint = 'SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk'
$IpC2 = '134.209.82.225'
$Tunnel = '-R *:0:localhost:22'
$Quelle = 'https://phorion.io/blog/offical-claude-code-vsx-compromise'
$VersionRegex = 'claude-code.{0,80}2\.1\.31[23](?![0-9.])'
$script:Rot = 0
$script:Gelb = 0
function Zeile($Marke, $Text, $Farbe) {
$m = $Marke.PadRight(17)
if ($Farbe) { Write-Host $m -NoNewline -ForegroundColor $Farbe; Write-Host $Text }
else { Write-Host "$m$Text" }
}
function Ok($t) { Zeile '[OK]' $t $null }
function Fund($t) { Zeile '[FUND]' $t 'Red'; $script:Rot++ }
function Gelb($t) { Zeile '[FUND]' $t 'Yellow'; $script:Gelb++ }
function Nicht($t) { Zeile '[NICHT PRUEFBAR]' $t 'DarkGray' }
function Info($t) { Zeile '[INFO]' $t $null }
Write-Host 'Pruefung auf die Claude-Code-Hintertuer (Phorion, Stand 31.10.2026)'
Write-Host 'Dieses Skript liest nur. Es loescht und aendert nichts und sendet nichts ins Netz.'
Write-Host "Benutzer: $env:USERNAME Home: $HomeDir Temp: $TmpDir"
Write-Host ''
Write-Host '--- 1. Spuren eines Einbruchs ---'
# authorized_keys (eigener Benutzer, ausserhalb des Tests alle Benutzer und die Admin-Datei von OpenSSH)
$ak = @((Join-Path $HomeDir '.ssh\authorized_keys'))
if (-not $TestModus) {
$benutzerRoot = Split-Path -Parent $env:USERPROFILE
foreach ($u in (Get-ChildItem -Path $benutzerRoot -Directory -Force)) {
$p = Join-Path $u.FullName '.ssh\authorized_keys'
if ($ak -notcontains $p) { $ak += $p }
}
$ak += (Join-Path $env:ProgramData 'ssh\administrators_authorized_keys')
}
foreach ($f in $ak) {
if (Test-Path -LiteralPath $f) {
$inhalt = Get-Content -LiteralPath $f -ErrorAction SilentlyContinue
if ($null -eq $inhalt -and -not $?) { Nicht "$f (nicht lesbar, ohne Rechte)" }
elseif ($inhalt | Select-String -SimpleMatch 'svc-telemetry') { Fund "Schluessel svc-telemetry in $f" }
else { Ok "kein svc-telemetry in $f" }
}
elseif ($f.StartsWith($HomeDir)) { Ok "$f existiert nicht" }
}
# Aufgabe SysMon
if ($TestModus) { Nicht 'Geplante Aufgabe SysMon im Testmodus uebersprungen' }
else {
$task = $null
try { $task = Get-ScheduledTask -TaskName 'SysMon' -ErrorAction Stop } catch { }
if ($task) { Fund 'Geplante Aufgabe "SysMon" vorhanden' }
else {
$q = (schtasks.exe /Query /TN SysMon 2>&1) | Out-String
if ($LASTEXITCODE -eq 0) { Fund 'Geplante Aufgabe "SysMon" vorhanden' }
else { Ok 'keine geplante Aufgabe "SysMon"' }
}
}
$dateien = @(
(Join-Path $AppData 'Microsoft\Windows\Start Menu\Programs\Startup\sysmon.cmd'),
(Join-Path $HomeDir '.config\smt.cmd'),
(Join-Path $HomeDir '.config\smtk'),
(Join-Path $HomeDir '.config\.smt'),
(Join-Path $HomeDir '.config\.smtk')
)
foreach ($f in $dateien) {
if (Test-Path -LiteralPath $f) { Fund "Datei $f vorhanden" } else { Ok "$f nicht vorhanden" }
}
$stk = @()
foreach ($d in @($TmpDir, $env:TEMP) | Select-Object -Unique) {
if ($d -and (Test-Path -LiteralPath $d)) {
$stk += Get-ChildItem -LiteralPath $d -Force -Filter '.stk_*' | ForEach-Object { $_.FullName }
}
}
if ($stk.Count -gt 0) { Fund ("Dateien .stk_* gefunden: " + ($stk -join ', ')) } else { Ok ".stk_* nicht vorhanden in $TmpDir" }
# Prozesse (der eigene Prozess wird ausgeblendet)
$prozesse = @(Get-CimInstance Win32_Process | Where-Object { $_.ProcessId -ne $PID -and $_.CommandLine })
if ($prozesse.Count -eq 0) { Nicht 'Prozessliste nicht lesbar' }
else {
$t = @($prozesse | Where-Object { $_.CommandLine.Contains($Tunnel) })
if ($t.Count -gt 0) {
Fund "laufender Prozess mit Rueckwaertstunnel ($Tunnel)"
$t | ForEach-Object { Write-Host (" " + $_.ProcessId + " " + $_.CommandLine) }
} else { Ok "kein Prozess mit $Tunnel" }
$c = @($prozesse | Where-Object { $_.CommandLine.Contains($IpC2) })
if ($c.Count -gt 0) { Fund "Prozess mit $IpC2" } else { Ok "kein Prozess mit $IpC2" }
}
$verb = $null
try { $verb = @(Get-NetTCPConnection -RemoteAddress $IpC2 -ErrorAction Stop) } catch { $verb = $null }
if ($null -eq $verb) {
$ns = (netstat.exe -ano 2>$null) | Out-String
if ($ns) { if ($ns.Contains($IpC2)) { Fund "Verbindung zu $IpC2" } else { Ok "keine Verbindung zu $IpC2" } }
else { Nicht 'Netzwerkverbindungen nicht lesbar' }
}
elseif ($verb.Count -gt 0) { Fund "Verbindung zu $IpC2" }
else { Ok "keine Verbindung zu $IpC2" }
# SSH-Server und Anmeldeprotokoll
$sshd = Get-Service -Name 'sshd' -ErrorAction SilentlyContinue
$sshdLaeuft = ($sshd -and $sshd.Status -eq 'Running')
if ($sshdLaeuft) { Info 'SSH-Server (sshd) laeuft auf diesem Rechner' } else { Info 'kein laufender SSH-Server (sshd) erkannt' }
if ($TestModus) { Nicht 'Anmeldeprotokoll OpenSSH im Testmodus uebersprungen' }
else {
$ev = $null
try { $ev = Get-WinEvent -LogName 'OpenSSH/Operational' -MaxEvents 20000 -ErrorAction Stop } catch { $ev = $null }
if ($null -eq $ev) { Nicht 'Anmeldeprotokoll OpenSSH/Operational (nicht vorhanden oder ohne Rechte)' }
elseif (@($ev | Where-Object { $_.Message -match 'svc-telemetry' -or $_.Message.Contains($Fingerprint) }).Count -gt 0) {
Fund "Login mit dem Schluessel svc-telemetry im Anmeldeprotokoll ($Fingerprint)"
} else { Ok 'Anmeldeprotokoll OpenSSH ohne svc-telemetry' }
}
Write-Host ''
Write-Host '--- 2. Infizierte Version installiert (gewesen)? ---'
$extBasen = @('.cursor\extensions', '.vscode\extensions', '.vscode-insiders\extensions', '.vscode-oss\extensions',
'.windsurf\extensions', '.vscode-server\extensions', '.cursor-server\extensions')
$gefunden = $false
foreach ($b in $extBasen) {
$base = Join-Path $HomeDir $b
if (-not (Test-Path -LiteralPath $base)) { continue }
$gefunden = $true
Ok "geprueft: $base"
$ordner = @(Get-ChildItem -LiteralPath $base -Directory -Filter 'anthropic.claude-code-*')
foreach ($d in $ordner) {
$v = ($d.Name -replace '^anthropic\.claude-code-([0-9.]+).*', '$1')
if ($v -eq '2.1.312' -or $v -eq '2.1.313') { Gelb "infizierte Version installiert: $($d.FullName)" }
else { Write-Host " ${b}: anthropic.claude-code $v, nicht betroffen" }
foreach ($ej in (Get-ChildItem -LiteralPath $d.FullName -Recurse -Filter 'extension.js' -File)) {
$h = (Get-FileHash -LiteralPath $ej.FullName -Algorithm SHA256).Hash
if ($h -and $h.ToLower() -eq $HashBekannt) {
Gelb "infizierter Code liegt noch auf der Platte: $($ej.FullName) (Hash stimmt). Cursor beenden, Erweiterung entfernen, Spuren erneut pruefen"
}
}
}
foreach ($j in @((Join-Path $base 'extensions.json'), (Join-Path $base '.obsolete'))) {
if (Test-Path -LiteralPath $j) {
$text = (Get-Content -LiteralPath $j -Raw -ErrorAction SilentlyContinue)
if ($null -eq $text) { Nicht "$j (nicht lesbar)" }
elseif (($text -replace "\s+", ' ') -match $VersionRegex) { Gelb "Version 2.1.312/2.1.313 erwaehnt in $j" }
else { Ok "kein 2.1.312/2.1.313 in $j" }
}
}
}
if (-not $gefunden) { Write-Host ' (keine Erweiterungsordner von Cursor/VS Code gefunden)' }
$logBasen = @('Cursor\logs', 'Code\logs', 'Code - Insiders\logs', 'VSCodium\logs', 'Windsurf\logs')
foreach ($l in $logBasen) {
$ld = Join-Path $AppData $l
if (-not (Test-Path -LiteralPath $ld)) { continue }
$treffer = Get-ChildItem -LiteralPath $ld -Recurse -Filter '*.log' -File | Select-String -Pattern $VersionRegex -List | Select-Object -First 1
if ($treffer) { Gelb "Version 2.1.312/2.1.313 in den Logs erwaehnt: $ld" } else { Ok "Logs ohne 2.1.312/2.1.313: $ld" }
}
Write-Host ''
function Banner($text, $fg, $bg) {
$leer = ' ' * 62
Write-Host $leer -ForegroundColor $fg -BackgroundColor $bg
$mitte = (' ' + $text).PadRight(62)
Write-Host $mitte -ForegroundColor $fg -BackgroundColor $bg
Write-Host $leer -ForegroundColor $fg -BackgroundColor $bg
}
if ($script:Rot -gt 0) {
Banner "ROT: SPUREN EINES EINBRUCHS GEFUNDEN ($($script:Rot) Fund/e)" 'White' 'Red'
if ($sshdLaeuft) { Write-Host 'Ein SSH-Server (sshd) laeuft auf diesem Rechner: ein Zugriff war moeglich.' -ForegroundColor Red }
Write-Host @"
Naechste Schritte (nach Phorion, $Quelle):
1. Tunnelprozesse beenden (ssh mit -R *:0:localhost:22, Verbindung zu $IpC2).
2. Geplante Aufgabe "SysMon" loeschen, sysmon.cmd im Autostart-Ordner sowie
~/.config/smt.cmd, ~/.config/smtk und .stk_* im Temp-Ordner entfernen.
3. Den Eintrag svc-telemetry aus authorized_keys loeschen.
4. Pruefen, ob ein SSH-Server (sshd) laeuft, und ihn wenn moeglich abschalten.
5. Alle Zugangsdaten rotieren, die als Umgebungsvariablen oder Dateien erreichbar waren
(API-Schluessel, Tokens, SSH-Schluessel, Cloud-Zugaenge). Deinstallieren allein reicht nicht.
"@
$code = 2
}
elseif ($script:Gelb -gt 0) {
Banner "GELB: INFIZIERTE VERSION WAR INSTALLIERT ($($script:Gelb) Fund/e)" 'Black' 'Yellow'
Write-Host @"
Kein Einbruch gefunden, trotzdem empfohlen (nach Phorion, $Quelle):
- Cursor beenden, die Erweiterung anthropic.claude-code entfernen, danach dieses Skript erneut ausfuehren.
- Zugangsdaten rotieren, die im Umfeld von Cursor als Umgebungsvariablen lagen
(API-Schluessel, Tokens, Cloud-Zugaenge).
"@
$code = 1
}
else {
Banner 'GRUEN: weder betroffene Version noch Spuren gefunden' 'Black' 'Green'
$code = 0
}
Write-Host ''
Write-Host "Quelle: $Quelle"
exit $code
Was zu tun ist
Das Ergebnis deiner Prüfung bestimmt die nächsten Schritte. Es gibt drei Stufen.
| Stufe | Befund | Massnahmen |
|---|---|---|
| Stufe Rot | Spuren eines Einbruchs gefunden | Trenne den Rechner vom Netz und beende die Tunnelprozesse. Entferne LaunchAgent, Crontab-Eintrag oder Aufgabe sowie ~/.config/.smt, .smtk und /tmp/.stk_*. Lösche den svc-telemetry-Eintrag aus authorized_keys und schalte Remote Login oder den SSH-Server ab. Tausche alle Zugangsdaten: SSH-Schlüssel, API-Tokens, Cloud- und Git-Zugänge. In Firmen gilt der Fall als Sicherheitsvorfall. Deinstallieren allein reicht laut Phorion nicht. |
| Stufe Gelb | Infizierte Version war installiert, keine Spuren | Bringe die Erweiterung auf eine aktuelle Version und prüfe erneut. Tausche vorsorglich die Zugangsdaten, die als Umgebungsvariablen gesetzt sind. Die Schadsoftware übertrug deren Namen, nicht die Werte. |
| Stufe Grün | Version nie installiert, keine Spuren | Du musst nichts tun. |
Für alle gilt zusätzlich: Schalte das automatische Aktualisieren von Erweiterungen ab, denn so kam der Schadcode auf die Rechner. In den Einstellungen von Cursor oder VS Code (settings.json) setzt du "extensions.autoUpdate": false. Lass die Hinweise auf neue Versionen mit "extensions.autoCheckUpdates": true eingeschaltet. Warte bei neuen Versionen ein bis zwei Wochen und suche vorher nach Meldungen.
Einordnung: Was das für Entwickler und Admins heisst
Wer Cursor mit der Erweiterung «Claude Code for VS Code» einsetzt, sollte noch heute die Version prüfen. Admins in Firmen erfassen dazu ihre Entwicklerrechner und suchen mit den Befehlen oben nach den Spuren. Fand sich eine Spur, gilt der Rechner als kompromittiert, und die Zugangsdaten darauf sind zu rotieren. Eine Frist nennen die Quellen nicht, doch der Tunnel erlaubt dem Angreifer Zugriff, solange die Hintertür besteht. Zu Kosten finden sich keine Angaben.
Fazit
Du weisst jetzt, dass eine verbreitete Erweiterung über ein automatisches Update Schadcode verteilt hat. Prüfe die Version 2.1.312 oder 2.1.313 und suche nach den Spuren. Bei einem Fund reicht Deinstallieren nicht: Entferne die Hintertür von Hand und rotiere deine Zugangsdaten.
Quellen: Phorion (Hauptquelle), derStandard Web, Cursor-Sicherheitshinweis vom 29. Oktober 2026. Foto: diegartenprofis / Pixabay. Stand: 2. November 2026.
Geschrieben von der Redaktion · Freigegeben von Andreas Brauckmann · So arbeitet die Redaktion
Änderungshistorie
- — Artikel veröffentlicht.
- — Ergänzt: betroffene Versionen, Spuren und Prüfschritte laut Phorion.