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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/open-flaw/cve-2026-21717
Vulnerability AnalysisExploitationLearning & Education
GitHubopen-flaw/cve-2026-21717

CVE-2026-21717

CVE-2026-21717에 대한 개념 증명(PoC)으로, Node.js V8 문자열 해싱 충돌 취약점으로 인해 조작된 JSON 페이로드를 통해 서비스 거부(DoS)가 발생합니다.

저장소 보기
4개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-21717

Node.js V8 문자열 해싱 예측 가능한 충돌 취약점으로 인한 서비스 거부(DoS)

개요

V8의 문자열 해싱 메커니즘의 심각한 취약점으로 인해 공격자가 Node.js 애플리케이션에서 심각한 성능 저하를 유발할 수 있습니다. 정수 형태의 문자열은 숫자 값으로 해싱되어 해시 충돌을 쉽게 예측할 수 있습니다. V8 내부 문자열 테이블에서 많은 충돌을 유발하는 악의적인 입력을 구성함으로써, 공격자는 성능을 크게 저하시키거나 서비스 거부를 유발할 수 있습니다.

취약점 세부 정보

  • CVE ID: CVE-2026-21717
  • 심각도: 높음(High)
  • 공격 경로: 네트워크(Network)
  • 공격 복잡도: 낮음(Low)
  • 영향: 서비스 거부(DoS)

기술적 설명

이 취약점은 V8의 문자열 내부화(internalization) 프로세스에서 비롯됩니다. JSON 파싱이 발생하면 짧은 문자열이 자동으로 해시 테이블에 내부화됩니다. 정수 형태의 문자열은 숫자 값으로 해싱되어 예측 가능한 충돌을 일으키며, 공격자가 심각한 성능 저하를 유발하는 이차(quadratic) 프로빙 체인을 강제할 수 있습니다.

영향을 받는 구성 요소

가장 일반적인 트리거는 공격자가 제어하는 입력에 대해 JSON.parse()를 호출하는 모든 엔드포인트입니다. JSON 파싱은 짧은 문자열을 영향을 받는 해시 테이블에 자동으로 내부화하기 때문입니다.

개념 증명(PoC)

이 저장소에는 취약점을 입증하는 개념 증명이 포함되어 있습니다:

사전 요구 사항

root@kitploit:~
# CVE-2026-21717의 영향을 받는 Node.js 버전 사용
nvm use
npm install

PoC 실행

root@kitploit:~
node poc.js

예상 동작

PoC는 다음을 포함하는 페이로드를 생성합니다:

  • 약 13만 개의 문자열로 구성된 이차 프로빙 체인
  • 체인을 통한 조회를 강제하는 반복된 대상 값
  • 단일 JSON.parse() 작업에 대해 약 44초 이상의 CPU 시간 소요

공격 흐름

  1. 공격자는 충돌을 유발하도록 설계된 정수 형태의 문자열을 포함한 적대적 JSON 페이로드를 구성합니다
  2. 클라이언트는 악성 JSON을 서버로 전송합니다
  3. 서버는 신뢰할 수 없는 입력에 대해 JSON.parse()를 호출합니다
  4. V8 엔진은 문자열을 해시 테이블에 내부화하여 충돌을 유발합니다
  5. 결과 극심한 CPU 소비 및 성능 저하

완화 방안

권장 조치

  1. Node.js 업데이트: 이 취약점을 해결하는 패치 버전으로 업데이트
  2. 입력 검증: JSON 페이로드의 크기와 복잡성 제한
  3. 속도 제한(Rate Limiting): JSON 입력을 수락하는 엔드포인트에 속도 제한 구현
  4. 타임아웃: JSON 파싱 작업에 합리적인 타임아웃 설정
  5. 리소스 모니터링: 비정상적인 CPU 사용량 급증 모니터링

코드 수준 완화 방안

root@kitploit:~
// 페이로드 크기 제한
app.use(express.json({ limit: '100kb' }));

// 파싱 타임아웃 추가
const parseWithTimeout = (str, timeout = 1000) => {
  return Promise.race([
    Promise.resolve(JSON.parse(str)),
    new Promise((_, reject) => 
      setTimeout(() => reject(new Error('Parse timeout')), timeout)
    )
  ]);
};

참고 자료

  • CVE 세부 정보
  • Node.js 보안 블로그

면책 조항

이 저장소는 교육 및 연구 목적으로만 제공됩니다. 악의적인 목적으로 이 코드를 사용하거나 소유하지 않았거나 명시적 테스트 권한이 없는 시스템에 대해 사용하지 마십시오.

도구 다운로드