Zum Hauptinhalt springen

Sicherheit

Vertrauensmodell für persönliche Assistenten: Diese Hinweise gehen von einer vertrauenswürdigen Operator-Grenze pro Gateway aus (Einzelbenutzer-/persönliches-Assistent-Modell). OpenClaw ist keine feindliche Multi-Tenant-Sicherheitsgrenze für mehrere gegensätzliche Benutzer, die sich einen Agenten/ein Gateway teilen. Wenn Sie Betrieb mit gemischtem Vertrauen oder gegensätzlichen Benutzern benötigen, trennen Sie die Vertrauensgrenzen (separates Gateway + separate Anmeldedaten, idealerweise separate OS-Benutzer/Hosts).
Auf dieser Seite: Vertrauensmodell | Schnellprüfung | Gehärtete Basislinie | DM-Zugriffsmodell | Härtung der Konfiguration | Reaktion auf Vorfälle

Zuerst der Geltungsbereich: Sicherheitsmodell für persönliche Assistenten

Die Sicherheitshinweise für OpenClaw gehen von einer Bereitstellung als persönlicher Assistent aus: eine vertrauenswürdige Operator-Grenze, potenziell viele Agenten.
  • Unterstützte Sicherheitslage: ein Benutzer/eine Vertrauensgrenze pro Gateway (bevorzugt ein OS-Benutzer/Host/VPS pro Grenze).
  • Keine unterstützte Sicherheitsgrenze: ein gemeinsames Gateway/ein gemeinsamer Agent für gegenseitig nicht vertrauende oder gegensätzliche Benutzer.
  • Wenn Isolierung gegenüber gegensätzlichen Benutzern erforderlich ist, trennen Sie nach Vertrauensgrenzen (separates Gateway + separate Anmeldedaten und idealerweise separate OS-Benutzer/Hosts).
  • Wenn mehrere nicht vertrauende Benutzer einem toolfähigen Agenten Nachrichten senden können, behandeln Sie sie so, als würden sie dieselbe delegierte Tool-Befugnis für diesen Agenten teilen.
Diese Seite erklärt die Härtung innerhalb dieses Modells. Sie erhebt keinen Anspruch auf feindliche Multi-Tenant-Isolierung auf einem gemeinsam genutzten Gateway.

Schnellprüfung: openclaw security audit

Siehe auch: Formale Verifikation (Sicherheitsmodelle) Führen Sie dies regelmäßig aus (insbesondere nach Konfigurationsänderungen oder dem Freigeben von Netzwerkoberflächen):
openclaw security audit
openclaw security audit --deep
openclaw security audit --fix
openclaw security audit --json
security audit --fix bleibt absichtlich eng gefasst: Es stellt gängige offene Gruppenrichtlinien auf Allowlists um, setzt logging.redactSensitive: "tools" zurück, verschärft Berechtigungen für Status-/Konfigurations-/Include-Dateien und verwendet unter Windows ACL-Resets statt POSIX-chmod. Es markiert häufige Stolperfallen (Gateway-Authentifizierungsexposition, Browser-Control-Exposition, Elevated-Allowlists, Dateisystemberechtigungen, großzügige Exec-Freigaben und Tool-Exposition auf offenen Kanälen). OpenClaw ist sowohl ein Produkt als auch ein Experiment: Sie verbinden Frontier-Modellverhalten mit realen Messaging-Oberflächen und realen Tools. Es gibt kein „perfekt sicheres“ Setup. Ziel ist ein bewusster Umgang mit:
  • wer mit Ihrem Bot sprechen kann
  • wo der Bot handeln darf
  • worauf der Bot zugreifen darf
Beginnen Sie mit dem kleinsten Zugriff, der noch funktioniert, und erweitern Sie ihn erst mit wachsendem Vertrauen.

Bereitstellung und Host-Vertrauen

OpenClaw geht davon aus, dass Host und Konfigurationsgrenze vertrauenswürdig sind:
  • Wenn jemand den Status/die Konfiguration des Gateway-Hosts (~/.openclaw, einschließlich openclaw.json) ändern kann, behandeln Sie diese Person als vertrauenswürdigen Operator.
  • Ein Gateway für mehrere gegenseitig nicht vertrauende/gegensätzliche Operatoren zu betreiben, ist kein empfohlenes Setup.
  • Für Teams mit gemischtem Vertrauen trennen Sie Vertrauensgrenzen mit separaten Gateways (oder mindestens separaten OS-Benutzern/Hosts).
  • Empfohlener Standard: ein Benutzer pro Rechner/Host (oder VPS), ein Gateway für diesen Benutzer und ein oder mehrere Agenten in diesem Gateway.
  • Innerhalb einer Gateway-Instanz ist authentifizierter Operator-Zugriff eine vertrauenswürdige Control-Plane-Rolle, keine Tenant-Rolle pro Benutzer.
  • Sitzungsbezeichner (sessionKey, Sitzungs-IDs, Labels) sind Routing-Selektoren, keine Autorisierungstoken.
  • Wenn mehrere Personen einem toolfähigen Agenten Nachrichten senden können, kann jede von ihnen dieselbe Berechtigungsmenge dieses Agenten steuern. Isolierung von Sitzungen/Memory pro Benutzer hilft beim Datenschutz, verwandelt einen gemeinsamen Agenten aber nicht in eine Host-Autorisierung pro Benutzer.

Gemeinsamer Slack-Workspace: reales Risiko

Wenn „jeder in Slack dem Bot Nachrichten senden kann“, besteht das Kernrisiko in delegierter Tool-Befugnis:
  • jeder erlaubte Absender kann Tool-Aufrufe (exec, Browser, Netzwerk-/Datei-Tools) innerhalb der Richtlinie des Agenten auslösen;
  • Prompt-/Inhaltsinjektion eines Absenders kann Aktionen verursachen, die gemeinsamen Status, Geräte oder Ausgaben beeinflussen;
  • wenn ein gemeinsamer Agent sensible Anmeldedaten/Dateien hat, kann jeder erlaubte Absender potenziell Exfiltration über Tool-Nutzung steuern.
Verwenden Sie für Team-Workflows separate Agenten/Gateways mit minimalen Tools; halten Sie Agenten mit persönlichen Daten privat.

Gemeinsam genutzter Unternehmens-Agent: akzeptables Muster

Dies ist akzeptabel, wenn alle Personen, die diesen Agenten verwenden, innerhalb derselben Vertrauensgrenze liegen (zum Beispiel ein Unternehmensteam) und der Agent strikt auf geschäftliche Zwecke beschränkt ist.
  • führen Sie ihn auf einem dedizierten Rechner/VM/Container aus;
  • verwenden Sie einen dedizierten OS-Benutzer + dedizierten Browser/Profile/Konten für diese Runtime;
  • melden Sie diese Runtime nicht bei persönlichen Apple-/Google-Konten oder persönlichen Passwortmanagern/Browserprofilen an.
Wenn Sie persönliche und geschäftliche Identitäten in derselben Runtime mischen, heben Sie die Trennung auf und erhöhen das Risiko der Offenlegung persönlicher Daten.

Vertrauenskonzept für Gateway und Node

Behandeln Sie Gateway und Node als eine Operator-Vertrauensdomäne mit unterschiedlichen Rollen:
  • Gateway ist die Control Plane und Richtlinienoberfläche (gateway.auth, Tool-Richtlinie, Routing).
  • Node ist die mit diesem Gateway gekoppelte Remote-Ausführungsoberfläche (Befehle, Geräteaktionen, hostlokale Fähigkeiten).
  • Ein am Gateway authentifizierter Aufrufer ist im Gateway-Bereich vertrauenswürdig. Nach dem Pairing sind Node-Aktionen vertrauenswürdige Operator-Aktionen auf diesem Node.
  • sessionKey ist Routing-/Kontextauswahl, keine Authentifizierung pro Benutzer.
  • Exec-Freigaben (Allowlist + Nachfrage) sind Leitplanken für Operator-Intention, keine feindliche Multi-Tenant-Isolierung.
  • Der Produktstandard von OpenClaw für vertrauenswürdige Einzeloperator-Setups ist, dass Host-Exec auf gateway/node ohne Freigabe-Prompts erlaubt ist (security="full", ask="off", sofern Sie es nicht verschärfen). Dieser Standard ist absichtlich UX und nicht an sich eine Schwachstelle.
  • Exec-Freigaben binden den exakten Anfragekontext und bestmöglich direkte lokale Dateiparameter; sie modellieren nicht semantisch jeden Laufzeit-/Interpreter-Loader-Pfad. Verwenden Sie Sandboxing und Host-Isolierung für starke Grenzen.
Wenn Sie Isolierung gegenüber feindlichen Benutzern benötigen, trennen Sie Vertrauensgrenzen nach OS-Benutzer/Host und betreiben Sie separate Gateways.

Matrix der Vertrauensgrenzen

Verwenden Sie dies als Schnellmodell bei der Risikobewertung:
Grenze oder KontrolleBedeutungHäufige Fehlinterpretation
gateway.auth (Token/Passwort/Trusted-Proxy/Device-Auth)Authentifiziert Aufrufer gegenüber Gateway-APIs„Braucht pro Nachricht Signaturen auf jedem Frame, um sicher zu sein“
sessionKeyRouting-Schlüssel für Kontext-/Sitzungsauswahl„Session-Key ist eine Benutzerauthentifizierungsgrenze“
Guardrails für Prompts/InhalteReduzieren das Risiko von Modellmissbrauch„Prompt-Injection allein beweist einen Auth-Bypass“
canvas.eval / Browser-AuswertungAbsichtliche Operator-Fähigkeit, wenn aktiviert„Jedes JS-eval ist in diesem Vertrauensmodell automatisch eine Schwachstelle“
Lokale TUI-!-ShellExplizit operatorausgelöste lokale Ausführung„Bequemer lokaler Shell-Befehl ist Remote-Injection“
Node-Pairing und Node-BefehleOperator-Level-Remote-Ausführung auf gepaarten Geräten„Remote-Gerätesteuerung sollte standardmäßig als Zugriff durch nicht vertrauende Benutzer behandelt werden“

Bewusst keine Schwachstellen

Diese Muster werden häufig gemeldet und normalerweise ohne Maßnahme geschlossen, sofern kein echter Boundary-Bypass gezeigt wird:
  • Reine Prompt-Injection-Ketten ohne Richtlinien-/Auth-/Sandbox-Bypass.
  • Behauptungen, die von feindlichem Multi-Tenant-Betrieb auf einem gemeinsam genutzten Host/einer gemeinsam genutzten Konfiguration ausgehen.
  • Behauptungen, die normalen Read-Path-Zugriff für Operatoren (zum Beispiel sessions.list/sessions.preview/chat.history) in einem Shared-Gateway-Setup als IDOR einstufen.
  • Befunde zu reinen localhost-Bereitstellungen (zum Beispiel HSTS bei einem nur auf loopback laufenden Gateway).
  • Befunde zu Discord-Eingangs-Webhook-Signaturen für Eingangs-Pfade, die in diesem Repo nicht existieren.
  • Berichte, die Pairing-Metadaten von Node als versteckte zweite Freigabeebene pro Befehl für system.run behandeln, obwohl die eigentliche Ausführungsgrenze weiterhin die globale Node-Befehlsrichtlinie des Gateway plus die lokalen Exec-Freigaben des Node sind.
  • Befunde zu „fehlender Autorisierung pro Benutzer“, die sessionKey als Auth-Token behandeln.

Checkliste für Sicherheitsforscher vorab

Bevor Sie ein GHSA eröffnen, prüfen Sie all dies:
  1. Die Reproduktion funktioniert noch auf aktuellem main oder aktuellem Release.
  2. Der Bericht enthält den exakten Codepfad (file, Funktion, Zeilenbereich) und die getestete Version/Commit.
  3. Die Auswirkung überschreitet eine dokumentierte Vertrauensgrenze (nicht nur Prompt-Injection).
  4. Die Behauptung ist nicht unter Out of Scope aufgeführt.
  5. Bestehende Advisories wurden auf Duplikate geprüft (verwenden Sie bei Bedarf dieselbe kanonische GHSA).
  6. Annahmen zur Bereitstellung sind explizit (loopback/lokal vs. exponiert, vertrauenswürdige vs. nicht vertrauenswürdige Operatoren).

Gehärtete Basislinie in 60 Sekunden

Verwenden Sie zunächst diese Basislinie und aktivieren Sie dann Tools selektiv pro vertrauenswürdigem Agenten wieder:
{
  gateway: {
    mode: "local",
    bind: "loopback",
    auth: { mode: "token", token: "replace-with-long-random-token" },
  },
  session: {
    dmScope: "per-channel-peer",
  },
  tools: {
    profile: "messaging",
    deny: ["group:automation", "group:runtime", "group:fs", "sessions_spawn", "sessions_send"],
    fs: { workspaceOnly: true },
    exec: { security: "deny", ask: "always" },
    elevated: { enabled: false },
  },
  channels: {
    whatsapp: { dmPolicy: "pairing", groups: { "*": { requireMention: true } } },
  },
}
Dadurch bleibt das Gateway lokal, DMs werden isoliert, und Control-Plane-/Runtime-Tools sind standardmäßig deaktiviert.

