Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-65945-poc — CVE-2025-65945에 대한 PoC (node-jws의 암호화 서명의 부적절한 검증) | Kitploit
도구/GitHubGitHub/jedisct1/cve-2025-65945-poc
Vulnerability AnalysisExploitationWeb Application ExploitationCryptographyPenetration TestingAuthentication
GitHubjedisct1/cve-2025-65945-poc

CVE-2025-65945-poc

CVE-2025-65945에 대한 PoC (node-jws의 암호화 서명의 부적절한 검증)

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-65945: node-jws 서명 우회

이 문서는 node-jws 라이브러리의 서명 검증 우회에 대한 개념 증명(PoC)입니다. 이 버그로 인해 서버가 사용자 제어 데이터에서 HMAC 시크릿을 파생할 때 공격자가 유효한 JWT를 위조할 수 있습니다.

이 버그는 무엇인가요?

jws.createVerify() 함수는 HMAC 알고리즘을 사용할 때 시크릿이 실제로 제공되었는지 검증하지 않습니다. 앱이 JWT의 특정 값(예: kid 헤더)을 기반으로 시크릿을 조회하고 해당 조회가 실패하면, 빈 시크릿으로 검증하게 될 수 있습니다.

공격자는 다음과 같이 이 버그를 악용할 수 있습니다:

  1. 데이터베이스에 존재하지 않는 가짜 키 ID가 포함된 JWT 전송
  2. 빈 문자열을 시크릿으로 사용해 악성 페이로드 서명
  3. 서버의 조회가 undefined를 반환하고, 이는 빈 문자열로 강제 변환됨
  4. 양쪽 모두 "시크릿"(빈 문자열)에 동의하게 되므로 서명이 검증됨

이제 공격자는 누구든 사칭하거나 자신에게 관리자 권한을 부여할 수 있습니다.

영향을 받는 버전

  • jws 3.2.2 및 이전 버전
  • jws 4.0.0

이 문제를 해결하려면 3.2.3+ 또는 4.0.1+로 업그레이드하세요.

PoC 실행

Bun이 설치되어 있는지 확인한 후 다음을 실행하세요:

# Install the vulnerable version
bun install [email protected]

# Run the exploit
bun run exploit.js

위조된 관리자 토큰이 유효한 것으로 승인되는 출력이 표시될 것입니다.

익스플로잇은 무엇을 하나요?

PoC는 다음을 수행하는 서버를 시뮬레이션합니다:

  • 몇 개의 API 키가 있는 시크릿 저장소 보유
  • JWT의 kid(키 ID) 헤더를 기반으로 시크릿 조회
  • 스트리밍 API와 함께 createVerify() 사용

공격자는 kid: "non-existent-key"가 포함된 JWT를 생성하고 빈 시크릿으로 서명합니다. 서버가 이 키를 조회하려고 하면 undefined를 얻고 검증 스트림에 빈 문자열을 쓰게 되며, 위조된 토큰이 검증을 통과합니다.

수정 사항 테스트

# Upgrade to patched version
bun install [email protected]

# Run again - should fail now
bun run exploit.js

패치된 버전에서는 secret must be a string or buffer or a KeyObject 오류가 표시됩니다. 이 수정 사항은 HMAC 작업을 진행하기 전에 적절한 시크릿이 있는지 검증합니다.

취약한 코드 패턴

코드가 다음과 유사하다면 영향을 받을 수 있습니다:

const decoded = jws.decode(token);
const secret = lookupSecret(decoded.header.kid); // might return undefined!

const verifier = jws.createVerify({
  algorithm: "HS256",
  signature: token,
});

verifier.secret.write(secret); // oops
verifier.secret.end();

참고 자료

  • GitHub Advisory
  • Fix commit
도구 다운로드