openclaw: почему “безопасность” из доков — декорация
openclaw security на 16 февраля 2026: что реально работает, а что нет. я разобрал безопасность openclaw руками — ломал, чинил, ломал снова. вот что нашёл.
короткая версия: у openclaw четыре слоя защиты. три из них ненадёжны в изоляции. четвёртый — opt-in и выключен по умолчанию.
security researcher Maor Dayan нашёл 42,665 openclaw инстансов на shodan. 93.4% с auth bypass. восемь — полностью открытые. без пароля. с shell-доступом для любого. один сливал anthropic api key одиннадцать дней. (source: maordayanofficial.medium.com — “The Sovereign AI Security Crisis”)
это не баг. это ДЕФОЛТНАЯ КОНФИГУРАЦИЯ.
что сломано конкретно
слой 1: промпт-уровень
пишешь в SECURITY.md “никогда не используй bash”. бот слушается. но prompt injection обходит это за один ход. и обратное: бот блокирует ЛЕГИТИМНЫЕ команды тк “промпт запретил”.
openclaw сами пишут: “system prompt guardrails are soft guidance only”
промпт = policy/UX. не enforcement.
слой 2: config-level (tool policy)
доки описывают красивую систему — allow/deny lists, per-agent overrides, profiles. на практике:
— tools.allow с незагруженным плагином молча блокирует ВСЕ tools
— write tool имеет path restrictions, exec — нет. exec с cat <<EOF обходит write restrictions
— sandboxed agent возвращает “Tool exec not found” при exec в обоих allow lists
— compound commands (ls | grep) парсятся некорректно
— все tools инжектятся в system prompt без per-tool disable — 14k токенов overhead на каждое сообщение
в нашем кейсе интерактивная approval-модель (ask:on-miss) убивала автономность — пришлось отключить (security=full, ask=off) и перенести enforcement в инфру.
слой 3: docker sandbox
container isolation сильная штука. но у нас — operational mismatch:
— “all” mode переносит workspace в ~/.openclaw/sandboxes/ — агент теряет доступ к рабочим файлам — “non-main” sandbox’ит embedded agents (heartbeat, nightly) которым НУЖЕН workspace, а main agent (injection target) остаётся на host — результат: sandbox защищает тех кому не угрожает, и не защищает того кому угрожает
предложение сделать sandbox дефолтом: github.com/openclaw/openclaw/issues/7827. до сих пор не принято.
слой 4: infra-level
единственный который не обходится промптом. не зависит от сломанного config engine. и openclaw его не предоставляет из коробки.
замкнутый круг
промпт = soft → ок, полагаемся на tool policy → tool policy ненадёжна → ок, полагаемся на sandbox → sandbox ломает state → ок, полагаемся на промпт → 🔄
как я это решил
построил enforcement на уровне ОС. prompt и config policies остались как дополнительный слой — но фундамент другой.
bwrap (bubblewrap) — namespace isolation. exec запускается в изолированном OS namespace. секреты физически невидимы — их нет в filesystem exec-процесса. 23/23 pentest pass (SEC-011). промптом не обходится — уровень ядра.
fs-guard через PreToolUse hooks — native механизм openclaw (settings.json hooks). read/edit/write/glob/grep ограничены workspace. не требует отдельного юзера или ACL — hook проверяет путь ДО выполнения и блокирует если за пределами workspace.
SOPS+age vault — секреты хранятся зашифрованными на диске. decrypt в tmpfs при старте сервиса. plaintext нигде не лежит. tmpfs не пробрасывается в bwrap namespace. known gap: process.env в памяти основного процесса остаётся чувствительной зоной — exec sandbox его не видит, но полного решения нет.
DLP + watchdog — обнаружение утечек на выходе + авто-откат tamper-изменений конфигов.
принцип: enforcement first, prompting second. сначала технические границы (OS/filesystem/secrets/network), потом prompt-правила для UX и governance.
весь код открыт. бери готовое:
🔒 bwrap sandbox hook (namespace isolation для exec)
🛡 fs-guard hook (workspace-only Read/Write/Edit)
🔐 vault setup (SOPS+age — encrypt .env at rest)
🛡 output DLP hook (ловит утечки ключей в чат)
🔍 secureclaw — 42-check automated security audit
🧪 pentest script (проверить что всё работает)
📋 всё вместе + доки + philosophy
что остаётся открытым
— egress доменная allowlist (SEC-009) в прогрессе — без неё agent может exfiltrate через DNS/HTTP — process.env в памяти процесса — нет идеального решения — некоторые токены живут в runtime-конфиге из-за ограничений платформы — inter-agent trust: scout → builder через shared filesystem = transitive trust, confused deputy
как думать о разных агентах
не “типы агентов”, а что агент может сломать. trust surface — три оси:
access — что видит? секреты, чужие данные, интернет affect — что меняет? файлы, деплой, отправка сообщений exposure — кто с ним говорит? только ты, друзья, публичный чат, другие боты
чем больше пересечение — тем жёстче infra-enforcement.
scout/researcher — LOW access, ZERO affect. читает web. нет exec. bwrap не нужен. builder — HIGH access, HIGH affect (workspace only). exec в bwrap sandbox. секреты скрыты. operator — HIGH access, HIGH affect (system). human approval обязателен. единственный реально опасный. public-facing — LOW access, MEDIUM affect (reputation). нет exec. DLP на выходе.
специализация ≠ безопасность. сначала infra enforcement, потом специализация для UX и blast radius.
контекст
peter steinberger уходит в openai. объявил 14 февраля 2026. проект переходит в open-source foundation. altman: “openclaw will live in a foundation as an open source project that openai will continue to support.” (source: steipete.me/posts/2026/openclaw, подтверждено techcrunch, bloomberg, cnbc)
cisco нашли malicious skill в clawhub — data exfiltration и prompt injection без ведома юзера. skill repository без нормального vetting. (source: wikipedia.org/wiki/OpenClaw, со ссылкой на cisco ai security research)
полагаться на upstream — лотерея. защищайте инстанс сами.
все ссылки:
— shodan research: maordayanofficial.medium.com (42,665 instances)
— openclaw security docs: docs.openclaw.ai/gateway/security
— sandboxing docs: docs.openclaw.ai/gateway/sandboxing
— tool security deepwiki: deepwiki.com/openclaw/openclaw/6.2-tool-security-and-sandboxing — secure defaults proposal: github.com/openclaw/openclaw/issues/7827 — write/exec inconsistency: github.com/openclaw/openclaw/issues/9348 — sandbox exec not found: github.com/openclaw/openclaw/issues/2479 — tools.allow blocks all: github.com/openclaw/openclaw/issues/1566 — no per-tool disable: github.com/openclaw/openclaw/issues/14812 — steinberger → openai: steipete.me/posts/2026/openclaw
что делать прямо сейчас
скопируйте промпт ниже и отправьте своему claude code. он настроит:
мне нужно захарденить мой openclaw инстанс. вот контекст:
ПРОБЛЕМА:
openclaw config-level security ненадёжна в изоляции:
- tools.allow с незагруженным плагином блокирует ВСЕ tools (github.com/openclaw/openclaw/issues/1566)
- write tool path restrictions обходятся через exec + heredoc (github.com/openclaw/openclaw/issues/9348)
- sandboxed agent теряет exec tool (github.com/openclaw/openclaw/issues/2479)
- "non-main" sandbox защищает embedded agents, а main agent (injection target) остаётся на host
- НЕ ПЫТАЙСЯ чинить disallowedTools или tool policy в изоляции — они ненадёжны upstream
справочные доки:
- docs.openclaw.ai/gateway/security
- docs.openclaw.ai/gateway/sandboxing
- github.com/openclaw/openclaw/issues/7827 (secure defaults proposal)
ЗАДАЧА — настрой infra-level enforcement: bwrap + fs-guard + vault + DLP
референсная реализация: github.com/matskevich/openclaw-infra
используй как основу, адаптируй под мою среду.
1. BWRAP SANDBOX (namespace isolation для exec):
- установи bubblewrap: apt install bubblewrap
- создай wrapper script: все exec команды агента запускаются в bwrap namespace
- workspace mount read-write, всё остальное read-only
- /dev, /proc — минимальный набор
- секреты НЕ ВИДНЫ из exec namespace (критично — см. пункт 3)
2. FS-GUARD через PreToolUse hooks (native openclaw механизм):
- настрой settings.json hooks для PreToolUse
- read/edit/write/glob/grep — ТОЛЬКО workspace
- hook проверяет путь ДО выполнения и блокирует если за пределами workspace
- НЕ используй отдельного юзера или linux ACL — PreToolUse hooks проще и native
3. VAULT через SOPS+age (encryption at rest):
- установи SOPS и age: apt install sops age (или brew)
- зашифруй все API keys, tokens, credentials через sops --encrypt
- при старте сервиса: decrypt в tmpfs (mount -t tmpfs tmpfs /run/openclaw-secrets)
- env_file указывает на tmpfs
- .env файл owned by сервисным юзером (НЕ root — иначе user service не прочитает)
- tmpfs с секретами НЕ пробрасывается в bwrap namespace
- known gap: process.env в памяти основного процесса остаётся — exec sandbox его не видит, но полного решения нет
4. DLP + WATCHDOG:
- output DLP: агент не отправляет наружу секреты, .env, API ключи
- config watchdog: авто-откат при несанкционированных изменениях конфигов
- логирование всех exec команд + logrotate
5. EGRESS FILTERING (если готов):
- exec sandbox без unrestricted internet
- iptables/nftables: whitelist только нужных доменов
- без этого agent может exfiltrate через DNS/HTTP
для каждого шага покажи конфиг и объясни от какой атаки защищает.
МОЯ СРЕДА:
- OS: [укажи — ubuntu/debian]
- openclaw version: [укажи]
- где крутится: [VPS/домашний сервер/docker]
- агенты: [personal/work/public — опиши]
или если хотите руками — готовый код: github.com/matskevich/openclaw-infra — hooks, scripts, доки. clone → edit paths → deploy.