Schnellregel für gemeinsame Posteingänge

Wenn mehr als eine Person Ihrem Bot DMs senden kann:
  • Setzen Sie session.dmScope: "per-channel-peer" (oder "per-account-channel-peer" für Mehrfachkonten-Kanäle).
  • Behalten Sie dmPolicy: "pairing" oder strikte Allowlists bei.
  • Kombinieren Sie gemeinsame DMs niemals mit breitem Tool-Zugriff.
  • Das härtet kooperative/gemeinsame Posteingänge, ist aber nicht als feindliche Co-Tenant-Isolierung gedacht, wenn Benutzer Schreibzugriff auf Host/Konfiguration teilen.

Modell für Kontextsichbarkeit

OpenClaw trennt zwei Konzepte:
  • Auslöseautorisierung: wer den Agenten auslösen darf (dmPolicy, groupPolicy, Allowlists, Mention-Gates).
  • Kontextsichbarkeit: welcher zusätzliche Kontext in die Modell-Eingabe injiziert wird (Antworttext, zitierter Text, Thread-Historie, Metadaten weitergeleiteter Nachrichten).
Allowlists steuern Trigger und Befehlsautorisierung. Die Einstellung contextVisibility steuert, wie zusätzlicher Kontext (zitierte Antworten, Thread-Wurzeln, abgerufene Historie) gefiltert wird:
  • contextVisibility: "all" (Standard) belässt zusätzlichen Kontext wie empfangen.
  • contextVisibility: "allowlist" filtert zusätzlichen Kontext auf Absender, die durch die aktiven Allowlist-Prüfungen erlaubt sind.
  • contextVisibility: "allowlist_quote" verhält sich wie allowlist, behält aber eine explizit zitierte Antwort bei.
Setzen Sie contextVisibility pro Kanal oder pro Raum/Unterhaltung. Siehe Gruppenchats für Einrichtungsdetails. Hinweise zur Triage von Advisories:
  • Behauptungen, die nur zeigen, dass „das Modell zitierten oder historischen Text von nicht in der Allowlist enthaltenen Absendern sehen kann“, sind Härtungsbefunde, die mit contextVisibility adressiert werden können, aber für sich genommen kein Auth- oder Sandbox-Bypass sind.
  • Um sicherheitsrelevant zu sein, müssen Berichte weiterhin einen nachgewiesenen Byass einer Vertrauensgrenze zeigen (Auth, Richtlinie, Sandbox, Freigabe oder eine andere dokumentierte Grenze).

Was das Audit prüft (überblicksartig)

  • Eingangszugriff (DM-Richtlinien, Gruppenrichtlinien, Allowlists): Können Fremde den Bot auslösen?
  • Auswirkungsradius der Tools (elevated Tools + offene Räume): Könnte Prompt-Injection zu Shell-/Datei-/Netzwerkaktionen führen?
  • Drift bei Exec-Freigaben (security=full, autoAllowSkills, Interpreter-Allowlists ohne strictInlineEval): Tun die Leitplanken für Host-Exec noch das, was Sie erwarten?
    • security="full" ist eine breit gefasste Haltungswarnung, kein Beweis für einen Fehler. Es ist der gewählte Standard für vertrauenswürdige persönliche Assistenten; verschärfen Sie dies nur, wenn Ihr Bedrohungsmodell Freigabe- oder Allowlist-Leitplanken erfordert.
  • Netzwerkexposition (Gateway-Bind/Auth, Tailscale Serve/Funnel, schwache/kurze Auth-Token).
  • Browser-Control-Exposition (Remote-Nodes, Relay-Ports, Remote-CDP-Endpunkte).
  • Lokale Datenträgerhygiene (Berechtigungen, Symlinks, Config-Includes, Pfade in „synchronisierten Ordnern“).
  • Plugins (Extensions existieren ohne explizite Allowlist).
  • Richtlinien-Drift/Fehlkonfiguration (Sandbox-Docker-Einstellungen konfiguriert, aber Sandbox-Modus aus; wirkungslose Muster in gateway.nodes.denyCommands, weil nur exakte Befehlsnamen übereinstimmen, zum Beispiel system.run, nicht aber Shell-Text; gefährliche Einträge in gateway.nodes.allowCommands; globales tools.profile="minimal" durch Agentenprofile überschrieben; Tools aus Extension-Plugins unter permissiver Tool-Richtlinie erreichbar).
  • Drift bei Laufzeiterwartungen (zum Beispiel die Annahme, implizites Exec bedeute weiterhin sandbox, obwohl tools.exec.host jetzt standardmäßig auto ist, oder explizit tools.exec.host="sandbox" zu setzen, während der Sandbox-Modus aus ist).
  • Modellhygiene (warnt, wenn konfigurierte Modelle veraltet aussehen; keine harte Sperre).
Wenn Sie --deep ausführen, versucht OpenClaw zusätzlich eine Best-Effort-Live-Prüfung des Gateway.

Zuordnung der Speicherung von Anmeldedaten

Verwenden Sie dies beim Audit von Zugriffen oder bei der Entscheidung, was gesichert werden soll:
  • WhatsApp: ~/.openclaw/credentials/whatsapp/<accountId>/creds.json
  • Telegram-Bot-Token: config/env oder channels.telegram.tokenFile (nur reguläre Datei; Symlinks werden abgelehnt)
  • Discord-Bot-Token: config/env oder SecretRef (env/file/exec-Provider)
  • Slack-Tokens: config/env (channels.slack.*)
  • Pairing-Allowlists:
    • ~/.openclaw/credentials/<channel>-allowFrom.json (Standardkonto)
    • ~/.openclaw/credentials/<channel>-<accountId>-allowFrom.json (Nicht-Standardkonten)
  • Modell-Auth-Profile: ~/.openclaw/agents/<agentId>/agent/auth-profiles.json
  • Dateibasierte Secret-Payload (optional): ~/.openclaw/secrets.json
  • Legacy-OAuth-Import: ~/.openclaw/credentials/oauth.json

Checkliste für das Sicherheitsaudit

Wenn das Audit Befunde ausgibt, behandeln Sie dies in dieser Prioritätsreihenfolge:
  1. Alles mit „open“ + aktivierten Tools: Sperren Sie zuerst DMs/Gruppen (Pairing/Allowlists), verschärfen Sie dann Tool-Richtlinie/Sandboxing.
  2. Öffentliche Netzwerkexposition (LAN-Bind, Funnel, fehlende Auth): sofort beheben.
  3. Remote-Exposition von Browser Control: behandeln Sie das wie Operator-Zugriff (nur Tailnet, Nodes bewusst pairen, keine öffentliche Exposition).
  4. Berechtigungen: Stellen Sie sicher, dass Status/Konfiguration/Anmeldedaten/Auth nicht für Gruppe/alle lesbar sind.
  5. Plugins/Extensions: Laden Sie nur, was Sie explizit vertrauen.
  6. Modellwahl: Bevorzugen Sie moderne, gegen Instruktionsmanipulation gehärtete Modelle für jeden Bot mit Tools.

Glossar für das Sicherheitsaudit

