
Офлайн-проверка защищённости в режиме только для чтения для self-hosted установки OpenClaw — внешняя доступность шлюза, аутентификация, CVE-2026-25253. Никогда не выводит секреты и не совершает сетевых вызовов.
Этот скрипт только читает данные. Он ничего не исправляет и не гарантирует вашу безопасность. Зелёный вывод означает лишь то, что перечисленные ниже проверки пройдены, — и ничего более.
openclaw-hardening-check.mjs — это небольшая офлайн-проверка установки OpenClaw, не требующая внешних зависимостей. Он читает локальную конфигурацию, метаданные пакетов, манифесты плагинов и навыков, права доступа к файлам и — в Linux — записи запущенного Gateway в /proc. Он не изменяет файлы, не вызывает команды OpenClaw, не обращается к реестру и не выполняет никаких сетевых запросов.
gateway.bind значением только для loopback, не-loopback или зависимым от времени выполнения. Незаданная или auto привязка внутри обнаруженного контейнера Docker, Podman, Kubernetes или Fly трактуется как 0.0.0.0, что соответствует контейнерному значению OpenClaw по умолчанию. Запущенный Linux Gateway проверяется отдельно, чтобы переопределение из командной строки или службы не могло спрятаться за безопасным значением конфигурации.gateway.auth.token и .password. Распознаёт ${VAR}, $VAR, secretref-env:VAR, __env__:VAR и структурированные SecretRef до измерения учётных данных. Свидетельства окружения аутентификации берутся из сопоставленного процесса Gateway, gateway.systemd.env или state-файла .env, но никогда из процесса аудитора. Значения секретов никогда не выводятся; отчёт содержит только наличие, класс источника и длину. Опубликованные примеры-заглушки и токены короче 24 символов помечаются.2026.1.29 считаются уязвимыми. Уязвимость позволяла параметру строки запроса gatewayUrl инициировать WebSocket-соединение, раскрывавшее токен Gateway. См. запись NVD и рекомендацию OpenClaw.latest, beta или main, когда указано происхождение установки. npm и pnpm не сохраняют исходно запрошенный dist-tag в установленном пакете, поэтому при отсутствии такого происхождения скрипт сообщает «невозможно проверить», а не строит догадки..env, gateway.systemd.env, обнаруженные файлы auth-profiles.json и разрешённые файловые SecretRef на предмет доступа со стороны группы/всех пользователей или неожиданного владельца.dist-runtime/extensions — отдельно от элементов, найденных в state, каталоге конфигурации, управляемых, рабочей области, личных, настроенных или npm-проектных расположениях. Не встроенные элементы помечаются для ручной проверки и никогда не помечаются как вредоносные./proc/net/tcp* с процессами Gateway по файлу точки входа или бинарному файлу и помечает каждый принадлежащий им не-loopback TCP-слушатель. Слушатель на ожидаемом порту, чей владелец не может быть подтверждён, даёт результат «невозможно проверить», а не «Gateway не запущен». Проверка по-прежнему работает на основе дисковых данных, когда Gateway остановлен.Пути и значения по умолчанию соответствуют официальной документации по конфигурации, справочнику по конфигурации, руководству по экспозиции Gateway, документации по навыкам и документации по управлению плагинами.
Скопируйте скрипт на машину, на которой работает OpenClaw, и запустите его под тем же пользователем ОС:
node openclaw-hardening-check.mjs
Конфигурация OpenClaw по умолчанию находится в ~/.openclaw/openclaw.json. Скрипт также учитывает OPENCLAW_CONFIG_PATH, OPENCLAW_STATE_DIR и OPENCLAW_GATEWAY_PORT.
Для нестандартных компоновок и воспроизводимых проверок фиксации версии доступны дополнительные параметры:
node openclaw-hardening-check.mjs \
--config /srv/openclaw/openclaw.json \
--state-dir /srv/openclaw \
--package-root /opt/openclaw/lib/node_modules/openclaw \
--install-spec 2026.6.10
--install-spec должен указывать цель, изначально использованную установщиком или определением развёртывания. Передача текущей установленной версии без проверки этого происхождения не доказывает, что развёртывание зафиксировано.
Проверяющий скрипт никогда не выводит сам секрет, поэтому публикуемая форма фиксирует только его источник и длину:
OpenClaw hardening check
Read-only and offline. Secret values are never printed.
Config: ~/.openclaw/openclaw.json
[PASS] Config: loaded ~/.openclaw/openclaw.json without printing its contents.
[PASS] Gateway bind: loopback; configured for local-only access.
[PASS] Gateway authentication: present via Gateway process environment bootstrap, length 48; value was not printed.
[PASS] Listening sockets: OpenClaw TCP listeners are loopback-only: 127.0.0.1:18789, [::1]:18789.
[PASS] CVE-2026-25253: installed package version 2026.6.10 is at or newer than 2026.1.29.
[PASS] Installation pin: exact target 2026.6.10 is recorded for this check.
[WARN] Third-party plugins: 1: example-plugin. Review it yourself; no malware verdict was attempted.
Summary: No security problems found. 1 item flagged for your review; exit code 0.
Значение секрета: [REDACTED — never present in output].
В сводке отдельно подсчитываются проблемы безопасности (FAIL), элементы для ручной проверки (WARN) и незавершённые проверки (CANNOT CHECK). Результаты WARN и CANNOT CHECK сами по себе не приводят к завершению процесса с ошибкой; только FAIL возвращает код завершения 1.
/proc. На других платформах выдаётся явный результат «невозможно проверить».@latest. Укажите доверенное происхождение развёртывания через --install-spec.Тестовый набор использует только node:test и временные каталоги:
node --test test/openclaw-hardening-check.test.mjs
Илья Прудников — cain-ai.com
| Код | Значение |
|---|
0 | Проблем безопасности FAIL не обнаружено; при этом могут присутствовать результаты WARN или CANNOT CHECK. |
1 | Как минимум одна проблема безопасности FAIL требует внимания. |
2 | Недопустимая командная строка, либо конфигурацию не удалось найти, прочитать, включить или безопасно разобрать. |