[단독방어] 분석 — CVE-2026-9773
CVE-2026-9773 allows authenticated users of Unraid < 7.3.0 to execute arbitrary commands via the unvalidated
ToggleState.phpparameter, and the top‑priority action is to block all requests to/ToggleState.phpat the web server immediately.
📋 요약
- 심각도 high · CVSS 8.8 · EPSS 0.01128 · 악용난이도 hard
🔍 공격 기법
인증된 사용자가 /ToggleState.php에 state(또는 유사) 파라미터로 쉘 메타문자(;, &&, ` 등)를 포함한 문자열을 전송하면, PHP 내부에서 exec()‑계열 함수가 그대로 호출되어 www‑data 권한으로 명령이 실행된다. 인증만 요구되므로 내부 사용자 계정이 있으면 네트워크를 통해 직접 이용 가능하고, 별도 인터랙션 없이 자동화 스크립트로 악용할 수 있다.
악용 가능성: AV:N(네트워크)·AC:L(낮은 난이도)·PR:L(저권한 필요)·UI:N(사용자 개입 없음)의 CVSS 벡터는, 공격자는 인증된 저권한 계정만 확보하면 별도의 클릭이나 피싱 없이 원격에서 바로 요청을 전송해 악용할 수 있음을 의미합니다. EPSS 0.01128은 지난 12개월 동안 실제로 이 취약점이 활용될 확률이 약 1 % 수준이며, KEV에 등재되지 않은 점은 현재까지 대규모 공격 관측 사례가 없다는 실증적 근거가 됩니다. 그러나 인증만으로도 시스템 호출 문자열을 조작할 수 있으므로, 성공 시 www‑data 권한의 원격 코드 실행(RCE)이 즉시 이루어집니다. 취약이 노출되는 엔드포인트는 Unraid 웹 UI의 ToggleState.php이며, HTTP(S) GET/POST 파라미터(예: state)가 그대로 시스템 명령에 전달됩니다. 따라서 공격 표면은 외부 네트워크에서 접근 가능한 웹 서버 포트(80·443)와 인증된 세션 쿠키 혹은 기본 인증 헤더가 있는 모든 클라이언트로 제한됩니다. 요약하면, 저권한 계정 탈취만으로도 높은 성공 확률(L)을 갖는 원격 공격이 가능하나, 현재 관측된 악용 빈도가 낮아 hard 등급과 일치하는 “실제 위협성은 낮지만 잠재 위험은 큰” 상황이라 할 수 있습니다.
💥 영향 분석
- www‑data 사용자 쉘 확보 → 파일 읽·쓰기, 설정 변경, 플러그인/컨테이너 명령 실행
- Unraid 관리 UI를 통한 볼륨 메타데이터 및 저장 데이터 조작 가능
- 추가 권한 상승(예: sudo 오용)이나 내부 네트워크 탐색으로 확장될 위험 존재
🔗 관련 취약점·체이닝
- CWE‑78 (OS Command Injection)과 동일 코드베이스에서 발생하는 입력 검증 부재(CWE‑20)와 결합하면 다른 엔드포인트에서도 RCE가 파생될 수 있다.
- www‑data 권한으로 실행되는 플러그인(예: Docker 관리)과 연계 시 컨테이너 탈출까지 이어질 가능성이 있다.
🔎 탐지
로그 지표
- nginx/access.log –
request_uri와args필드- 정규식 패턴:
(?i)/ToggleState\.php\?.*(;|&&|)`
- 정규식 패턴:
- php-fpm/error.log –
message필드- 패턴:
exec\([^)]*\).*failed to execute command(시스템 호출 실패 로그)
- 패턴:
- unraid/auth.log –
user,action필드- 패턴:
User .* logged in from .* and accessed /ToggleState.php
- 패턴:
SIEM 쿼리 예시 (Splunk)
1index=web sourcetype=nginx_access uri="/ToggleState.php" 2| regex args="(?i)(;|&&|`)" 3| table _time clientip uri args userElastic/Kibana DSL 예시
1{ 2 "bool": { 3 "must": [ 4 { "match_phrase": { "request.uri": "/ToggleState.php" } }, 5 { "regexp": { "url.query": "(?i)(;|&&|`)" } } 6 ] 7 } 8}오탐 튜닝
- 정상 관리 자동화 스크립트가
;를 사용한다면user!="admin"혹은source.ip!=<신뢰IP>조건을 추가해 제외한다. - 대부분의 정상 UI 호출에서는 메타문자가 포함되지 않으므로 기본 규칙의 FP는 낮음.
🛡️ 완화 방안
즉시(긴급 차단) – 웹 서버 레벨에서 /ToggleState.php에 대한 모든 GET/POST 요청을 403으로 차단한다.
- 구현: Nginx
location = /ToggleState.php { deny all; }추가 후 reload. - 난이도: ★★ (간단한 설정 파일 수정)
- 운영 영향: 서비스 재시작(수초) 필요, 해당 엔드포인트 사용 기능 전면 차단.
- 검증:
curl -I http://<host>/ToggleState.php→ 403 응답 확인.
단기(완화)
-
UI 접근 제한 – VPN 또는 IP‑ACL 로 관리 UI 접속을 제한하고, 관리자 계정에 강력 비밀번호와 2FA 적용.
- 난이도: ★★★ (네트워크/인증 정책 변경)
- 운영 영향: 내부 사용자 로그인 절차가 복잡해짐.
- 검증: 승인된 IP에서만
/페이지 접근 가능 확인.
-
PHP 함수 비활성화 –
php.ini의disable_functions에exec,passthru,shell_exec,system,proc_open추가 후 php‑fpm 재시작.- 난이도: ★★★ (설정 수정 + 서비스 재시작)
- 운영 영향: 일부 플러그인·스크립트 기능 제한 가능.
- 검증:
php -r "echo ini_get('disable_functions');"로 비활성 함수 목록 확인 및/ToggleState.php호출 시 500 오류 발생 여부 확인.
근본(해결) – Unraid 7.3.0 이상으로 업그레이드하거나 공식 패치를 적용한다. 최신 버전에서는 ToggleState.php에 입력을 escapeshellarg() 로 이스케이프하여 명령 삽입 경로가 차단된다.
- 난이도: ★★★★★ (전체 시스템 재부팅 및 플러그인 호환성 점검)
- 운영 영향: 서비스 중단 필요, 플러그인 버전 검증 요구.
- 검증:
/etc/unraid-version에7.3.0이상 표기 확인, 수정된 파일 해시(sha256sum /usr/local/emhttp/Togglestate.php)와 공식 배포본 비교.
잔여 리스크 – 위 즉시 차단과 PHP 함수 비활성화로 ToggleState.php 경로는 사라지지만, 인증된 사용자가 다른 미패치 엔드포인트를 이용할 가능성이 남아 있다. 따라서 전체 시스템 로그 모니터링을 지속하고, 정기적인 취약점 스캔으로 추가 RCE 경로를 탐색해야 한다.
인시던트 대응 플레이북
auth.log·access.log에서/ToggleState.php호출 기록과 비정상 사용자·IP 조합 확인.- 메타문자 패턴이 포함된 요청을 발견하면 해당 IP 즉시 방화벽 차단 및 웹 서버 차단 규칙 적용.
www-data프로세스의 현재 명령줄(ps -u www-data)과 최근 파일 변경(auditd또는inotifywait) 조사.- 의심되는 파일·프로세스가 확인되면 백업에서 복구하고, 패치를 적용한 뒤 시스템 재검증.
다중 소스 교차검증 결과(신뢰도 1.0)와 EPSS 0.01128(실제 악용 가능성은 낮지만 고위험 CVSS 8.8)으로 이번 주 내에 위 조치를 순차적으로 시행하는 것이 권고된다.
⚖️ 위험도 / 우선순위
- 조치: scheduled (이번 주 내)
- 근거: CVSS=8.8 · non-KEV · EPSS=0.01128 · exploit=hard · in_scope=None