diff --git a/DOCS.md b/DOCS.md index ade1baa..4a3281c 100644 --- a/DOCS.md +++ b/DOCS.md @@ -251,7 +251,7 @@ All options are set via **Settings → Apps/Add-ons → OpenClaw Assistant → C When `gateway_auth_mode: trusted-proxy` is used, the add-on sets `gateway.auth.trustedProxy.userHeader` to `x-forwarded-user` by default. | `force_ipv4_dns` | bool | `false` | Force IPv4-first DNS ordering for Node network calls. Useful if IPv6 DNS resolves but IPv6 egress is broken (can affect Telegram API polling). | -| `gateway_env_vars` | map(string) | `{}` | Environment variables exported to the gateway process at startup. Use YAML map format (for example `OPENAI_API_KEY: "sk-..."`). Limits: max 50 vars, key length 255, value length 10000. | +| `gateway_env_vars` | map(string) | `{}` | Environment variables exported to the gateway process at startup. Use YAML map format (for example `SERVICE_API_KEY: "..."`). Limits: max 50 vars, key length 255, value length 10000. Reserved runtime keys are blocked (for example `PATH`, `HOME`, `NODE_OPTIONS`, `NODE_PATH`, `OPENCLAW_*`, proxy vars). | ### Terminal diff --git a/openclaw_assistant/CHANGELOG.md b/openclaw_assistant/CHANGELOG.md index 4020249..4a3dc20 100644 --- a/openclaw_assistant/CHANGELOG.md +++ b/openclaw_assistant/CHANGELOG.md @@ -6,6 +6,7 @@ All notable changes to the OpenClaw Assistant Home Assistant Add-on will be docu ### Fixed - **`web_fetch failed: fetch failed`**: changed `force_ipv4_dns` default to **true**. Node 22 tries IPv6 first; most HAOS VMs lack IPv6 egress, causing outbound `web_fetch` / HTTP tool calls to time out. +- **`gateway_env_vars` safety**: block overrides for reserved runtime variables (for example `PATH`, `HOME`, `NODE_OPTIONS`, `NODE_PATH`, `OPENCLAW_*`, proxy vars) to prevent accidental startup/security regressions. ### Added - **`nginx_log_level` option** (`minimal` / `full`, default `minimal`): suppresses repetitive Home Assistant health-check and polling requests (`GET /`, `GET /v1/models`, `POST /tools/invoke`) from the nginx access log. diff --git a/openclaw_assistant/config.yaml b/openclaw_assistant/config.yaml index efdd48b..0c6b651 100644 --- a/openclaw_assistant/config.yaml +++ b/openclaw_assistant/config.yaml @@ -116,6 +116,8 @@ options: # Feature flags: # FEATURE_FLAG_X: "1" # FEATURE_FLAG_Y: "0" + # Reserved keys are blocked to protect runtime/security + # (e.g. PATH, HOME, NODE_OPTIONS, NODE_PATH, OPENCLAW_*, proxy vars). # Limits: max 50 variables, max key length 255 chars, max value length 10000 chars gateway_env_vars: {} diff --git a/openclaw_assistant/run.sh b/openclaw_assistant/run.sh index 45eb713..b58bcf5 100644 --- a/openclaw_assistant/run.sh +++ b/openclaw_assistant/run.sh @@ -190,6 +190,27 @@ export PNPM_HOME="${PERSISTENT_NODE_GLOBAL}/pnpm" mkdir -p "$PNPM_HOME" export PATH="${PNPM_HOME}:${PATH}" +# Protect critical runtime variables from accidental override via gateway_env_vars. +is_reserved_gateway_env_var() { + case "$1" in + # Critical runtime paths/process vars. + HOME|PATH|PWD|OLDPWD|SHLVL|TZ|XDG_CONFIG_HOME|PNPM_HOME|NODE_PATH|NODE_OPTIONS|NODE_NO_WARNINGS) + return 0 + ;; + # Proxy vars managed by add-on options. + HTTP_PROXY|HTTPS_PROXY|NO_PROXY|http_proxy|https_proxy|no_proxy) + return 0 + ;; + # Add-on internal control vars. + OPENCLAW_*) + return 0 + ;; + *) + return 1 + ;; + esac +} + # Export gateway environment variables from add-on config # These are user-defined variables that should be available to the gateway process if [ "$GW_ENV_VARS" != "{}" ] && [ -n "$GW_ENV_VARS" ]; then @@ -212,6 +233,12 @@ if [ "$GW_ENV_VARS" != "{}" ] && [ -n "$GW_ENV_VARS" ]; then continue fi + # Protect critical runtime variables from accidental override. + if is_reserved_gateway_env_var "$key"; then + echo "WARN: Reserved environment variable '$key' cannot be overridden via gateway_env_vars (skip)" + continue + fi + # Enforce max variable name length if [ ${#key} -gt $max_var_name_size ]; then echo "WARN: Environment variable name too long: '$key' (max $max_var_name_size chars, skip)"