openclaw security audit는 checkId로 키가 지정된 구조화된 finding을 방출합니다. 이 페이지는 해당 ID에 대한 참조 카탈로그입니다. 상위 수준의 위협 모델과 하드닝 가이드는 Security를 참조하세요.
실제 배포에서 가장 자주 보게 될 높은 신호의 checkId 값들입니다 (전체가 아닙니다):
checkId | 심각도 | 왜 중요한가 | 주요 fix 키/경로 | 자동 수정 |
|---|---|---|---|---|
fs.state_dir.perms_world_writable | critical | 다른 사용자/프로세스가 전체 OpenClaw state를 수정할 수 있음 | ~/.openclaw의 파일시스템 권한 | yes |
fs.state_dir.perms_group_writable | warn | 그룹 사용자가 전체 OpenClaw state를 수정할 수 있음 | ~/.openclaw의 파일시스템 권한 | yes |
fs.state_dir.perms_readable | warn | state 디렉터리가 다른 사용자에게 읽을 수 있음 | ~/.openclaw의 파일시스템 권한 | yes |
fs.state_dir.symlink | warn | state 디렉터리 대상이 또 다른 trust 경계가 됨 | state 디렉터리 파일시스템 레이아웃 | no |
fs.config.perms_writable | critical | 다른 사용자가 auth/도구 정책/config를 변경할 수 있음 | ~/.openclaw/openclaw.json의 파일시스템 권한 | yes |
fs.config.symlink | warn | 심볼릭 링크된 config 파일은 쓰기가 지원되지 않으며 또 다른 trust 경계를 추가함 | 일반 config 파일로 교체하거나 OPENCLAW_CONFIG_PATH를 실제 파일로 지정 | no |
fs.config.perms_group_readable | warn | 그룹 사용자가 config 토큰/설정을 읽을 수 있음 | config 파일의 파일시스템 권한 | yes |
fs.config.perms_world_readable | critical | config가 토큰/설정을 노출할 수 있음 | config 파일의 파일시스템 권한 | yes |
fs.config_include.perms_writable | critical | config include 파일이 다른 사용자에 의해 수정될 수 있음 | openclaw.json에서 참조된 include 파일 권한 | yes |
fs.config_include.perms_group_readable | warn | 그룹 사용자가 포함된 시크릿/설정을 읽을 수 있음 | openclaw.json에서 참조된 include 파일 권한 | yes |
fs.config_include.perms_world_readable | critical | 포함된 시크릿/설정이 전체에게 읽을 수 있음 | openclaw.json에서 참조된 include 파일 권한 | yes |
fs.auth_profiles.perms_writable | critical | 다른 사용자가 저장된 모델 자격 증명을 주입하거나 교체할 수 있음 | agents/<agentId>/agent/auth-profiles.json 권한 | yes |
fs.auth_profiles.perms_readable | warn | 다른 사용자가 API key와 OAuth 토큰을 읽을 수 있음 | agents/<agentId>/agent/auth-profiles.json 권한 | yes |
fs.credentials_dir.perms_writable | critical | 다른 사용자가 채널 pairing/자격 증명 state를 수정할 수 있음 | ~/.openclaw/credentials의 파일시스템 권한 | yes |
fs.credentials_dir.perms_readable | warn | 다른 사용자가 채널 자격 증명 state를 읽을 수 있음 | ~/.openclaw/credentials의 파일시스템 권한 | yes |
fs.sessions_store.perms_readable | warn | 다른 사용자가 세션 transcript/메타데이터를 읽을 수 있음 | 세션 store 권한 | yes |
fs.log_file.perms_readable | warn | 다른 사용자가 redact되었지만 여전히 민감한 로그를 읽을 수 있음 | gateway 로그 파일 권한 | yes |
fs.synced_dir | warn | iCloud/Dropbox/Drive의 state/config는 토큰/transcript 노출을 확대함 | config/state를 동기화 폴더 외부로 이동 | no |
gateway.bind_no_auth | critical | 공유 시크릿 없는 원격 bind | gateway.bind, gateway.auth.* | no |
gateway.loopback_no_auth | critical | 리버스 프록시된 루프백이 인증되지 않을 수 있음 | gateway.auth.*, 프록시 설정 | no |
gateway.trusted_proxies_missing | warn | 리버스 프록시 헤더가 존재하지만 신뢰되지 않음 | gateway.trustedProxies | no |
gateway.http.no_auth | warn/critical | auth.mode="none"로 gateway HTTP API에 도달 가능 | gateway.auth.mode, gateway.http.endpoints.* | no |
gateway.http.session_key_override_enabled | info | HTTP API 호출자가 sessionKey를 재정의할 수 있음 | gateway.http.allowSessionKeyOverride | no |
gateway.tools_invoke_http.dangerous_allow | warn/critical | HTTP API를 통해 위험한 도구를 다시 활성화함 | gateway.tools.allow | no |
gateway.nodes.allow_commands_dangerous | warn/critical | 영향력이 큰 node 명령(카메라/화면/연락처/캘린더/SMS)을 활성화함 | gateway.nodes.allowCommands | no |
gateway.nodes.deny_commands_ineffective | warn | 패턴 같은 deny 항목이 셸 텍스트 또는 그룹과 일치하지 않음 | gateway.nodes.denyCommands | no |
gateway.tailscale_funnel | critical | 공용 인터넷 노출 | gateway.tailscale.mode | no |
gateway.tailscale_serve | info | Serve를 통한 tailnet 노출이 활성화됨 | gateway.tailscale.mode | no |
gateway.control_ui.allowed_origins_required | critical | 명시적 브라우저 오리진 허용 목록 없이 비 루프백 Control UI | gateway.controlUi.allowedOrigins | no |
gateway.control_ui.allowed_origins_wildcard | warn/critical | allowedOrigins=["*"]가 브라우저 오리진 허용 목록을 비활성화함 | gateway.controlUi.allowedOrigins | no |
gateway.control_ui.host_header_origin_fallback | warn/critical | Host 헤더 오리진 폴백 활성화 (DNS rebinding 하드닝 다운그레이드) | gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback | no |
gateway.control_ui.insecure_auth | warn | 안전하지 않은 auth 호환성 토글이 활성화됨 | gateway.controlUi.allowInsecureAuth | no |
gateway.control_ui.device_auth_disabled | critical | 디바이스 ID 검사를 비활성화함 | gateway.controlUi.dangerouslyDisableDeviceAuth | no |
gateway.real_ip_fallback_enabled | warn/critical | X-Real-IP 폴백을 신뢰하면 프록시 구성 오류로 인한 소스 IP 스푸핑이 가능할 수 있음 | gateway.allowRealIpFallback, gateway.trustedProxies | no |
gateway.token_too_short | warn | 짧은 공유 토큰은 무차별 대입 공격에 더 취약함 | gateway.auth.token | no |
gateway.auth_no_rate_limit | warn | rate limiting 없이 노출된 auth는 무차별 대입 공격 위험을 높임 | gateway.auth.rateLimit | no |
gateway.trusted_proxy_auth | critical | 프록시 ID가 이제 auth 경계가 됨 | gateway.auth.mode="trusted-proxy" | no |
gateway.trusted_proxy_no_proxies | critical | 신뢰된 프록시 IP 없는 trusted-proxy auth는 안전하지 않음 | gateway.trustedProxies | no |
gateway.trusted_proxy_no_user_header | critical | trusted-proxy auth가 사용자 ID를 안전하게 확인할 수 없음 | gateway.auth.trustedProxy.userHeader | no |
gateway.trusted_proxy_no_allowlist | warn | trusted-proxy auth가 인증된 업스트림 사용자를 모두 수락함 | gateway.auth.trustedProxy.allowUsers | no |
gateway.probe_auth_secretref_unavailable | warn | deep probe가 이 명령 경로에서 auth SecretRef를 확인할 수 없었음 | deep-probe auth 소스 / SecretRef 가용성 | no |
gateway.probe_failed | warn/critical | 라이브 Gateway probe 실패 | gateway 도달성/auth | no |
discovery.mdns_full_mode | warn/critical | mDNS full 모드는 로컬 네트워크에 cliPath/sshPort 메타데이터를 광고함 | discovery.mdns.mode, gateway.bind | no |
config.insecure_or_dangerous_flags | warn | 안전하지 않거나 위험한 디버그 플래그가 활성화됨 | 여러 키 (finding 상세 참조) | no |
config.secrets.gateway_password_in_config | warn | Gateway 비밀번호가 config에 직접 저장됨 | gateway.auth.password | no |
config.secrets.hooks_token_in_config | warn | 훅 bearer 토큰이 config에 직접 저장됨 | hooks.token | no |
hooks.token_reuse_gateway_token | critical | 훅 ingress 토큰이 Gateway auth도 해제함 | hooks.token, gateway.auth.token | no |
hooks.token_too_short | warn | 훅 ingress에 대한 무차별 대입이 더 쉬움 | hooks.token | no |
hooks.default_session_key_unset | warn | 훅 에이전트 실행이 생성된 요청별 세션으로 팬아웃됨 | hooks.defaultSessionKey | no |
hooks.allowed_agent_ids_unrestricted | warn/critical | 인증된 훅 호출자가 구성된 모든 에이전트로 라우팅할 수 있음 | hooks.allowedAgentIds | no |
hooks.request_session_key_enabled | warn/critical | 외부 호출자가 sessionKey를 선택할 수 있음 | hooks.allowRequestSessionKey | no |
hooks.request_session_key_prefixes_missing | warn/critical | 외부 세션 키 모양에 제한이 없음 | hooks.allowedSessionKeyPrefixes | no |
hooks.path_root | critical | 훅 경로가 /라서 ingress가 충돌하거나 잘못 라우팅되기 쉬움 | hooks.path | no |
hooks.installs_unpinned_npm_specs | warn | 훅 설치 레코드가 불변 npm spec에 고정되지 않음 | 훅 설치 메타데이터 | no |
hooks.installs_missing_integrity | warn | 훅 설치 레코드에 무결성 메타데이터가 없음 | 훅 설치 메타데이터 | no |
hooks.installs_version_drift | warn | 훅 설치 레코드가 설치된 패키지와 드리프트됨 | 훅 설치 메타데이터 | no |
logging.redact_off | warn | 민감한 값이 로그/상태로 유출됨 | logging.redactSensitive | yes |
browser.control_invalid_config | warn | 런타임 전에 브라우저 컨트롤 config가 유효하지 않음 | browser.* | no |
browser.control_no_auth | critical | 토큰/비밀번호 auth 없이 브라우저 컨트롤이 노출됨 | gateway.auth.* | no |
browser.remote_cdp_http | warn | 일반 HTTP를 통한 원격 CDP는 전송 암호화가 없음 | 브라우저 프로필 cdpUrl | no |
browser.remote_cdp_private_host | warn | 원격 CDP가 프라이빗/내부 호스트를 대상으로 함 | 브라우저 프로필 cdpUrl, browser.ssrfPolicy.* | no |
sandbox.docker_config_mode_off | warn | Sandbox Docker config가 존재하지만 비활성 상태 | agents.*.sandbox.mode | no |
sandbox.bind_mount_non_absolute | warn | 상대 bind mount는 예측할 수 없게 해결될 수 있음 | agents.*.sandbox.docker.binds[] | no |
sandbox.dangerous_bind_mount | critical | Sandbox bind mount가 차단된 시스템, 자격 증명 또는 Docker 소켓 경로를 대상으로 함 | agents.*.sandbox.docker.binds[] | no |
sandbox.dangerous_network_mode | critical | Sandbox Docker 네트워크가 host 또는 container:* 네임스페이스 조인 모드를 사용함 | agents.*.sandbox.docker.network | no |
sandbox.dangerous_seccomp_profile | critical | Sandbox seccomp 프로필이 컨테이너 격리를 약화시킴 | agents.*.sandbox.docker.securityOpt | no |
sandbox.dangerous_apparmor_profile | critical | Sandbox AppArmor 프로필이 컨테이너 격리를 약화시킴 | agents.*.sandbox.docker.securityOpt | no |
sandbox.browser_cdp_bridge_unrestricted | warn | Sandbox 브라우저 브리지가 소스 범위 제한 없이 노출됨 | sandbox.browser.cdpSourceRange | no |
sandbox.browser_container.non_loopback_publish | critical | 기존 브라우저 컨테이너가 비 루프백 인터페이스에서 CDP를 게시함 | 브라우저 sandbox 컨테이너 publish 구성 | no |
sandbox.browser_container.hash_label_missing | warn | 기존 브라우저 컨테이너가 현재 config-hash 레이블보다 오래됨 | openclaw sandbox recreate --browser --all | no |
sandbox.browser_container.hash_epoch_stale | warn | 기존 브라우저 컨테이너가 현재 브라우저 config epoch보다 오래됨 | openclaw sandbox recreate --browser --all | no |
tools.exec.host_sandbox_no_sandbox_defaults | warn | sandbox가 꺼져 있을 때 exec host=sandbox가 차단됨 | tools.exec.host, agents.defaults.sandbox.mode | no |
tools.exec.host_sandbox_no_sandbox_agents | warn | sandbox가 꺼져 있을 때 에이전트별 exec host=sandbox가 차단됨 | agents.list[].tools.exec.host, agents.list[].sandbox.mode | no |
tools.exec.security_full_configured | warn/critical | 호스트 exec가 security="full"로 실행 중 | tools.exec.security, agents.list[].tools.exec.security | no |
tools.exec.auto_allow_skills_enabled | warn | Exec 승인이 skill bin을 암묵적으로 신뢰함 | ~/.openclaw/exec-approvals.json | no |
tools.exec.allowlist_interpreter_without_strict_inline_eval | warn | Interpreter 허용 목록이 강제 재승인 없이 인라인 eval을 허용함 | tools.exec.strictInlineEval, agents.list[].tools.exec.strictInlineEval, exec 승인 허용 목록 | no |
tools.exec.safe_bins_interpreter_unprofiled | warn | safeBins의 interpreter/런타임 bin에 명시적 프로필이 없어 exec 위험을 확대함 | tools.exec.safeBins, tools.exec.safeBinProfiles, agents.list[].tools.exec.* | no |
tools.exec.safe_bins_broad_behavior | warn | safeBins의 broad-behavior 도구가 저위험 stdin 필터 신뢰 모델을 약화시킴 | tools.exec.safeBins, agents.list[].tools.exec.safeBins | no |
tools.exec.safe_bin_trusted_dirs_risky | warn | safeBinTrustedDirs에 변경 가능하거나 위험한 디렉터리가 포함됨 | tools.exec.safeBinTrustedDirs, agents.list[].tools.exec.safeBinTrustedDirs | no |
skills.workspace.symlink_escape | warn | workspace skills/**/SKILL.md가 workspace 루트 밖으로 해결됨 (심볼릭 링크 체인 드리프트) | workspace skills/** 파일시스템 상태 | no |
plugins.extensions_no_allowlist | warn | 명시적인 플러그인 허용 목록 없이 플러그인이 설치됨 | plugins.allowlist | no |
plugins.installs_unpinned_npm_specs | warn | 플러그인 설치 레코드가 불변 npm spec에 고정되지 않음 | 플러그인 설치 메타데이터 | no |
plugins.installs_missing_integrity | warn | 플러그인 설치 레코드에 무결성 메타데이터가 없음 | 플러그인 설치 메타데이터 | no |
plugins.installs_version_drift | warn | 플러그인 설치 레코드가 설치된 패키지와 드리프트됨 | 플러그인 설치 메타데이터 | no |
plugins.code_safety | warn/critical | 플러그인 코드 스캔에서 의심스럽거나 위험한 패턴이 발견됨 | 플러그인 코드 / 설치 소스 | no |
plugins.code_safety.entry_path | warn | 플러그인 entry 경로가 숨겨진 위치 또는 node_modules 위치를 가리킴 | 플러그인 manifest entry | no |
plugins.code_safety.entry_escape | critical | 플러그인 entry가 플러그인 디렉터리를 벗어남 | 플러그인 manifest entry | no |
plugins.code_safety.scan_failed | warn | 플러그인 코드 스캔이 완료되지 못함 | 플러그인 경로 / 스캔 환경 | no |
skills.code_safety | warn/critical | Skill 설치 관리자 메타데이터/코드에 의심스럽거나 위험한 패턴이 포함됨 | skill 설치 소스 | no |
skills.code_safety.scan_failed | warn | Skill 코드 스캔이 완료되지 못함 | skill 스캔 환경 | no |
security.exposure.open_channels_with_exec | warn/critical | 공유/공개 방이 exec이 활성화된 에이전트에 도달할 수 있음 | channels.*.dmPolicy, channels.*.groupPolicy, tools.exec.*, agents.list[].tools.exec.* | no |
security.exposure.open_groups_with_elevated | critical | 오픈 그룹 + 상승된 도구가 높은 영향의 prompt-injection 경로를 만듦 | channels.*.groupPolicy, tools.elevated.* | no |
security.exposure.open_groups_with_runtime_or_fs | critical/warn | 오픈 그룹이 sandbox/workspace 가드 없이 명령/파일 도구에 도달할 수 있음 | channels.*.groupPolicy, tools.profile/deny, tools.fs.workspaceOnly, agents.*.sandbox.mode | no |
security.trust_model.multi_user_heuristic | warn | gateway 신뢰 모델이 personal-assistant인데 config가 멀티유저처럼 보임 | trust 경계 분리, 또는 shared-user 하드닝 (sandbox.mode, 도구 deny/workspace 스코핑`) | no |
tools.profile_minimal_overridden | warn | 에이전트 재정의가 전역 minimal 프로필을 우회함 | agents.list[].tools.profile | no |
plugins.tools_reachable_permissive_policy | warn | 확장 도구가 허용적인 컨텍스트에서 도달 가능 | tools.profile + 도구 allow/deny | no |
models.legacy | warn | 레거시 모델 패밀리가 여전히 구성됨 | 모델 선택 | no |
models.weak_tier | warn | 구성된 모델이 현재 권장 tier보다 낮음 | 모델 선택 | no |
models.small_params | critical/info | 작은 모델 + 안전하지 않은 도구 표면이 injection 위험을 높임 | 모델 선택 + sandbox/도구 정책 | no |
summary.attack_surface | info | auth, 채널, 도구, 노출 태세에 대한 롤업 요약 | 여러 키 (finding 상세 참조) | no |