Hochsignifikante checkId-Werte, die Sie in realen Bereitstellungen am wahrscheinlichsten sehen werden (nicht vollständig):
checkIdSchweregradWarum es wichtig istPrimärer Schlüssel/Pfad zur BehebungAuto-Fix
fs.state_dir.perms_world_writablekritischAndere Benutzer/Prozesse können den gesamten OpenClaw-Status verändernDateisystemberechtigungen auf ~/.openclawja
fs.state_dir.perms_group_writableWarnungBenutzer der Gruppe können den gesamten OpenClaw-Status verändernDateisystemberechtigungen auf ~/.openclawja
fs.state_dir.perms_readableWarnungStatusverzeichnis ist für andere lesbarDateisystemberechtigungen auf ~/.openclawja
fs.state_dir.symlinkWarnungZiel des Statusverzeichnisses wird zu einer anderen VertrauensgrenzeDateisystemlayout des Statusverzeichnissesnein
fs.config.perms_writablekritischAndere können Auth/Tool-Richtlinie/Konfiguration ändernDateisystemberechtigungen auf ~/.openclaw/openclaw.jsonja
fs.config.symlinkWarnungZiel der Konfiguration wird zu einer anderen VertrauensgrenzeDateisystemlayout der Konfigurationsdateinein
fs.config.perms_group_readableWarnungGruppenbenutzer können Konfigurationstokens/-einstellungen lesenDateisystemberechtigungen auf Konfigurationsdateija
fs.config.perms_world_readablekritischKonfiguration kann Tokens/Einstellungen offenlegenDateisystemberechtigungen auf Konfigurationsdateija
fs.config_include.perms_writablekritischInclude-Datei der Konfiguration kann von anderen geändert werdenInclude-Dateiberechtigungen, auf die aus openclaw.json verwiesen wirdja
fs.config_include.perms_group_readableWarnungGruppenbenutzer können eingeschlossene Secrets/Einstellungen lesenInclude-Dateiberechtigungen, auf die aus openclaw.json verwiesen wirdja
fs.config_include.perms_world_readablekritischEingeschlossene Secrets/Einstellungen sind für alle lesbarInclude-Dateiberechtigungen, auf die aus openclaw.json verwiesen wirdja
fs.auth_profiles.perms_writablekritischAndere können gespeicherte Modell-Anmeldedaten einschleusen oder ersetzenBerechtigungen von agents/<agentId>/agent/auth-profiles.jsonja
fs.auth_profiles.perms_readableWarnungAndere können API-Schlüssel und OAuth-Tokens lesenBerechtigungen von agents/<agentId>/agent/auth-profiles.jsonja
fs.credentials_dir.perms_writablekritischAndere können Kanal-Pairing-/Anmeldedatenstatus verändernDateisystemberechtigungen auf ~/.openclaw/credentialsja
fs.credentials_dir.perms_readableWarnungAndere können Kanal-Anmeldedatenstatus lesenDateisystemberechtigungen auf ~/.openclaw/credentialsja
fs.sessions_store.perms_readableWarnungAndere können Sitzungsprotokolle/Metadaten lesenBerechtigungen des Sitzungsspeichersja
fs.log_file.perms_readableWarnungAndere können redigierte, aber dennoch sensible Logs lesenBerechtigungen der Gateway-Logdateija
fs.synced_dirWarnungStatus/Konfiguration in iCloud/Dropbox/Drive erweitert Exposition von Tokens/TranskriptenKonfiguration/Status aus synchronisierten Ordnern verlagernnein
gateway.bind_no_authkritischRemote-Bind ohne Shared Secretgateway.bind, gateway.auth.*nein
gateway.loopback_no_authkritischRückwärtsproxytes loopback kann unauthentifiziert werdengateway.auth.*, Proxy-Setupnein
gateway.trusted_proxies_missingWarnungReverse-Proxy-Header sind vorhanden, aber nicht vertrauenswürdiggateway.trustedProxiesnein
gateway.http.no_authWarnung/kritischGateway-HTTP-APIs mit auth.mode="none" erreichbargateway.auth.mode, gateway.http.endpoints.*nein
gateway.http.session_key_override_enabledInfoAufrufer der HTTP-API können sessionKey überschreibengateway.http.allowSessionKeyOverridenein
gateway.tools_invoke_http.dangerous_allowWarnung/kritischAktiviert gefährliche Tools über die HTTP-API erneutgateway.tools.allownein
gateway.nodes.allow_commands_dangerousWarnung/kritischAktiviert Node-Befehle mit hoher Wirkung (Kamera/Bildschirm/Kontakte/Kalender/SMS)gateway.nodes.allowCommandsnein
gateway.nodes.deny_commands_ineffectiveWarnungPattern-artige Deny-Einträge gleichen weder Shell-Text noch Gruppen abgateway.nodes.denyCommandsnein
gateway.tailscale_funnelkritischÖffentliche Exposition im Internetgateway.tailscale.modenein
gateway.tailscale_serveInfoExposition im Tailnet ist über Serve aktiviertgateway.tailscale.modenein
gateway.control_ui.allowed_origins_requiredkritischNicht-loopback-Control-UI ohne explizite Browser-Origin-Allowlistgateway.controlUi.allowedOriginsnein
gateway.control_ui.allowed_origins_wildcardWarnung/kritischallowedOrigins=["*"] deaktiviert Browser-Origin-Allowlistinggateway.controlUi.allowedOriginsnein
gateway.control_ui.host_header_origin_fallbackWarnung/kritischAktiviert Host-Header-Origin-Fallback (Abschwächung des Schutzes gegen DNS-Rebinding)gateway.controlUi.dangerouslyAllowHostHeaderOriginFallbacknein
gateway.control_ui.insecure_authWarnungKompatibilitätsschalter für unsichere Authentifizierung aktiviertgateway.controlUi.allowInsecureAuthnein
gateway.control_ui.device_auth_disabledkritischDeaktiviert die Prüfung der Geräteidentitätgateway.controlUi.dangerouslyDisableDeviceAuthnein
gateway.real_ip_fallback_enabledWarnung/kritischVertrauen auf X-Real-IP-Fallback kann Source-IP-Spoofing über Proxy-Fehlkonfiguration ermöglichengateway.allowRealIpFallback, gateway.trustedProxiesnein
gateway.token_too_shortWarnungKurzes Shared Token ist leichter per Brute Force zu erratengateway.auth.tokennein
gateway.auth_no_rate_limitWarnungExponierte Auth ohne Rate Limit erhöht Brute-Force-Risikogateway.auth.rateLimitnein
gateway.trusted_proxy_authkritischProxy-Identität wird jetzt zur Authentifizierungsgrenzegateway.auth.mode="trusted-proxy"nein
gateway.trusted_proxy_no_proxieskritischTrusted-Proxy-Auth ohne vertrauenswürdige Proxy-IPs ist unsichergateway.trustedProxiesnein
gateway.trusted_proxy_no_user_headerkritischTrusted-Proxy-Auth kann Benutzeridentität nicht sicher auflösengateway.auth.trustedProxy.userHeadernein
gateway.trusted_proxy_no_allowlistWarnungTrusted-Proxy-Auth akzeptiert jeden authentifizierten Upstream-Benutzergateway.auth.trustedProxy.allowUsersnein
gateway.probe_auth_secretref_unavailableWarnungDeep-Probe konnte Auth-SecretRefs in diesem Befehlspfad nicht auflösenAuth-Quelle für Deep-Probe / Verfügbarkeit von SecretRefnein
gateway.probe_failedWarnung/kritischLive-Probe des Gateway ist fehlgeschlagenErreichbarkeit/Auth des Gatewaynein
discovery.mdns_full_modeWarnung/kritischVollmodus von mDNS bewirbt Metadaten wie cliPath/sshPort im lokalen Netzwerkdiscovery.mdns.mode, gateway.bindnein
config.insecure_or_dangerous_flagsWarnungIrgendwelche unsicheren/gefährlichen Debug-Flags sind aktiviertmehrere Schlüssel (siehe Befunddetails)nein
config.secrets.gateway_password_in_configWarnungGateway-Passwort wird direkt in der Konfiguration gespeichertgateway.auth.passwordnein
config.secrets.hooks_token_in_configWarnungBearer-Token für Hooks wird direkt in der Konfiguration gespeicherthooks.tokennein
hooks.token_reuse_gateway_tokenkritischHook-Ingress-Token entsperrt auch die Gateway-Authentifizierunghooks.token, gateway.auth.tokennein
hooks.token_too_shortWarnungLeichtere Brute-Force auf Hook-Ingresshooks.tokennein
hooks.default_session_key_unsetWarnungHook-Agent-Läufe verteilen sich auf generierte Sitzungen pro Anfragehooks.defaultSessionKeynein
hooks.allowed_agent_ids_unrestrictedWarnung/kritischAuthentifizierte Hook-Aufrufer können an beliebige konfigurierte Agenten routenhooks.allowedAgentIdsnein
hooks.request_session_key_enabledWarnung/kritischExterner Aufrufer kann sessionKey auswählenhooks.allowRequestSessionKeynein
hooks.request_session_key_prefixes_missingWarnung/kritischKeine Begrenzung für externe Session-Key-Formenhooks.allowedSessionKeyPrefixesnein
hooks.path_rootkritischHook-Pfad ist /, was Kollision oder Fehlrouting erleichterthooks.pathnein
hooks.installs_unpinned_npm_specsWarnungInstallationsdatensätze von Hooks sind nicht auf unveränderliche npm-Spezifikationen festgelegtInstallationsmetadaten von Hooksnein
hooks.installs_missing_integrityWarnungInstallationsdatensätze von Hooks enthalten keine IntegritätsmetadatenInstallationsmetadaten von Hooksnein
hooks.installs_version_driftWarnungInstallationsdatensätze von Hooks weichen von installierten Paketen abInstallationsmetadaten von Hooksnein
logging.redact_offWarnungSensible Werte gelangen in Logs/Statuslogging.redactSensitiveja
browser.control_invalid_configWarnungKonfiguration für Browser Control ist bereits vor der Laufzeit ungültigbrowser.*nein
browser.control_no_authkritischBrowser Control ohne Token-/Passwort-Auth exponiertgateway.auth.*nein
browser.remote_cdp_httpWarnungRemote-CDP über einfaches HTTP hat keine TransportverschlüsselungBrowserprofil-cdpUrlnein
browser.remote_cdp_private_hostWarnungRemote-CDP zielt auf einen privaten/internen HostBrowserprofil-cdpUrl, browser.ssrfPolicy.*nein
sandbox.docker_config_mode_offWarnungSandbox-Docker-Konfiguration vorhanden, aber inaktivagents.*.sandbox.modenein
sandbox.bind_mount_non_absoluteWarnungRelative Bind-Mounts können unvorhersehbar aufgelöst werdenagents.*.sandbox.docker.binds[]nein
sandbox.dangerous_bind_mountkritischZiele von Sandbox-Bind-Mounts treffen auf blockierte System-, Credential- oder Docker-Socket-Pfadeagents.*.sandbox.docker.binds[]nein
sandbox.dangerous_network_modekritischNetzwerkmodus der Sandbox-Docker verwendet host oder container:*agents.*.sandbox.docker.networknein
sandbox.dangerous_seccomp_profilekritischSeccomp-Profil der Sandbox schwächt Container-Isolierungagents.*.sandbox.docker.securityOptnein
sandbox.dangerous_apparmor_profilekritischAppArmor-Profil der Sandbox schwächt Container-Isolierungagents.*.sandbox.docker.securityOptnein
sandbox.browser_cdp_bridge_unrestrictedWarnungBrowser-Bridge der Sandbox ist ohne Einschränkung des Quellbereichs exponiertsandbox.browser.cdpSourceRangenein
sandbox.browser_container.non_loopback_publishkritischBestehender Browser-Container veröffentlicht CDP auf nicht-loopback InterfacesPublish-Konfiguration des Browser-Sandbox-Containersnein
sandbox.browser_container.hash_label_missingWarnungBestehender Browser-Container stammt vor den aktuellen Config-Hash-Labelsopenclaw sandbox recreate --browser --allnein
sandbox.browser_container.hash_epoch_staleWarnungBestehender Browser-Container stammt vor der aktuellen Browser-Config-Epocheopenclaw sandbox recreate --browser --allnein
tools.exec.host_sandbox_no_sandbox_defaultsWarnungexec host=sandbox schlägt geschlossen fehl, wenn die Sandbox aus isttools.exec.host, agents.defaults.sandbox.modenein
tools.exec.host_sandbox_no_sandbox_agentsWarnungAgentenspezifisches exec host=sandbox schlägt geschlossen fehl, wenn die Sandbox aus istagents.list[].tools.exec.host, agents.list[].sandbox.modenein
tools.exec.security_full_configuredWarnung/kritischHost-Exec läuft mit security="full"tools.exec.security, agents.list[].tools.exec.securitynein
tools.exec.auto_allow_skills_enabledWarnungExec-Freigaben vertrauen Skill-Binaries implizit~/.openclaw/exec-approvals.jsonnein
tools.exec.allowlist_interpreter_without_strict_inline_evalWarnungInterpreter-Allowlists erlauben Inline-Eval ohne erzwungene Neu-Freigabetools.exec.strictInlineEval, agents.list[].tools.exec.strictInlineEval, Exec-Allowlistnein
tools.exec.safe_bins_interpreter_unprofiledWarnungInterpreter-/Runtime-Bins in safeBins ohne explizite Profile erweitern Exec-Risikotools.exec.safeBins, tools.exec.safeBinProfiles, agents.list[].tools.exec.*nein
tools.exec.safe_bins_broad_behaviorWarnungTools mit breitem Verhalten in safeBins schwächen das Vertrauensmodell mit niedrigem Risiko für stdin-Filtertools.exec.safeBins, agents.list[].tools.exec.safeBinsnein
tools.exec.safe_bin_trusted_dirs_riskyWarnungsafeBinTrustedDirs enthält veränderliche oder riskante Verzeichnissetools.exec.safeBinTrustedDirs, agents.list[].tools.exec.safeBinTrustedDirsnein
skills.workspace.symlink_escapeWarnungWorkspace-skills/**/SKILL.md wird außerhalb des Workspace-Root aufgelöstDateisystemzustand von Workspace-skills/**nein
plugins.extensions_no_allowlistWarnungExtensions sind ohne explizite Plugin-Allowlist installiertplugins.allowlistnein
plugins.installs_unpinned_npm_specsWarnungPlugin-Installationsdatensätze sind nicht auf unveränderliche npm-Spezifikationen festgelegtPlugin-Installationsmetadatennein
plugins.installs_missing_integrityWarnungPlugin-Installationsdatensätze enthalten keine IntegritätsmetadatenPlugin-Installationsmetadatennein
plugins.installs_version_driftWarnungPlugin-Installationsdatensätze weichen von installierten Paketen abPlugin-Installationsmetadatennein
plugins.code_safetyWarnung/kritischCode-Scan von Plugins fand verdächtige oder gefährliche MusterPlugin-Code / Installationsquellenein
plugins.code_safety.entry_pathWarnungPlugin-Entry-Pfad zeigt in versteckte oder node_modules-OrtePlugin-Manifest entrynein
plugins.code_safety.entry_escapekritischPlugin-Entry verlässt das Plugin-VerzeichnisPlugin-Manifest entrynein
plugins.code_safety.scan_failedWarnungCode-Scan des Plugins konnte nicht abgeschlossen werdenPlugin-Extension-Pfad / Scan-Umgebungnein
skills.code_safetyWarnung/kritischInstaller-Metadaten/Code von Skills enthalten verdächtige oder gefährliche MusterInstallationsquelle des Skillsnein
skills.code_safety.scan_failedWarnungCode-Scan des Skills konnte nicht abgeschlossen werdenScan-Umgebung des Skillsnein
security.exposure.open_channels_with_execWarnung/kritischGeteilte/öffentliche Räume können exec-fähige Agenten erreichenchannels.*.dmPolicy, channels.*.groupPolicy, tools.exec.*, agents.list[].tools.exec.*nein
security.exposure.open_groups_with_elevatedkritischOffene Gruppen + Elevated-Tools schaffen Wege für Prompt-Injection mit hoher Auswirkungchannels.*.groupPolicy, tools.elevated.*nein
security.exposure.open_groups_with_runtime_or_fskritisch/WarnungOffene Gruppen können Befehls-/Datei-Tools ohne Sandbox/Workspace-Schutz erreichenchannels.*.groupPolicy, tools.profile/deny, tools.fs.workspaceOnly, agents.*.sandbox.modenein
security.trust_model.multi_user_heuristicWarnungKonfiguration wirkt wie Multi-User, während das Gateway-Vertrauensmodell ein persönlicher Assistent istVertrauensgrenzen trennen oder Hardening für gemeinsame Nutzung (sandbox.mode, Tool-Deny/Workspace-Scoping)nein
tools.profile_minimal_overriddenWarnungAgentenüberschreibungen umgehen das globale minimale Profilagents.list[].tools.profilenein
plugins.tools_reachable_permissive_policyWarnungExtension-Tools sind in permissiven Kontexten erreichbartools.profile + Tool-Allow/Denynein
models.legacyWarnungVeraltete Modellfamilien sind noch konfiguriertModellauswahlnein
models.weak_tierWarnungKonfigurierte Modelle liegen unter aktuellen empfohlenen TiersModellauswahlnein
models.small_paramskritisch/InfoKleine Modelle + unsichere Tool-Oberflächen erhöhen das InjektionsrisikoModellwahl + Sandbox-/Tool-Richtlinienein
summary.attack_surfaceInfoZusammenfassende Übersicht zu Auth-, Kanal-, Tool- und Expositionshaltungmehrere Schlüssel (siehe Befunddetails)nein

Control UI über HTTP

Die Control UI benötigt einen sicheren Kontext (HTTPS oder localhost), um eine Geräteidentität zu erzeugen. gateway.controlUi.allowInsecureAuth ist ein lokaler Kompatibilitätsschalter:
  • Auf localhost erlaubt er Control-UI-Authentifizierung ohne Geräteidentität, wenn die Seite über unsicheres HTTP geladen wird.
  • Er umgeht keine Pairing-Prüfungen.
  • Er lockert keine Anforderungen an die Geräteidentität für Remote-Zugriffe (nicht localhost).
Bevorzugen Sie HTTPS (Tailscale Serve) oder öffnen Sie die UI auf 127.0.0.1. Nur für absolute Notfälle deaktiviert gateway.controlUi.dangerouslyDisableDeviceAuth die Prüfungen der Geräteidentität vollständig. Dies ist eine erhebliche Sicherheitsverschlechterung; lassen Sie es deaktiviert, außer Sie debuggen aktiv und können die Änderung schnell rückgängig machen. Getrennt von diesen gefährlichen Flags kann erfolgreiches gateway.auth.mode: "trusted-proxy" Operator-Control-UI-Sitzungen ohne Geräteidentität zulassen. Dies ist ein absichtliches Verhalten des Auth-Modus, kein allowInsecureAuth-Shortcut, und es gilt weiterhin nicht für node-rollenspezifische Control-UI-Sitzungen. openclaw security audit warnt, wenn diese Einstellung aktiviert ist.

Übersicht unsicherer oder gefährlicher Flags

openclaw security audit enthält config.insecure_or_dangerous_flags, wenn bekannte unsichere/gefährliche Debug-Schalter aktiviert sind. Diese Prüfung aggregiert derzeit:
  • gateway.controlUi.allowInsecureAuth=true
  • gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true
  • gateway.controlUi.dangerouslyDisableDeviceAuth=true
  • hooks.gmail.allowUnsafeExternalContent=true
  • hooks.mappings[<index>].allowUnsafeExternalContent=true
  • tools.exec.applyPatch.workspaceOnly=false
  • plugins.entries.acpx.config.permissionMode=approve-all
Vollständige dangerous* / dangerously*-Konfigurationsschlüssel, die im OpenClaw-Konfigurationsschema definiert sind:
  • gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback
  • gateway.controlUi.dangerouslyDisableDeviceAuth
  • browser.ssrfPolicy.dangerouslyAllowPrivateNetwork
  • channels.discord.dangerouslyAllowNameMatching
  • channels.discord.accounts.<accountId>.dangerouslyAllowNameMatching
  • channels.slack.dangerouslyAllowNameMatching
  • channels.slack.accounts.<accountId>.dangerouslyAllowNameMatching
  • channels.googlechat.dangerouslyAllowNameMatching
  • channels.googlechat.accounts.<accountId>.dangerouslyAllowNameMatching
  • channels.msteams.dangerouslyAllowNameMatching
  • channels.synology-chat.dangerouslyAllowNameMatching (Extension-Kanal)
  • channels.synology-chat.accounts.<accountId>.dangerouslyAllowNameMatching (Extension-Kanal)
  • channels.synology-chat.dangerouslyAllowInheritedWebhookPath (Extension-Kanal)
  • channels.zalouser.dangerouslyAllowNameMatching (Extension-Kanal)
  • channels.zalouser.accounts.<accountId>.dangerouslyAllowNameMatching (Extension-Kanal)
  • channels.irc.dangerouslyAllowNameMatching (Extension-Kanal)
  • channels.irc.accounts.<accountId>.dangerouslyAllowNameMatching (Extension-Kanal)
  • channels.mattermost.dangerouslyAllowNameMatching (Extension-Kanal)
  • channels.mattermost.accounts.<accountId>.dangerouslyAllowNameMatching (Extension-Kanal)
  • channels.telegram.network.dangerouslyAllowPrivateNetwork
  • channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork
  • agents.defaults.sandbox.docker.dangerouslyAllowReservedContainerTargets
  • agents.defaults.sandbox.docker.dangerouslyAllowExternalBindSources
  • agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin
  • agents.list[<index>].sandbox.docker.dangerouslyAllowReservedContainerTargets
  • agents.list[<index>].sandbox.docker.dangerouslyAllowExternalBindSources
  • agents.list[<index>].sandbox.docker.dangerouslyAllowContainerNamespaceJoin

Konfiguration von Reverse Proxy

Wenn Sie das Gateway hinter einem Reverse Proxy (nginx, Caddy, Traefik usw.) betreiben, konfigurieren Sie gateway.trustedProxies für die korrekte Verarbeitung weitergeleiteter Client-IP-Adressen. Wenn das Gateway Proxy-Header von einer Adresse erkennt, die nicht in trustedProxies enthalten ist, behandelt es Verbindungen nicht als lokale Clients. Wenn die Gateway-Authentifizierung deaktiviert ist, werden diese Verbindungen abgelehnt. Dies verhindert einen Auth-Bypass, bei dem weitergeleitete Verbindungen sonst so erscheinen würden, als kämen sie von localhost, und dadurch automatisches Vertrauen erhalten würden. gateway.trustedProxies speist auch gateway.auth.mode: "trusted-proxy", aber dieser Auth-Modus ist strenger:
  • Trusted-Proxy-Auth schlägt bei loopback-basierten Proxys geschlossen fehl
  • lokale loopback-Reverse-Proxys auf demselben Host können gateway.trustedProxies weiterhin für lokale Client-Erkennung und die Verarbeitung weitergeleiteter IPs verwenden
  • für lokale loopback-Reverse-Proxys auf demselben Host verwenden Sie Token-/Passwort-Auth statt gateway.auth.mode: "trusted-proxy"
gateway:
  trustedProxies:
    - "10.0.0.1" # IP des Reverse Proxy
  # Optional. Standard false.
  # Nur aktivieren, wenn Ihr Proxy kein X-Forwarded-For bereitstellen kann.
  allowRealIpFallback: false
  auth:
    mode: password
    password: ${OPENCLAW_GATEWAY_PASSWORD}
Wenn trustedProxies konfiguriert ist, verwendet das Gateway X-Forwarded-For, um die Client-IP zu bestimmen. X-Real-IP wird standardmäßig ignoriert, es sei denn, gateway.allowRealIpFallback: true ist explizit gesetzt. Gutes Verhalten eines Reverse Proxy (überschreibt eingehende Forwarding-Header):
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
Schlechtes Verhalten eines Reverse Proxy (hängt nicht vertrauenswürdige Forwarding-Header an / bewahrt sie):
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Hinweise zu HSTS und Origins

  • Das OpenClaw-Gateway ist primär lokal/loopback. Wenn Sie TLS an einem Reverse Proxy terminieren, setzen Sie HSTS dort auf der HTTPS-Domain, die dem Proxy zugewandt ist.
  • Wenn das Gateway selbst HTTPS terminiert, können Sie gateway.http.securityHeaders.strictTransportSecurity setzen, um den HSTS-Header aus OpenClaw-Antworten zu senden.
  • Detaillierte Hinweise zur Bereitstellung finden Sie unter Trusted Proxy Auth.
  • Für Control-UI-Bereitstellungen ohne loopback ist gateway.controlUi.allowedOrigins standardmäßig erforderlich.
  • gateway.controlUi.allowedOrigins: ["*"] ist eine explizite „alle erlauben“-Richtlinie für Browser-Origins, kein gehärteter Standard. Vermeiden Sie dies außerhalb streng kontrollierter lokaler Tests.
  • Fehlgeschlagene Browser-Origin-Authentifizierungen auf loopback sind weiterhin rate-limitiert, selbst wenn die allgemeine loopback-Ausnahme aktiviert ist, aber der Sperrschlüssel wird pro normalisiertem Origin-Wert statt über einen gemeinsamen localhost-Bucket geführt.
  • gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true aktiviert den Host-Header-Origin-Fallback-Modus; behandeln Sie dies als gefährliche, bewusst gewählte Operator-Richtlinie.
  • Behandeln Sie DNS-Rebinding und Proxy-Host-Header-Verhalten als Härtungsthemen der Bereitstellung; halten Sie trustedProxies eng und vermeiden Sie, das Gateway direkt dem öffentlichen Internet auszusetzen.

Lokale Sitzungsprotokolle liegen auf dem Datenträger

OpenClaw speichert Sitzungstranskripte auf dem Datenträger unter ~/.openclaw/agents/<agentId>/sessions/*.jsonl. Dies ist für Sitzungskontinuität und optional für die Indizierung von Sitzungsmemory erforderlich, bedeutet aber auch, dass jeder Prozess/jeder Benutzer mit Dateisystemzugriff diese Protokolle lesen kann. Behandeln Sie den Zugriff auf den Datenträger als Vertrauensgrenze und beschränken Sie die Berechtigungen auf ~/.openclaw (siehe Audit-Abschnitt unten). Wenn Sie stärkere Isolierung zwischen Agenten benötigen, führen Sie diese unter separaten OS-Benutzern oder auf separaten Hosts aus.

Node-Ausführung (system.run)

Wenn ein macOS-Node gepaart ist, kann das Gateway system.run auf diesem Node aufrufen. Dies ist Remote-Code-Ausführung auf dem Mac:
  • Erfordert Node-Pairing (Freigabe + Token).
  • Node-Pairing im Gateway ist keine Freigabeoberfläche pro Befehl. Es stellt Identität/Vertrauen des Node und die Ausgabe von Tokens her.
  • Das Gateway wendet eine grobe globale Node-Befehlsrichtlinie über gateway.nodes.allowCommands / denyCommands an.
  • Auf dem Mac gesteuert über Einstellungen → Exec approvals (security + ask + allowlist).
  • Die Richtlinie pro Node für system.run ist die eigene Exec-Freigabedatei des Node (exec.approvals.node.*), die strenger oder lockerer sein kann als die globale Befehls-ID-Richtlinie des Gateway.
  • Ein Node, der mit security="full" und ask="off" läuft, folgt dem Standardmodell des vertrauenswürdigen Operators. Behandeln Sie dies als erwartetes Verhalten, sofern Ihre Bereitstellung nicht explizit eine strengere Freigabe- oder Allowlist-Haltung erfordert.
  • Der Freigabemodus bindet den exakten Anfragekontext und, wenn möglich, einen konkreten lokalen Skript-/Dateiparameter. Wenn OpenClaw nicht genau eine direkte lokale Datei für einen Interpreter-/Runtime-Befehl identifizieren kann, wird ausführung mit Freigabestützung abgelehnt, statt vollständige semantische Abdeckung zu versprechen.
  • Für host=node speichern freigabegestützte Ausführungen zusätzlich einen kanonischen vorbereiteten systemRunPlan; spätere freigegebene Weiterleitungen verwenden diesen gespeicherten Plan erneut, und die Validierung des Gateway lehnt Änderungen des Aufrufers an Befehl/CWD/Sitzungskontext nach Erstellung der Freigabeanfrage ab.
  • Wenn Sie keine Remote-Ausführung möchten, setzen Sie security auf deny und entfernen Sie das Node-Pairing für diesen Mac.
Diese Unterscheidung ist wichtig für die Triage:
  • Ein erneut verbindender gepaarter Node, der eine andere Befehlsliste ankündigt, ist für sich genommen keine Schwachstelle, wenn die globale Richtlinie des Gateway und die lokalen Exec-Freigaben des Node weiterhin die tatsächliche Ausführungsgrenze durchsetzen.
  • Berichte, die Pairing-Metadaten eines Node als zweite versteckte Freigabeebene pro Befehl behandeln, sind meist Verwirrung über Richtlinie/UX, kein Bypass einer Sicherheitsgrenze.

Dynamische Skills (Watcher / Remote-Nodes)

OpenClaw kann die Liste der Skills mitten in der Sitzung aktualisieren:
  • Skills-Watcher: Änderungen an SKILL.md können den Snapshot der Skills beim nächsten Agenten-Turn aktualisieren.
  • Remote-Nodes: Das Verbinden eines macOS-Node kann macOS-spezifische Skills zulässig machen (basierend auf Bin-Probing).
Behandeln Sie Skill-Ordner als vertrauenswürdigen Code und beschränken Sie, wer sie ändern darf.

Das Bedrohungsmodell

Ihr KI-Assistent kann:
  • beliebige Shell-Befehle ausführen
  • Dateien lesen/schreiben
  • auf Netzwerkdienste zugreifen
  • Nachrichten an beliebige Personen senden (wenn Sie ihm WhatsApp-Zugriff geben)
Personen, die Ihnen Nachrichten senden, können:
  • versuchen, Ihre KI zu schlechten Handlungen zu verleiten
  • Social Engineering betreiben, um Zugriff auf Ihre Daten zu erhalten
  • nach Infrastrukturdetails suchen

Kernkonzept: Zugriffskontrolle vor Intelligenz

Die meisten Fehler hier sind keine ausgefeilten Exploits — sondern „jemand hat dem Bot geschrieben und der Bot hat getan, worum er gebeten wurde“. Der Ansatz von OpenClaw:
  • Zuerst Identität: entscheiden Sie, wer mit dem Bot sprechen darf (DM-Pairing / Allowlists / explizites „open“).
  • Dann Geltungsbereich: entscheiden Sie, wo der Bot handeln darf (Gruppen-Allowlists + Mention-Gating, Tools, Sandboxing, Geräteberechtigungen).
  • Zuletzt das Modell: gehen Sie davon aus, dass das Modell manipulierbar ist; gestalten Sie das System so, dass Manipulation nur begrenzte Auswirkungen hat.

Autorisierungsmodell für Befehle

Slash-Befehle und Direktiven werden nur für autorisierte Absender beachtet. Die Autorisierung leitet sich aus Kanal-Allowlists/Pairing plus commands.useAccessGroups ab (siehe Configuration und Slash commands). Wenn eine Kanal-Allowlist leer ist oder "*" enthält, sind Befehle für diesen Kanal effektiv offen. /exec ist eine reine Sitzungsbequemlichkeit für autorisierte Operatoren. Es schreibt nicht in die Konfiguration und ändert keine anderen Sitzungen.

Risiko von Control-Plane-Tools

Zwei integrierte Tools können dauerhafte Änderungen an der Control Plane vornehmen:
  • gateway kann Konfiguration mit config.schema.lookup / config.get prüfen und mit config.apply, config.patch und update.run dauerhafte Änderungen vornehmen.
  • cron kann geplante Jobs erstellen, die weiterlaufen, nachdem der ursprüngliche Chat/die ursprüngliche Aufgabe beendet ist.
Das nur für Owner verfügbare Laufzeit-Tool gateway verweigert weiterhin das Umschreiben von tools.exec.ask oder tools.exec.security; Legacy-Aliase tools.bash.* werden vor dem Schreiben auf dieselben geschützten Exec-Pfade normalisiert. Für jeden Agenten/jede Oberfläche, die nicht vertrauenswürdige Inhalte verarbeitet, verweigern Sie diese standardmäßig:
{
  tools: {
    deny: ["gateway", "cron", "sessions_spawn", "sessions_send"],
  },
}
commands.restart=false blockiert nur Neustartaktionen. Es deaktiviert nicht gateway-Aktionen für config/update.

Plugins/Extensions

Plugins laufen im Prozess mit dem Gateway. Behandeln Sie sie als vertrauenswürdigen Code:
  • Installieren Sie Plugins nur aus Quellen, denen Sie vertrauen.
  • Bevorzugen Sie explizite plugins.allow-Allowlists.
  • Prüfen Sie die Plugin-Konfiguration vor dem Aktivieren.
  • Starten Sie das Gateway nach Plugin-Änderungen neu.
  • Wenn Sie Plugins installieren oder aktualisieren (openclaw plugins install <package>, openclaw plugins update <id>), behandeln Sie das wie das Ausführen nicht vertrauenswürdigen Codes:
    • Der Installationspfad ist das Verzeichnis pro Plugin unter der aktiven Plugin-Installationswurzel.
    • OpenClaw führt vor der Installation/Aktualisierung einen integrierten Scan auf gefährlichen Code aus. Befunde mit critical blockieren standardmäßig.
    • OpenClaw verwendet npm pack und führt dann npm install --omit=dev in diesem Verzeichnis aus (npm-Lifecycle-Skripte können während der Installation Code ausführen).
    • Bevorzugen Sie festgelegte exakte Versionen (@scope/pkg@1.2.3) und prüfen Sie den entpackten Code auf dem Datenträger, bevor Sie ihn aktivieren.
    • --dangerously-force-unsafe-install ist nur als Notausstieg für Fehlalarme des integrierten Scans in Plugin-Installations-/Update-Abläufen gedacht. Es umgeht weder Richtlinienblöcke aus Plugin-before_install-Hooks noch Scan-Fehler.
    • Gateway-gestützte Abhängigkeitsinstallationen für Skills folgen derselben Trennung zwischen gefährlich und verdächtig: Integrierte Befunde mit critical blockieren, sofern der Aufrufer nicht explizit dangerouslyForceUnsafeInstall setzt, während verdächtige Befunde weiterhin nur warnen. openclaw skills install bleibt der separate Download-/Installationsablauf für Skills über ClawHub.
Details: Plugins

DM-Zugriffsmodell (pairing / allowlist / open / disabled)

Alle aktuellen DM-fähigen Kanäle unterstützen eine DM-Richtlinie (dmPolicy oder *.dm.policy), die eingehende DMs vor der Verarbeitung der Nachricht prüft:
  • pairing (Standard): unbekannte Absender erhalten einen kurzen Pairing-Code, und der Bot ignoriert ihre Nachricht bis zur Freigabe. Codes laufen nach 1 Stunde ab; wiederholte DMs senden keinen neuen Code, bis eine neue Anfrage erstellt wird. Ausstehende Anfragen sind standardmäßig auf 3 pro Kanal begrenzt.
  • allowlist: unbekannte Absender werden blockiert (kein Pairing-Handshake).
  • open: erlaubt jedem, eine DM zu senden (öffentlich). Erfordert, dass die Kanal-Allowlist "*" enthält (explizites Opt-in).
  • disabled: ignoriert eingehende DMs vollständig.
Freigabe per CLI:
openclaw pairing list <channel>
openclaw pairing approve <channel> <code>
Details + Dateien auf dem Datenträger: Pairing

DM-Sitzungsisolierung (Multi-User-Modus)

Standardmäßig leitet OpenClaw alle DMs in die Hauptsitzung, damit Ihr Assistent Kontinuität über Geräte und Kanäle hinweg hat. Wenn mehrere Personen dem Bot DMs senden können (offene DMs oder eine Allowlist mit mehreren Personen), erwägen Sie die Isolierung von DM-Sitzungen:
{
  session: { dmScope: "per-channel-peer" },
}
Dies verhindert das Übersickern von Kontext zwischen Benutzern, während Gruppenchats isoliert bleiben. Dies ist eine Grenze für Messaging-Kontext, keine Grenze für Host-Administration. Wenn Benutzer gegenseitig gegensätzlich sind und denselben Gateway-Host/dieselbe Konfiguration teilen, betreiben Sie separate Gateways pro Vertrauensgrenze.

Sicherer DM-Modus (empfohlen)

Behandeln Sie den obigen Ausschnitt als sicheren DM-Modus:
  • Standard: session.dmScope: "main" (alle DMs teilen eine Sitzung für Kontinuität).
  • Standard bei lokalem CLI-Onboarding: schreibt session.dmScope: "per-channel-peer", wenn nicht gesetzt (bestehende explizite Werte bleiben erhalten).
  • Sicherer DM-Modus: session.dmScope: "per-channel-peer" (jedes Kanal+Absender-Paar erhält einen isolierten DM-Kontext).
  • Kanalübergreifende Peer-Isolierung: session.dmScope: "per-peer" (jeder Absender erhält eine Sitzung über alle Kanäle desselben Typs hinweg).
Wenn Sie mehrere Konten auf demselben Kanal betreiben, verwenden Sie stattdessen per-account-channel-peer. Wenn dieselbe Person Sie über mehrere Kanäle kontaktiert, verwenden Sie session.identityLinks, um diese DM-Sitzungen zu einer kanonischen Identität zusammenzuführen. Siehe Sitzungsverwaltung und Configuration.

Allowlists (DM + Gruppen) - Terminologie

OpenClaw hat zwei separate Ebenen für „wer darf mich auslösen?“:
  • DM-Allowlist (allowFrom / channels.discord.allowFrom / channels.slack.allowFrom; Legacy: channels.discord.dm.allowFrom, channels.slack.dm.allowFrom): wer mit dem Bot in Direct Messages sprechen darf.
    • Wenn dmPolicy="pairing", werden Freigaben in den kontoabhängigen Pairing-Allowlist-Speicher unter ~/.openclaw/credentials/ geschrieben (<channel>-allowFrom.json für das Standardkonto, <channel>-<accountId>-allowFrom.json für Nicht-Standardkonten), zusammengeführt mit Konfigurations-Allowlists.
  • Gruppen-Allowlist (kanalspezifisch): von welchen Gruppen/Kanälen/Guilds der Bot überhaupt Nachrichten akzeptiert.
    • Häufige Muster:
      • channels.whatsapp.groups, channels.telegram.groups, channels.imessage.groups: Standards pro Gruppe wie requireMention; wenn gesetzt, wirkt dies auch als Gruppen-Allowlist (fügen Sie "*" ein, um das Verhalten „alle erlauben“ beizubehalten).
      • groupPolicy="allowlist" + groupAllowFrom: beschränkt, wer den Bot innerhalb einer Gruppensitzung auslösen darf (WhatsApp/Telegram/Signal/iMessage/Microsoft Teams).
      • channels.discord.guilds / channels.slack.channels: Allowlists pro Oberfläche + Standardwerte für Erwähnungen.
    • Gruppenprüfungen laufen in dieser Reihenfolge: zuerst groupPolicy/Gruppen-Allowlists, dann Aktivierung durch Mention/Antwort.
    • Eine Antwort auf eine Bot-Nachricht (implizite Erwähnung) umgeht keine Sender-Allowlists wie groupAllowFrom.
    • Sicherheitshinweis: Behandeln Sie dmPolicy="open" und groupPolicy="open" als Einstellungen für den absoluten Ausnahmefall. Sie sollten kaum verwendet werden; bevorzugen Sie Pairing + Allowlists, sofern Sie nicht jedem Mitglied des Raums vollständig vertrauen.
Details: Configuration und Groups

Prompt-Injection (was das ist und warum es wichtig ist)

Prompt-Injection liegt vor, wenn ein Angreifer eine Nachricht so formuliert, dass das Modell zu unsicherem Verhalten manipuliert wird („ignoriere deine Anweisungen“, „gib dein Dateisystem aus“, „folge diesem Link und führe Befehle aus“ usw.). Selbst mit starken System-Prompts ist Prompt-Injection nicht gelöst. Guardrails im System-Prompt sind nur weiche Leitlinien; harte Durchsetzung kommt von Tool-Richtlinien, Exec-Freigaben, Sandboxing und Kanal-Allowlists (und Operatoren können diese bewusst deaktivieren). Was in der Praxis hilft:
  • Halten Sie eingehende DMs geschlossen (Pairing/Allowlists).
  • Bevorzugen Sie Mention-Gating in Gruppen; vermeiden Sie „always-on“-Bots in öffentlichen Räumen.
  • Behandeln Sie Links, Anhänge und eingefügte Anweisungen standardmäßig als feindlich.
  • Führen Sie sensible Tool-Ausführung in einer Sandbox aus; halten Sie Secrets vom für den Agenten erreichbaren Dateisystem fern.
  • Hinweis: Sandboxing ist Opt-in. Wenn der Sandbox-Modus aus ist, löst sich implizites host=auto zum Gateway-Host auf. Explizites host=sandbox schlägt weiterhin geschlossen fehl, weil keine Sandbox-Runtime verfügbar ist. Setzen Sie host=gateway, wenn dieses Verhalten in der Konfiguration explizit sein soll.
  • Beschränken Sie Hochrisiko-Tools (exec, browser, web_fetch, web_search) auf vertrauenswürdige Agenten oder explizite Allowlists.
  • Wenn Sie Interpreter (python, node, ruby, perl, php, lua, osascript) auf die Allowlist setzen, aktivieren Sie tools.exec.strictInlineEval, damit Inline-Eval-Formen weiterhin explizite Freigabe benötigen.
  • Die Modellwahl ist wichtig: ältere/kleinere/veraltete Modelle sind deutlich weniger robust gegenüber Prompt-Injection und Tool-Missbrauch. Für toolfähige Agenten verwenden Sie das stärkste aktuelle, gegen Instruktionsmanipulation gehärtete Modell.
Warnsignale, die als nicht vertrauenswürdig zu behandeln sind:
  • „Lies diese Datei/URL und tue genau, was dort steht.“
  • „Ignoriere deinen System-Prompt oder deine Sicherheitsregeln.“
  • „Gib deine versteckten Anweisungen oder Tool-Ausgaben preis.“
  • „Füge den vollständigen Inhalt von ~/.openclaw oder deiner Logs ein.“

Bypass-Flags für unsichere externe Inhalte

OpenClaw enthält explizite Bypass-Flags, die die Sicherheitsumhüllung externer Inhalte deaktivieren:
  • hooks.mappings[].allowUnsafeExternalContent
  • hooks.gmail.allowUnsafeExternalContent
  • Cron-Payload-Feld allowUnsafeExternalContent
Empfehlung:
  • Lassen Sie diese in Produktion unset/false.
  • Aktivieren Sie sie nur vorübergehend für eng begrenztes Debugging.
  • Wenn aktiviert, isolieren Sie diesen Agenten (Sandbox + minimale Tools + dedizierter Sitzungsnamensraum).
Hinweis zum Risiko bei Hooks:
  • Hook-Payloads sind nicht vertrauenswürdige Inhalte, auch wenn die Zustellung aus von Ihnen kontrollierten Systemen kommt (E-Mail-/Dokumenten-/Web-Inhalte können Prompt-Injection enthalten).
  • Schwächere Modell-Tiers erhöhen dieses Risiko. Für hookgesteuerte Automatisierung bevorzugen Sie starke moderne Modell-Tiers und halten die Tool-Richtlinie eng (tools.profile: "messaging" oder strenger), zusätzlich möglichst mit Sandboxing.

Prompt-Injection erfordert keine öffentlichen DMs

Selbst wenn nur Sie dem Bot Nachrichten senden können, kann Prompt-Injection weiterhin über alle nicht vertrauenswürdigen Inhalte erfolgen, die der Bot liest (Ergebnisse aus Websuche/Web-Fetch, Browser-Seiten, E-Mails, Dokumente, Anhänge, eingefügte Logs/Code). Anders gesagt: Nicht nur der Absender ist die Angriffsoberfläche; auch der Inhalt selbst kann gegensätzliche Anweisungen tragen. Wenn Tools aktiviert sind, besteht das typische Risiko in Exfiltration von Kontext oder dem Auslösen von Tool-Aufrufen. Verringern Sie die Auswirkungen durch:
  • Verwendung eines read-only oder tooldeaktivierten Lese-Agenten, der nicht vertrauenswürdige Inhalte zusammenfasst, und Übergabe nur der Zusammenfassung an Ihren Hauptagenten.
  • Deaktivieren von web_search / web_fetch / browser für toolfähige Agenten, sofern nicht erforderlich.
  • Für URL-Eingaben in OpenResponses (input_file / input_image) enge gateway.http.endpoints.responses.files.urlAllowlist und gateway.http.endpoints.responses.images.urlAllowlist setzen und maxUrlParts niedrig halten. Leere Allowlists werden wie nicht gesetzt behandelt; verwenden Sie files.allowUrl: false / images.allowUrl: false, wenn Sie URL-Fetching vollständig deaktivieren möchten.
  • Für Dateieingaben in OpenResponses wird dekodierter input_file-Text weiterhin als nicht vertrauenswürdiger externer Inhalt injiziert. Vertrauen Sie Dateitext nicht allein deshalb, weil das Gateway ihn lokal dekodiert hat. Der injizierte Block enthält weiterhin explizite Begrenzungsmarkierungen <<<EXTERNAL_UNTRUSTED_CONTENT ...>>> sowie Metadaten Source: External, auch wenn dieser Pfad das längere Banner SECURITY NOTICE: auslässt.
  • Dieselbe markerbasierte Umhüllung wird angewendet, wenn Media-Understanding Text aus angehängten Dokumenten extrahiert, bevor dieser Text an den Medien-Prompt angehängt wird.
  • Aktivieren von Sandboxing und strikten Tool-Allowlists für jeden Agenten, der mit nicht vertrauenswürdiger Eingabe arbeitet.
  • Secrets aus Prompts heraushalten; stattdessen per env/config auf dem Gateway-Host übergeben.

Modellstärke (Sicherheitshinweis)

Die Widerstandsfähigkeit gegen Prompt-Injection ist nicht über alle Modell-Tiers gleich. Kleinere/günstigere Modelle sind im Allgemeinen anfälliger für Tool-Missbrauch und das Kapern von Anweisungen, insbesondere bei gegensätzlichen Prompts.
Für toolfähige Agenten oder Agenten, die nicht vertrauenswürdige Inhalte lesen, ist das Risiko von Prompt-Injection bei älteren/kleineren Modellen oft zu hoch. Betreiben Sie solche Workloads nicht auf schwachen Modell-Tiers.
Empfehlungen:
  • Verwenden Sie das neueste Modell der besten Klasse für jeden Bot, der Tools ausführen oder auf Dateien/Netzwerke zugreifen kann.
  • Verwenden Sie keine älteren/schwächeren/kleineren Tiers für toolfähige Agenten oder nicht vertrauenswürdige Posteingänge; das Risiko von Prompt-Injection ist zu hoch.
  • Wenn Sie dennoch ein kleineres Modell verwenden müssen, verringern Sie den Auswirkungsradius (nur Read-Only-Tools, starkes Sandboxing, minimaler Dateisystemzugriff, strikte Allowlists).
  • Wenn Sie kleine Modelle verwenden, aktivieren Sie Sandboxing für alle Sitzungen und deaktivieren Sie web_search/web_fetch/browser, sofern Eingaben nicht eng kontrolliert sind.
  • Für reine Chat-basierte persönliche Assistenten mit vertrauenswürdiger Eingabe und ohne Tools sind kleinere Modelle in der Regel in Ordnung.

Reasoning- und verbose-Ausgabe in Gruppen

/reasoning und /verbose können internes Reasoning oder Tool-Ausgaben offenlegen, die nicht für einen öffentlichen Kanal bestimmt waren. In Gruppenumgebungen sollten Sie sie als nur für Debugging behandeln und deaktiviert lassen, sofern Sie sie nicht ausdrücklich benötigen. Empfehlung:
  • Halten Sie /reasoning und /verbose in öffentlichen Räumen deaktiviert.
  • Wenn Sie sie aktivieren, dann nur in vertrauenswürdigen DMs oder streng kontrollierten Räumen.
  • Denken Sie daran: Verbose-Ausgaben können Tool-Argumente, URLs und vom Modell gesehene Daten enthalten.

Härtung der Konfiguration (Beispiele)

0) Dateiberechtigungen

Halten Sie Konfiguration + Status auf dem Gateway-Host privat:
  • ~/.openclaw/openclaw.json: 600 (nur Benutzer lesen/schreiben)
  • ~/.openclaw: 700 (nur Benutzer)
openclaw doctor kann warnen und anbieten, diese Berechtigungen zu verschärfen.

0.4) Netzwerkexposition (bind + port + Firewall)

Das Gateway multiplexiert WebSocket + HTTP auf einem einzigen Port:
  • Standard: 18789
  • Konfiguration/Flags/env: gateway.port, --port, OPENCLAW_GATEWAY_PORT
Diese HTTP-Oberfläche umfasst die Control UI und den Canvas-Host:
  • Control UI (SPA-Assets) (Standard-Basispfad /)
  • Canvas-Host: /__openclaw__/canvas/ und /__openclaw__/a2ui/ (beliebiges HTML/JS; als nicht vertrauenswürdigen Inhalt behandeln)
Wenn Sie Canvas-Inhalte in einem normalen Browser laden, behandeln Sie sie wie jede andere nicht vertrauenswürdige Webseite:
  • Stellen Sie den Canvas-Host nicht für nicht vertrauenswürdige Netzwerke/Benutzer bereit.
  • Lassen Sie Canvas-Inhalte nicht dieselbe Origin mit privilegierten Weboberflächen teilen, sofern Sie die Auswirkungen nicht vollständig verstehen.
Der Bind-Modus steuert, wo das Gateway lauscht:
  • gateway.bind: "loopback" (Standard): nur lokale Clients können sich verbinden.
  • Nicht-loopback-Binds ("lan", "tailnet", "custom") erweitern die Angriffsoberfläche. Verwenden Sie sie nur mit Gateway-Auth (Shared Token/Passwort oder korrekt konfigurierter nicht-loopback Trusted Proxy) und einer echten Firewall.
Faustregeln:
  • Bevorzugen Sie Tailscale Serve gegenüber LAN-Binds (Serve hält das Gateway auf loopback, und Tailscale übernimmt den Zugriff).
  • Wenn Sie an LAN binden müssen, beschränken Sie den Port per Firewall auf eine enge Allowlist von Quell-IPs; leiten Sie ihn nicht breit weiter.
  • Setzen Sie das Gateway niemals unauthentifiziert auf 0.0.0.0 aus.

0.4.1) Docker-Portfreigabe + UFW (DOCKER-USER)

Wenn Sie OpenClaw mit Docker auf einem VPS betreiben, denken Sie daran, dass veröffentlichte Container-Ports (-p HOST:CONTAINER oder Compose-ports:) durch die Forwarding-Ketten von Docker geleitet werden und nicht nur durch Host-INPUT-Regeln. Um Docker-Traffic an Ihre Firewall-Richtlinie anzupassen, erzwingen Sie Regeln in DOCKER-USER (diese Kette wird vor den eigenen Accept-Regeln von Docker ausgewertet). Auf vielen modernen Distributionen verwenden iptables/ip6tables das Frontend iptables-nft und wenden diese Regeln trotzdem auf das nftables-Backend an. Minimales Beispiel für eine Allowlist (IPv4):
# /etc/ufw/after.rules (als eigenen *filter-Abschnitt anhängen)
*filter
:DOCKER-USER - [0:0]
-A DOCKER-USER -m conntrack --ctstate ESTABLISHED,RELATED -j RETURN
-A DOCKER-USER -s 127.0.0.0/8 -j RETURN
-A DOCKER-USER -s 10.0.0.0/8 -j RETURN
-A DOCKER-USER -s 172.16.0.0/12 -j RETURN
-A DOCKER-USER -s 192.168.0.0/16 -j RETURN
-A DOCKER-USER -s 100.64.0.0/10 -j RETURN
-A DOCKER-USER -p tcp --dport 80 -j RETURN
-A DOCKER-USER -p tcp --dport 443 -j RETURN
-A DOCKER-USER -m conntrack --ctstate NEW -j DROP
-A DOCKER-USER -j RETURN
COMMIT
IPv6 hat separate Tabellen. Fügen Sie eine passende Richtlinie in /etc/ufw/after6.rules hinzu, wenn Docker-IPv6 aktiviert ist. Vermeiden Sie hartcodierte Interface-Namen wie eth0 in Doku-Snippets. Interface-Namen variieren je nach VPS-Image (ens3, enp* usw.), und falsche Namen können dazu führen, dass Ihre Deny-Regel versehentlich nicht greift. Schnelle Validierung nach dem Reload:
ufw reload
iptables -S DOCKER-USER
ip6tables -S DOCKER-USER
nmap -sT -p 1-65535 <public-ip> --open
Von außen sollten nur die Ports offen sein, die Sie absichtlich exponieren (für die meisten Setups: SSH + die Ports Ihres Reverse Proxy).

0.4.2) mDNS-/Bonjour-Erkennung (Offenlegung von Informationen)

Das Gateway sendet seine Präsenz per mDNS (_openclaw-gw._tcp auf Port 5353) für die lokale Geräteerkennung. Im Vollmodus enthält dies TXT-Records, die operative Details offenlegen können:
  • cliPath: vollständiger Dateisystempfad zum CLI-Binary (offenbart Benutzername und Installationsort)
  • sshPort: signalisiert SSH-Verfügbarkeit auf dem Host
  • displayName, lanHost: Informationen zum Hostnamen
Betriebliche Sicherheitsüberlegung: Das Aussenden von Infrastrukturdetails erleichtert Aufklärung für jeden im lokalen Netzwerk. Selbst „harmlose“ Informationen wie Dateisystempfade und SSH-Verfügbarkeit helfen Angreifern, Ihre Umgebung zu kartieren. Empfehlungen:
  1. Minimalmodus (Standard, empfohlen für exponierte Gateways): lässt sensible Felder aus mDNS-Broadcasts weg:
    {
      discovery: {
        mdns: { mode: "minimal" },
      },
    }
    
  2. Ganz deaktivieren, wenn Sie keine lokale Geräteerkennung benötigen:
    {
      discovery: {
        mdns: { mode: "off" },
      },
    }
    
  3. Vollmodus (Opt-in): enthält cliPath + sshPort in TXT-Records:
    {
      discovery: {
        mdns: { mode: "full" },
      },
    }
    
  4. Umgebungsvariable (Alternative): Setzen Sie OPENCLAW_DISABLE_BONJOUR=1, um mDNS ohne Konfigurationsänderungen zu deaktivieren.
Im Minimalmodus sendet das Gateway weiterhin genug für die Geräteerkennung (role, gatewayPort, transport), lässt aber cliPath und sshPort weg. Apps, die Informationen zum CLI-Pfad benötigen, können diese stattdessen über die authentifizierte WebSocket-Verbindung abrufen.

0.5) Gateway-WebSocket absichern (lokale Auth)

Gateway-Authentifizierung ist standardmäßig erforderlich. Wenn kein gültiger Gateway-Authentifizierungspfad konfiguriert ist, verweigert das Gateway WebSocket-Verbindungen (Fail-Closed). Beim Onboarding wird standardmäßig ein Token erzeugt (auch für loopback), sodass lokale Clients authentifiziert sein müssen. Setzen Sie ein Token, damit alle WS-Clients sich authentifizieren müssen:
{
  gateway: {
    auth: { mode: "token", token: "your-token" },
  },
}
Doctor kann eines für Sie erzeugen: openclaw doctor --generate-gateway-token. Hinweis: gateway.remote.token / .password sind Credential-Quellen für Clients. Sie schützen lokalen WS-Zugriff nicht selbst. Lokale Aufrufpfade können gateway.remote.* nur dann als Fallback verwenden, wenn gateway.auth.* nicht gesetzt ist. Wenn gateway.auth.token / gateway.auth.password explizit über SecretRef konfiguriert und nicht auflösbar sind, schlägt die Auflösung geschlossen fehl (kein Remote-Fallback, der dies kaschiert). Optional: pinnen Sie Remote-TLS mit gateway.remote.tlsFingerprint, wenn Sie wss:// verwenden. Unverschlüsseltes ws:// ist standardmäßig nur auf loopback erlaubt. Für vertrauenswürdige private Netzwerke setzen Sie OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 im Client-Prozess als Notausstieg. Lokales Device-Pairing:
  • Device-Pairing wird für direkte lokale loopback-Verbindungen automatisch freigegeben, damit die Nutzung auf demselben Host reibungslos bleibt.
  • OpenClaw hat außerdem einen schmalen backend-/containerlokalen Self-Connect-Pfad für vertrauenswürdige Shared-Secret-Helper-Flows.
  • Verbindungen über Tailnet und LAN, einschließlich Tailnet-Binds auf demselben Host, werden für das Pairing als Remote behandelt und benötigen weiterhin Freigabe.
Authentifizierungsmodi:
  • gateway.auth.mode: "token": Shared Bearer Token (für die meisten Setups empfohlen).
  • gateway.auth.mode: "password": Passwort-Authentifizierung (vorzugsweise per env setzen: OPENCLAW_GATEWAY_PASSWORD).
  • gateway.auth.mode: "trusted-proxy": vertraut einem identitätsbewussten Reverse Proxy, der Benutzer authentifiziert und Identität per Header weitergibt (siehe Trusted Proxy Auth).
Checkliste zur Rotation (Token/Passwort):
  1. Neues Secret erzeugen/setzen (gateway.auth.token oder OPENCLAW_GATEWAY_PASSWORD).
  2. Gateway neu starten (oder die macOS-App neu starten, wenn sie das Gateway überwacht).
  3. Alle Remote-Clients aktualisieren (gateway.remote.token / .password auf Rechnern, die das Gateway aufrufen).
  4. Überprüfen, dass keine Verbindung mehr mit den alten Anmeldedaten möglich ist.

0.6) Identitäts-Header von Tailscale Serve

Wenn gateway.auth.allowTailscale true ist (Standard für Serve), akzeptiert OpenClaw Identitäts-Header von Tailscale Serve (tailscale-user-login) zur Authentifizierung von Control UI/WebSocket. OpenClaw verifiziert die Identität, indem es die Adresse in x-forwarded-for über den lokalen Tailscale-Daemon (tailscale whois) auflöst und mit dem Header abgleicht. Dies wird nur für Anfragen ausgelöst, die loopback erreichen und x-forwarded-for, x-forwarded-proto und x-forwarded-host enthalten, wie sie von Tailscale injiziert werden. Für diesen asynchronen Pfad der Identitätsprüfung werden fehlgeschlagene Versuche für denselben {scope, ip} serialisiert, bevor der Limiter den Fehler erfasst. Gleichzeitige fehlerhafte Wiederholungen eines Serve-Clients können daher den zweiten Versuch sofort sperren, statt als zwei einfache Fehlanpassungen durchzurutschen. HTTP-API-Endpunkte (zum Beispiel /v1/*, /tools/invoke und /api/channels/*) verwenden keine Tailscale-Identitäts-Header-Authentifizierung. Sie folgen weiterhin dem konfigurierten HTTP-Authentifizierungsmodus des Gateway. Wichtiger Hinweis zur Grenze:
  • Gateway-HTTP-Bearer-Auth ist effektiv Operator-Zugriff nach dem Prinzip „alles oder nichts“.
  • Behandeln Sie Anmeldedaten, die /v1/chat/completions, /v1/responses oder /api/channels/* aufrufen können, als Operator-Secrets mit vollständigem Zugriff für dieses Gateway.
  • Auf der OpenAI-kompatiblen HTTP-Oberfläche stellt Shared-Secret-Bearer-Auth die vollständigen Standard-Scopes für Operatoren (operator.admin, operator.approvals, operator.pairing, operator.read, operator.talk.secrets, operator.write) und die Owner-Semantik für Agent-Turns wieder her; engere Werte in x-openclaw-scopes reduzieren diesen Shared-Secret-Pfad nicht.
  • Semantik pro Anfrage für Scopes über HTTP gilt nur, wenn die Anfrage aus einem identitätstragenden Modus stammt, zum Beispiel Trusted-Proxy-Auth oder gateway.auth.mode="none" auf privatem Ingress.
  • In diesen identitätstragenden Modi greift das Weglassen von x-openclaw-scopes auf die normale Standardmenge der Operator-Scopes zurück; senden Sie den Header explizit, wenn Sie eine engere Scope-Menge wünschen.
  • /tools/invoke folgt derselben Shared-Secret-Regel: Bearer-Auth per Token/Passwort wird dort ebenfalls als voller Operator-Zugriff behandelt, während identitätstragende Modi weiterhin deklarierte Scopes beachten.
  • Teilen Sie diese Anmeldedaten nicht mit nicht vertrauenswürdigen Aufrufern; bevorzugen Sie separate Gateways pro Vertrauensgrenze.
Vertrauensannahme: Tokenlose Serve-Auth setzt voraus, dass der Gateway-Host vertrauenswürdig ist. Behandeln Sie dies nicht als Schutz gegen feindliche Prozesse auf demselben Host. Wenn nicht vertrauenswürdiger lokaler Code auf dem Gateway-Host laufen könnte, deaktivieren Sie gateway.auth.allowTailscale und verlangen Sie explizite Shared-Secret-Auth mit gateway.auth.mode: "token" oder "password". Sicherheitsregel: Leiten Sie diese Header nicht von Ihrem eigenen Reverse Proxy weiter. Wenn Sie TLS vor dem Gateway terminieren oder davor proxen, deaktivieren Sie gateway.auth.allowTailscale und verwenden Sie stattdessen Shared-Secret-Auth (gateway.auth.mode: "token" oder "password") oder Trusted Proxy Auth. Trusted Proxies:
  • Wenn Sie TLS vor dem Gateway terminieren, setzen Sie gateway.trustedProxies auf die IPs Ihres Proxy.
  • OpenClaw vertraut dann x-forwarded-for (oder x-real-ip) von diesen IPs, um die Client-IP für lokale Pairing-Prüfungen und HTTP-Auth-/Lokalprüfungen zu bestimmen.
  • Stellen Sie sicher, dass Ihr Proxy x-forwarded-for überschreibt und direkten Zugriff auf den Gateway-Port blockiert.
Siehe Tailscale und Web-Überblick.

0.6.1) Browser Control über Node-Host (empfohlen)

Wenn Ihr Gateway Remote ist, der Browser aber auf einem anderen Rechner läuft, betreiben Sie einen Node-Host auf dem Browser-Rechner und lassen Sie Browser-Aktionen durch das Gateway proxen (siehe Browser-Tool). Behandeln Sie Node-Pairing wie Admin-Zugriff. Empfohlenes Muster:
  • Halten Sie Gateway und Node-Host im selben Tailnet (Tailscale).
  • Pairen Sie den Node bewusst; deaktivieren Sie Browser-Proxy-Routing, wenn Sie es nicht benötigen.
Vermeiden Sie:
  • die Exposition von Relay-/Control-Ports über LAN oder das öffentliche Internet.
  • Tailscale Funnel für Browser-Control-Endpunkte (öffentliche Exposition).

0.7) Secrets auf dem Datenträger (sensible Daten)

Gehen Sie davon aus, dass alles unter ~/.openclaw/ (oder $OPENCLAW_STATE_DIR/) Secrets oder private Daten enthalten kann:
  • openclaw.json: Konfiguration kann Tokens enthalten (Gateway, Remote-Gateway), Provider-Einstellungen und Allowlists.
  • credentials/**: Kanal-Anmeldedaten (zum Beispiel WhatsApp-Creds), Pairing-Allowlists, Legacy-OAuth-Importe.
  • agents/<agentId>/agent/auth-profiles.json: API-Schlüssel, Token-Profile, OAuth-Tokens und optionale keyRef/tokenRef.
  • secrets.json (optional): dateibasierte Secret-Payload, die von file-SecretRef-Providern (secrets.providers) verwendet wird.
  • agents/<agentId>/agent/auth.json: Legacy-Kompatibilitätsdatei. Statische api_key-Einträge werden entfernt, wenn sie gefunden werden.
  • agents/<agentId>/sessions/**: Sitzungstranskripte (*.jsonl) + Routing-Metadaten (sessions.json), die private Nachrichten und Tool-Ausgaben enthalten können.
  • gebündelte Plugin-Pakete: installierte Plugins (einschließlich ihrer node_modules/).
  • sandboxes/**: Tool-Sandbox-Workspaces; können Kopien von Dateien ansammeln, die Sie in der Sandbox lesen/schreiben.
Härtungstipps:
  • Halten Sie Berechtigungen eng (700 für Verzeichnisse, 600 für Dateien).
  • Verwenden Sie vollständige Datenträgerverschlüsselung auf dem Gateway-Host.
  • Bevorzugen Sie ein dediziertes OS-Benutzerkonto für das Gateway, wenn der Host gemeinsam genutzt wird.

0.8) Logs + Transkripte (Redaction + Retention)

Logs und Transkripte können sensible Informationen preisgeben, selbst wenn die Zugriffskontrollen korrekt sind:
  • Gateway-Logs können Tool-Zusammenfassungen, Fehler und URLs enthalten.
  • Sitzungstranskripte können eingefügte Secrets, Dateiinhalte, Befehlsausgaben und Links enthalten.
Empfehlungen:
  • Lassen Sie die Redaction von Tool-Zusammenfassungen aktiviert (logging.redactSensitive: "tools"; Standard).
  • Fügen Sie über logging.redactPatterns benutzerdefinierte Muster für Ihre Umgebung hinzu (Tokens, Hostnamen, interne URLs).
  • Wenn Sie Diagnosedaten teilen, bevorzugen Sie openclaw status --all (einfügbar, Secrets redigiert) statt roher Logs.
  • Bereinigen Sie alte Sitzungstranskripte und Logdateien, wenn Sie keine lange Aufbewahrung benötigen.
Details: Logging

1) DMs: standardmäßig Pairing

{
  channels: { whatsapp: { dmPolicy: "pairing" } },
}

2) Gruppen: überall Erwähnung verlangen

{
  "channels": {
    "whatsapp": {
      "groups": {
        "*": { "requireMention": true }
      }
    }
  },
  "agents": {
    "list": [
      {
        "id": "main",
        "groupChat": { "mentionPatterns": ["@openclaw", "@mybot"] }
      }
    ]
  }
}
In Gruppenchats nur antworten, wenn der Bot explizit erwähnt wird.

3) Separate Nummern (WhatsApp, Signal, Telegram)

Für Kanäle auf Basis von Telefonnummern sollten Sie erwägen, Ihre KI auf einer separaten Telefonnummer von Ihrer persönlichen Nummer zu betreiben:
  • Persönliche Nummer: Ihre Gespräche bleiben privat
  • Bot-Nummer: Die KI bearbeitet diese, mit passenden Grenzen

4) Read-Only-Modus (über Sandbox + Tools)

Sie können ein Read-Only-Profil aufbauen, indem Sie Folgendes kombinieren:
  • agents.defaults.sandbox.workspaceAccess: "ro" (oder "none" für keinen Zugriff auf den Workspace)
  • Tool-Allow-/Deny-Listen, die write, edit, apply_patch, exec, process usw. blockieren
Zusätzliche Härtungsoptionen:
  • tools.exec.applyPatch.workspaceOnly: true (Standard): stellt sicher, dass apply_patch auch ohne Sandboxing keine Dateien außerhalb des Workspace-Verzeichnisses schreiben/löschen kann. Setzen Sie es nur dann auf false, wenn apply_patch bewusst Dateien außerhalb des Workspace anfassen soll.
  • tools.fs.workspaceOnly: true (optional): beschränkt Pfade für read/write/edit/apply_patch sowie native automatische Bild-Ladepfade in Prompts auf das Workspace-Verzeichnis (nützlich, wenn Sie heute absolute Pfade erlauben und eine einzelne Leitplanke möchten).
  • Halten Sie Dateisystem-Wurzeln eng: Vermeiden Sie breite Wurzeln wie Ihr Home-Verzeichnis für Agent-Workspaces/Sandbox-Workspaces. Breite Wurzeln können sensible lokale Dateien (zum Beispiel Status/Konfiguration unter ~/.openclaw) für Dateisystem-Tools sichtbar machen.

5) Sichere Basislinie (Copy/Paste)

Eine „sichere Standard“-Konfiguration, die das Gateway privat hält, DM-Pairing verlangt und Always-On-Bots in Gruppen vermeidet:
{
  gateway: {
    mode: "local",
    bind: "loopback",
    port: 18789,
    auth: { mode: "token", token: "your-long-random-token" },
  },
  channels: {
    whatsapp: {
      dmPolicy: "pairing",
      groups: { "*": { requireMention: true } },
    },
  },
}
Wenn Sie auch die Tool-Ausführung standardmäßig „sicherer“ machen möchten, fügen Sie Sandboxing hinzu und verweigern Sie gefährliche Tools für jeden Nicht-Owner-Agenten (Beispiel unten unter „Zugriffsprofile pro Agent“). Integrierte Basislinie für chatgesteuerte Agent-Turns: Absender, die nicht der Owner sind, können die Tools cron oder gateway nicht verwenden.

Sandboxing (empfohlen)

Eigenständige Dokumentation: Sandboxing Zwei sich ergänzende Ansätze:
  • Das gesamte Gateway in Docker ausführen (Container-Grenze): Docker
  • Tool-Sandbox (agents.defaults.sandbox, Host-Gateway + Docker-isolierte Tools): Sandboxing
Hinweis: Um Zugriff zwischen Agenten zu verhindern, belassen Sie agents.defaults.sandbox.scope bei "agent" (Standard) oder "session" für strengere Isolation pro Sitzung. scope: "shared" verwendet einen einzigen Container/Workspace. Berücksichtigen Sie auch den Zugriff des Agenten auf den Workspace innerhalb der Sandbox:
  • agents.defaults.sandbox.workspaceAccess: "none" (Standard) hält den Agent-Workspace unzugänglich; Tools arbeiten gegen einen Sandbox-Workspace unter ~/.openclaw/sandboxes
  • agents.defaults.sandbox.workspaceAccess: "ro" mountet den Agent-Workspace read-only unter /agent (deaktiviert write/edit/apply_patch)
  • agents.defaults.sandbox.workspaceAccess: "rw" mountet den Agent-Workspace read/write unter /workspace
  • Zusätzliche sandbox.docker.binds werden gegen normalisierte und kanonisierte Quellpfade validiert. Tricks mit Parent-Symlinks und kanonischen Home-Aliasen schlagen weiterhin geschlossen fehl, wenn sie in blockierte Wurzeln wie /etc, /var/run oder Verzeichnisse mit Anmeldedaten unter dem OS-Home aufgelöst werden.
Wichtig: tools.elevated ist der globale Escape-Hatch der Basislinie, der Exec außerhalb der Sandbox ausführt. Der effektive Host ist standardmäßig gateway oder node, wenn das Exec-Ziel auf node konfiguriert ist. Halten Sie tools.elevated.allowFrom eng und aktivieren Sie es nicht für Fremde. Sie können Elevated zusätzlich pro Agent über agents.list[].tools.elevated beschränken. Siehe Elevated Mode.

Leitplanke für Sub-Agent-Delegation

Wenn Sie Session-Tools erlauben, behandeln Sie delegierte Sub-Agent-Läufe als weitere Boundary-Entscheidung:
  • Verweigern Sie sessions_spawn, sofern der Agent Delegation nicht wirklich benötigt.
  • Halten Sie agents.defaults.subagents.allowAgents und alle agentenspezifischen Überschreibungen agents.list[].subagents.allowAgents auf bekannte sichere Ziel-Agenten beschränkt.
  • Für jeden Workflow, der sandboxed bleiben muss, rufen Sie sessions_spawn mit sandbox: "require" auf (Standard ist inherit).
  • sandbox: "require" schlägt schnell fehl, wenn die Laufzeit des Ziel-Child nicht sandboxed ist.

Risiken bei Browser Control

Das Aktivieren von Browser Control gibt dem Modell die Fähigkeit, einen echten Browser zu steuern. Wenn dieses Browser-Profil bereits angemeldete Sitzungen enthält, kann das Modell auf diese Konten und Daten zugreifen. Behandeln Sie Browser-Profile als sensiblen Status:
  • Bevorzugen Sie ein dediziertes Profil für den Agenten (das Standardprofil openclaw).
  • Vermeiden Sie es, den Agenten auf Ihr persönliches Daily-Driver-Profil zu richten.
  • Lassen Sie hostseitige Browser Control für sandboxed Agenten deaktiviert, wenn Sie ihnen nicht vertrauen.
  • Die eigenständige loopback-Browser-Control-API akzeptiert nur Shared-Secret-Auth (Gateway-Token-Bearer-Auth oder Gateway-Passwort). Sie verarbeitet keine Tailscale-Serve-Identitäts-Header und keine Identitäts-Header eines Trusted Proxy.
  • Behandeln Sie Browser-Downloads als nicht vertrauenswürdige Eingabe; bevorzugen Sie ein isoliertes Download-Verzeichnis.
  • Deaktivieren Sie Browser-Sync/Passwortmanager im Agent-Profil, wenn möglich (verringert die Auswirkungen).
  • Für Remote-Gateways gilt: „Browser Control“ ist gleichbedeutend mit „Operator-Zugriff“ auf alles, was dieses Profil erreichen kann.
  • Halten Sie Gateway und Node-Hosts ausschließlich im Tailnet; exponieren Sie keine Browser-Control-Ports ins LAN oder öffentliche Internet.
  • Deaktivieren Sie Browser-Proxy-Routing, wenn Sie es nicht brauchen (gateway.nodes.browser.mode="off").
  • Der Modus für bestehende Sitzungen von Chrome MCP ist nicht „sicherer“; er kann als Sie handeln, in allem, was dieses Chrome-Profil auf dem Host erreichen kann.

Browser-SSRF-Richtlinie (Standard für vertrauenswürdige Netzwerke)

Die Browser-Netzwerkrichtlinie von OpenClaw folgt standardmäßig dem Modell des vertrauenswürdigen Operators: private/interne Ziele sind erlaubt, solange Sie sie nicht explizit deaktivieren.
  • Standard: browser.ssrfPolicy.dangerouslyAllowPrivateNetwork: true (implizit, wenn nicht gesetzt).
  • Legacy-Alias: browser.ssrfPolicy.allowPrivateNetwork wird aus Kompatibilitätsgründen weiterhin akzeptiert.
  • Strikter Modus: Setzen Sie browser.ssrfPolicy.dangerouslyAllowPrivateNetwork: false, um private/interne/Special-Use-Ziele standardmäßig zu blockieren.
  • Im strikten Modus verwenden Sie hostnameAllowlist (Muster wie *.example.com) und allowedHostnames (exakte Host-Ausnahmen, auch blockierte Namen wie localhost) für explizite Ausnahmen.
  • Navigation wird vor der Anfrage geprüft und bestmöglich auf der endgültigen http(s)-URL nach der Navigation erneut geprüft, um Weiterleitungs-Pivots zu erschweren.
Beispiel für eine strikte Richtlinie:
{
  browser: {
    ssrfPolicy: {
      dangerouslyAllowPrivateNetwork: false,
      hostnameAllowlist: ["*.example.com", "example.com"],
      allowedHostnames: ["localhost"],
    },
  },
}

Zugriffsprofile pro Agent (Multi-Agent)

Mit Multi-Agent-Routing kann jeder Agent seine eigene Sandbox + Tool-Richtlinie haben: Verwenden Sie dies, um vollen Zugriff, Read-Only oder keinen Zugriff pro Agent zu vergeben. Siehe Multi-Agent Sandbox & Tools für vollständige Details und Regeln zur Priorität. Häufige Anwendungsfälle:
  • Persönlicher Agent: voller Zugriff, keine Sandbox
  • Familien-/Arbeits-Agent: sandboxed + Read-Only-Tools
  • Öffentlicher Agent: sandboxed + keine Dateisystem-/Shell-Tools

Beispiel: voller Zugriff (keine Sandbox)

{
  agents: {
    list: [
      {
        id: "personal",
        workspace: "~/.openclaw/workspace-personal",
        sandbox: { mode: "off" },
      },
    ],
  },
}

Beispiel: Read-Only-Tools + Read-Only-Workspace

{
  agents: {
    list: [
      {
        id: "family",
        workspace: "~/.openclaw/workspace-family",
        sandbox: {
          mode: "all",
          scope: "agent",
          workspaceAccess: "ro",
        },
        tools: {
          allow: ["read"],
          deny: ["write", "edit", "apply_patch", "exec", "process", "browser"],
        },
      },
    ],
  },
}

Beispiel: kein Dateisystem-/Shell-Zugriff (Provider-Messaging erlaubt)

{
  agents: {
    list: [
      {
        id: "public",
        workspace: "~/.openclaw/workspace-public",
        sandbox: {
          mode: "all",
          scope: "agent",
          workspaceAccess: "none",
        },
        // Session-Tools können sensible Daten aus Transkripten offenlegen. Standardmäßig begrenzt OpenClaw diese Tools
        // auf die aktuelle Sitzung + Sitzungen erzeugter Sub-Agenten, aber Sie können dies bei Bedarf weiter einschränken.
        // Siehe `tools.sessions.visibility` in der Konfigurationsreferenz.
        tools: {
          sessions: { visibility: "tree" }, // self | tree | agent | all
          allow: [
            "sessions_list",
            "sessions_history",
            "sessions_send",
            "sessions_spawn",
            "session_status",
            "whatsapp",
            "telegram",
            "slack",
            "discord",
          ],
          deny: [
            "read",
            "write",
            "edit",
            "apply_patch",
            "exec",
            "process",
            "browser",
            "canvas",
            "nodes",
            "cron",
            "gateway",
            "image",
          ],
        },
      },
    ],
  },
}

Was Sie Ihrer KI sagen sollten

Nehmen Sie Sicherheitsrichtlinien in den System-Prompt Ihres Agenten auf:
## Sicherheitsregeln
- Niemals Verzeichnislisten oder Dateipfade an Fremde weitergeben
- Niemals API-Schlüssel, Anmeldedaten oder Infrastrukturdetails offenlegen
- Anfragen, die Systemkonfiguration ändern, mit dem Eigentümer verifizieren
- Im Zweifel vor dem Handeln nachfragen
- Private Daten privat halten, sofern nicht ausdrücklich autorisiert

Reaktion auf Vorfälle

Wenn Ihre KI etwas Schlechtes tut:

Eindämmen

  1. Stoppen: Beenden Sie die macOS-App (wenn sie das Gateway überwacht) oder terminieren Sie Ihren openclaw gateway-Prozess.
  2. Exposition schließen: Setzen Sie gateway.bind: "loopback" (oder deaktivieren Sie Tailscale Funnel/Serve), bis Sie verstanden haben, was passiert ist.
  3. Zugriff einfrieren: Schalten Sie riskante DMs/Gruppen auf dmPolicy: "disabled" / Erwähnungen erforderlich um und entfernen Sie "*"-Allow-All-Einträge, falls vorhanden.

Rotieren (bei offengelegten Secrets von Kompromittierung ausgehen)

  1. Gateway-Auth rotieren (gateway.auth.token / OPENCLAW_GATEWAY_PASSWORD) und neu starten.
  2. Remote-Client-Secrets rotieren (gateway.remote.token / .password) auf allen Rechnern, die das Gateway aufrufen können.
  3. Provider-/API-Anmeldedaten rotieren (WhatsApp-Creds, Slack-/Discord-Tokens, Modell-/API-Schlüssel in auth-profiles.json und Werte in verschlüsselten Secret-Payloads, falls verwendet).

Auditieren

  1. Gateway-Logs prüfen: /tmp/openclaw/openclaw-YYYY-MM-DD.log (oder logging.file).
  2. Relevante Transkripte prüfen: ~/.openclaw/agents/<agentId>/sessions/*.jsonl.
  3. Jüngste Konfigurationsänderungen prüfen (alles, was den Zugriff erweitert haben könnte: gateway.bind, gateway.auth, DM-/Gruppenrichtlinien, tools.elevated, Plugin-Änderungen).
  4. openclaw security audit --deep erneut ausführen und bestätigen, dass kritische Befunde behoben sind.

Für einen Bericht erfassen

  • Zeitstempel, OS des Gateway-Hosts + OpenClaw-Version
  • Sitzungsprotokolle + kurzer Log-Tail (nach Redaction)
  • Was der Angreifer gesendet hat + was der Agent getan hat
  • Ob das Gateway über loopback hinaus exponiert war (LAN/Tailscale Funnel/Serve)

Secret-Scanning (detect-secrets)

CI führt im Job secrets den Pre-Commit-Hook detect-secrets aus. Pushes nach main führen immer einen Scan über alle Dateien aus. Pull Requests verwenden, wenn ein Basis-Commit verfügbar ist, einen schnellen Pfad mit geänderten Dateien und greifen sonst auf einen Scan über alle Dateien zurück. Wenn dies fehlschlägt, gibt es neue Kandidaten, die noch nicht in der Baseline stehen.

Wenn CI fehlschlägt

  1. Lokal reproduzieren:
    pre-commit run --all-files detect-secrets
    
  2. Die Tools verstehen:
    • detect-secrets in pre-commit führt detect-secrets-hook mit der Baseline und den Excludes des Repo aus.
    • detect-secrets audit öffnet eine interaktive Prüfung, um jedes Baseline-Element als echt oder Fehlalarm zu markieren.
  3. Bei echten Secrets: rotieren/entfernen und den Scan erneut ausführen, um die Baseline zu aktualisieren.
  4. Bei Fehlalarmen: interaktives Audit ausführen und sie als falsch markieren:
    detect-secrets audit .secrets.baseline
    
  5. Wenn Sie neue Excludes benötigen, fügen Sie sie zu .detect-secrets.cfg hinzu und erzeugen Sie die Baseline mit passenden Flags --exclude-files / --exclude-lines neu (die Konfigurationsdatei dient nur als Referenz; detect-secrets liest sie nicht automatisch).
Committen Sie die aktualisierte .secrets.baseline, sobald sie den beabsichtigten Zustand widerspiegelt.

Sicherheitsprobleme melden

Eine Schwachstelle in OpenClaw gefunden? Bitte verantwortungsvoll melden:
  1. E-Mail: security@openclaw.ai
  2. Nicht öffentlich posten, bevor sie behoben ist
  3. Wir nennen Sie als Entdecker (es sei denn, Sie bevorzugen Anonymität)