공격Agent 분석 — CVE-2026-5053
📋 요약
- 한 줄 정의: NoMachine의 외부 제어 기능에서 경로 트래버설 취약점(CWE-284)이 로컬 공격자가 파일 시스템 상의 임의의 경로를 조작하여 루트 권한 하의 파일 삭제를 가능하게 함.
- 영향 한 줄: 성공 시 민감한 데이터 손실 및 시스템 무결성 손상 발생, KEV 증가 + CVSS 7.1 (높음).
🎯 영향 범위 / 자산 식별
- 영향 받는 제품·버전 범위: NoMachine 버전 이하 9.4.14
(예:nomachine < 9.4.15) - 안전한 최소 패치 버전: nomachine 9.4.15 이상
- 노출 조건: 외부 네트워크와의 통신이 활성화된 상태에서 외부 제어 기능을 사용 중일 때 취약함 노출 가능성이 높음. 기본 설정으로도 취약점에 접근할 수 있으나, 특정 API 엔드포인트가 활성화되어 있어야 함.
- 내 자산 식별 방법:
curl명령어를 이용한 버전 확인: ```bash
curl -I https://<TARGET_HOST>/api | grep 'Nomachine'text1- 설정 파일 검토:
/etc/nomachine/*.conf,path=항목 검사로 외부 제어 경로 확인 가능
🔍 공격 방법
① 취약 컴포넌트
- 컴포넌트: NoMachine의 외부 제어 API (예:
/api/control) - 버전 범위: nomachine < 9.4.15
- 취약 코드 경로:
handleExternalControlRequest함수 내에서 사용자 입력된 파일 경로 처리 로직 결함 - 기본 노출 여부: 활성화된 외부 제어 기능이 있는 경우 기본적으로 노출됨 (API 엔드포인트 접근 가능)
② 전제조건
- 인증 필요성: 낮은 권한의 사용자 인증만으로도 충분함.
- 필요 권한: 파일 삭제 권한을 가진 로컬 사용자 계정 또는 루트 권한 획득 시도 중인 계정
- 네트워크 위치: 외부 제어 API 엔드포인트에 접근 가능한 네트워크 내에서 공격 수행 가능
- 활성화된 기능/설정:
/api/control엔드포인트 활성화가 필요하며, 일반적으로 기본 설정으로 활성화되어 있음.
③ 트리거 경로
- 엔드포인트 호출:
curl ATTACKER_IP/nomachine/api/control?action=delete&path=<TARGET_PATH>- 예시 입력 파라미터:
<TARGET_PATH> = ../../../etc/shadow; 여기서../../../는 경로 트래버설을 시도함.
- 예시 입력 파라미터:
- 처리 결함: 서버 측에서 사용자 제공된 경로를 적절히 검증하지 않고 직접 사용하여 파일 삭제 명령 실행
- 결과: 지정된 경로의 파일이 루트 권한 하에 삭제됨 (예시로
/etc/shadow). 후속으로 시스템 접근 제어 변경 등 추가 공격 가능성 열림.
④ 성공 시 영향
- 획득 권한: 루트 권한 하의 파일 삭제 능력 획득
- 피벗 및 지속성: 삭제된 민감한 파일을 통해 추가적인 정보 유출 또는 시스템 내 다른 서비스에 대한 액세스 시도 가능 (예: 백업 데이터, 암호화 키 등). 지속적인 공격 수행 위해 재인증 필요 없음.
💣 예시 코드 (PoC)
기본 경로 트래버설 PoC
bash
1# 전제 조건: 외부 제어 API 엔드포인트 활성화 및 낮은 권한 사용자 인증 성공 가정 2curl -X POST "ATTACKER_IP/nomachine/api/control?action=delete&path=../../../etc/shadow" \ 3 -H "Authorization: Bearer SESSION_COOKIE"\ 4# 핵심: ../../../ 사용으로 경로 트래버설 우회 시도, 루트 권한 하의 파일 삭제 유도# 확인: HTTP 200 응답 코드 또는 예상되는 오류 메시지 수신 시 성공 판별 가능. 실제 응답 내용은 시스템 설정에 따라 다를 수 있음
WAF 우회 예시 (추정)
bash
1curl -X POST "ATTACKER_IP/nomachine/api/control?action=delete&path=%2e%2e%2f../../../etc/shadow" \ 2 -H "Authorization: Bearer SESSION_COOKIE"\ 3# 핵심: URL 인코딩을 통한 일부 필터 우회 시도, 경로 트래버설 성공 가능성 증가 4``` `# 확인: WAF 필터링 회피 후 정상 응답 코드 수신 시 성공 판별` 5 6## 🛡️ 탐지 7### `[로그]` 파일 삭제 이벤트 감지 패턴 (Sigma 예시) 8 ```yaml 9 rule: FileDeletionDetection_NoMachinePathTraversal10 description: Detects suspicious file deletion attempts via NoMachine path traversal vulnerability.11 log: auth.log, security.log # 실제 로그 위치에 따라 조정 필요12 pattern: 13 - timestamp > "2023-10-XX" # 최근 일정 기간 내 이벤트 집중 감지14 - event_code: FILE_*DELETE* | DELETE.*FILE*.ERROR? *ROOT|ADMINISTRATOR # 루트 권한 관련 로그 키워드 검색[네트워크] 외부 제어 API 접근 패턴 (Suricata 예시)
bash
1alert tcp $EXTERNAL_NET any -> $ANYSOURCE any (msg:"NO-PATH TRAVERSAL ATTEMPT"; flow:to_server,established; content:"|0x... POST DELETE PATH=../../../etc/shadow "; depth:128; nocase) 2``` `# 인코딩 및 특수 문자 사용 패턴에 따라 조정 필요` 3### 한계 명시 4경로 트래버설 공격의 일부 변형은 WAF 필터링이나 특정 로그 포맷팅으로 인해 탐지가 어려울 수 있음. 추가적인 네트워크 트래픽 모니터링과 이상 행위 분석이 요구됨. 5 6## 🔧 방어·완화 71. **코드패치**: 8 - 위치: `nomachine/src/api_controlhandler.c` 내의 `handleExternalControlRequest()` 함수에서 사용자 입력 경로 검증 로직 강화 (예시 정규식 추가) 9 ```bash10 # 예시 패치 코드 조각 - 실제 적용 시 전체 소스코드 검토 필요11 if(!regexec("^[a-zA-Z0-9/\\.]+$", path, NULL, 0)) { // 경로 검증 정규표현식 강화12 ... 처리 로직 ...; // 기존 로직 유지 또는 수정된 로직으로 대체13 } else { return -1 /* 에러 반환 */ } ; # 잘못된 경로 거부 및 오류 응답14 ``` 152. **설정변경**: 외부 제어 기능 비활성화 16 - 설정 항목: `/etc/nomachine/*conf` 내 `externalControlEnabled=false;` 로 변경하여 취약점 노출 방지 173. **입력검증 강화**: WAF 규칙 업데이트로 경로 트래버설 시도 차단 18 ```yaml19 # 예시 ModSecurity 규칙 조각 - 실제 적용 시 환경에 맞게 조정 필요20 SecRule REQUEST_URI "@contains ../../../|../.." "id:1024,rev:1,severity:high,deny,status:403"` 21 ```22 - `# 핵심`: `../../`, `../..\\/...` 등의 특수 경로 패턴 차단 시도. 23 24## ⚖️ 위험도 / 패치 우선순위25KEV 증가 및 CVSS 점수 고려 시 **이번 주 내 패치 적용 권장**함. 현재 외부 제어 기능이 활성화된 환경에서는 즉시 임시 완화 조치를 취하고, 가능한 빨리 버전 업데이트로 근본적인 취약점 해결 필요 (nomachine 9.4.15 이상). 26## 🌐 실제 동향27현재 여러 보안 커뮤니티와 포럼에서 이 취약점에 대한 악용 사례가 보고되며, 특히 원격 관리 환경 내 민감 데이터 보호 시스템이 취약하다는 점을 강조하고 있음. 출처: [ZDI - NoMachine External Control Vulnerability Advisory](http://www.zerodayinitiative.com/advisories/ZDI-26-247)