HAgent의 Arduino 및 ESP32 MCP 도구에서 보고된 CVE-2026-117573 취약점은 특정 파라미터에 셸 메타문자를 주입해 서버 내에서 임의의 OS 명령을 실행할 수 있는 보안 결함입니다.
CVE-2026-117573 취약점 개요 및 영향 범위
CVE-2026-117573은 HAgent MCP 도구 세트 내에서 발견된 OS 명령 삽입(OS Command Injection) 취약점입니다. 이 취약점은 특히 임베디드 기기 연동에 쓰이는 특정 도구들에서 발생합니다. 영향 범위는 commit 761eec6까지의 hagent 버전으로 지정되어 있습니다.
구체적으로 취약점이 발생하는 대상 도구는 다음과 같습니다:
- hagent_arduino
- hagent_esp32
MCP 클라이언트가 위 도구들의 args 파라미터에 셸 메타문자를 담아 요청을 보내면 서버 측에서 이를 적절히 필터링하지 않고 실행해 공격자가 의도한 셸 명령이 시스템 상에서 동작합니다.
기술적 분석: args 파라미터와 shell=True의 위험성
이 취약점의 기술적 핵심은 사용자의 입력값이 시스템 명령어로 전달되는 과정에서 발생하는 전형적인 CWE-78(OS Command Injection) 결함에 있습니다.
취약점 발생 메커니즘
GitHub 보안 이슈 #98에 따르면 해당 취약점은 사용자가 제공한 args 파라미터 값이 셸 명령 문자열에 그대로 삽입되는 구조에서 비롯됩니다. 문제는 이렇게 생성된 문자열이 파이썬의 subprocess 모듈로 실행될 때 shell=True 옵션이 설정되어 있다는 점입니다.
다음과 같은 함수 호출에서 위험이 발생합니다:
subprocess.run(..., shell=True)subprocess.Popen(..., shell=True)
shell=True 옵션이 활성화되면 시스템 셸(shell)이 입력된 문자열을 해석합니다. 이때 args에 ;, &, |, ` 같은 셸 메타문자가 포함되어 있으면 원래 의도했던 명령어 외에 추가적인 악의적 명령어가 연달아 실행됩니다.
심각도 분석 및 출처별 견해 차이
CVE-2026-117573의 심각도를 산정하는 기준을 두고 공식 레코드와 커뮤니티(GitHub 이슈) 간에 견해 차이가 있습니다. 이는 공격 벡터(Attack Vector)와 공격자 권한에 대한 전제가 서로 다르기 때문입니다.
| 구분 | CVSS 버전 및 수치 | 공격 벡터 및 권한 (Vector String) | 전제 조건 |
|---|---|---|---|
| 공식 CVE 레코드 | CVSS 3.1 7.8 / CVSS 4.0 8.5 | AV:L/PR:L (CVSS 3.1) / LOCAL, PR:LOW (CVSS 4.0) | 로컬 접근 및 저권한 사용자 전제 |
| GitHub 보안 이슈 #98 | CVSS 3.1 9.8 | AV:N/PR:N | 네트워크 원격 접근 및 권한 불요 전제 |
공식 레코드는 로컬 환경에서의 접근과 낮은 수준의 권한을 가진 사용자를 전제로 심각도를 산정했습니다. 반면, GitHub 보안 이슈 #98에서는 네트워크를 통한 원격 접근이 가능하고 별도의 권한이 필요 없는 상황을 가정해 훨씬 높은 수치인 9.8(Critical)을 제시했습니다.
서버 운영자는 자신의 HAgent MCP 서버가 외부에 공개되어 있는지, 아니면 내부 네트워크에서만 제한적으로 접근 가능한지에 따라 실제 위험도를 개별적으로 판단해야 합니다.
위험성 경고 및 주의사항
이 취약점은 hagent through commit 761eec6 범위 내의 대상에서 발생하며, 사용자가 제공한 args 파라미터가 검증 없이 셸 명령 문자열에 삽입된 후 shell=True 설정으로 실행되는 구조적 결함입니다.
개발자와 시스템 관리자는 특히 Arduino나 ESP32 같은 임베디드 기기 제어를 위해 서버를 운영 중인 경우, 외부 클라이언트로부터 전달되는 모든 파라미터가 신뢰할 수 없는 데이터일 수 있음을 인지하고 보안 설정을 재점검할 필요가 있습니다.