🇰🇷 한글 설명
OpenHuman 데스크톱 에이전트 0.54.0 이하 버전의 SecurityPolicy에서 쉘 도구 명령 화이트리스트를 우회하여 임의의 OS 명령을 실행할 수 있는 취약점이 발견되었습니다. find 명령의 특정 플래그(-execdir, -okdir)와 환경 변수 할당 방식의 결합을 통해 샌드박스 경계를 넘어 원격 코드 실행(RCE)이 가능합니다.
💡 쉬운 설명
보안 프로그램이 허용된 명령어만 실행하도록 감시하고 있지만, 공격자가 교묘하게 명령어를 숨겨서 실행할 수 있는 허점이 있습니다. 이를 통해 악성 문서나 이메일을 읽는 것만으로도 해커가 사용자의 컴퓨터를 마음대로 조종할 수 있습니다.
🇺🇸 원문 (English)
The shell tool command allowlist in the SecurityPolicy of OpenHuman desktop agent through 0.54.0 (default Supervised security policy) can be bypassed to execute arbitrary OS commands with the privileges of the desktop user. Two flaws in src/openhuman/security/policy.rs combine: (1) is_args_safe() blocks the find flags -exec and -ok but not the functionally identical -execdir and -okdir, which also execute an arbitrary command for each matched file; and (2) skip_env_assignments() strips leading inline KEY=value environment-variable assignments before allowlist validation, so a command such as GIT_EXTERNAL_DIFF=<cmd> git diff is validated as the allowed git diff but, when executed via the shell, runs <cmd> through git's environment-driven hooks (for example GIT_EXTERNAL_DIFF or GIT_SSH_COMMAND). Because the sandbox is the primary trust boundary between untrusted LLM-processed content and the host operating system, an attacker can achieve remote code execution via indirect prompt injection: a malicious document, email, calendar event, or web page ingested by the agent instructs it to run a benign-looking allowlisted command, resulting in arbitrary command execution, data exfiltration, arbitrary file read/write, and lateral movement on the user's machine. The issue was fixed in commit 60050aa09a870f53ed7e4cd40ed41fd2860329e7 (first released in 0.54.22-staging; first stable release 0.56.0), which blocks -execdir/-okdir for find.
📍 영향받는 시스템
OpenHuman desktop agent 0.54.0 이하 버전
⚔️ 공격 벡터
간접 프롬프트 인젝션(Indirect Prompt Injection)을 통한 화이트리스트 우회 및 임의 명령 실행
🛡️ 대응 방법
OpenHuman 데스크톱 에이전트를 최신 안정 버전인 0.56.0 이상으로 업데이트하십시오.
🔧 검증 코드
출력된 버전이 0.54.0에서 0.55.x 사이라면 취약한 버전이므로 즉시 업데이트가 필요합니다.
openhuman --version 2>/dev/null | grep -E '0\.(5[4-5]|6)\.'