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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2023-48223 — # fast-jwt 알고리즘 혼동 PoC fast-jwt 라이브러리의 JWT 알고리즘 혼동을 시연하는 개념 증명입니다. 취약한 서버, 토큰 위조 스크립트, 그리고 보안 교육을 위한 검증 수정 사항을 포함합니다. | Kitploit
도구/GitHubGitHub/lucastran05/cve-2023-48223
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationLabs & Practice
GitHublucastran05/cve-2023-48223

CVE-2023-48223

# fast-jwt 알고리즘 혼동 PoC fast-jwt 라이브러리의 JWT 알고리즘 혼동을 시연하는 개념 증명입니다. 취약한 서버, 토큰 위조 스크립트, 그리고 보안 교육을 위한 검증 수정 사항을 포함합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2023-48223 PoC (fast-jwt 알고리즘 혼동)

이 저장소는 토큰 검증 시 허용 알고리즘을 고정하지 않을 때 fast-jwt에서 발생하는 JWT 알고리즘 혼동을 시연합니다.

환경 설정

요구 사항

  • Node.js 18 이상
  • npm
  • OpenSSL (터미널 PATH에 있어야 함)

1) 의존성 설치

프로젝트 루트에서 다음을 실행하세요:

npm install

2) RSA 키 생성

앱은 다음 파일을 필요로 합니다:

  • keys/private.pem
  • keys/public.pem

다음 명령어 세트 중 하나를 실행하세요.

PowerShell (Windows):

New-Item -ItemType Directory -Path keys -Force | Out-Null
openssl genrsa -out keys/private.pem 2048
openssl rsa -in keys/private.pem -RSAPublicKey_out -out keys/public.pem

Linux/macOS/Git Bash:

mkdir -p keys
openssl genrsa -out keys/private.pem 2048
openssl rsa -in keys/private.pem -RSAPublicKey_out -out keys/public.pem

3) 서버 시작

node server.js

예상 출력:

Server running at http://localhost:3000

빠른 실행 (PoC 흐름)

1) 일반 토큰 받기

curl http://localhost:3000/generateToken

2) 관리자 토큰 위조

node sign.js

출력된 토큰을 복사하세요.

3) 위조된 토큰으로 관리자 엔드포인트 호출

node checkAdmin.js <JWT_TOKEN>

공격이 성공하면 응답에 Welcome Admin!이 포함됩니다.

취약한 이유

server.js에서 검증기가 알고리즘을 제한하지 않습니다:

const verifySync = createVerifier({
  key: publicKey,
});

알고리즘 허용 목록이 없으면 서버는 공개 키를 HMAC 비밀로 사용하여 서명된 악의적인 HS256 토큰을 수락할 수 있습니다.

취약한 라이브러리 모의 방법 설명 (보고서에 포함용)

그룹의 CVE 데모에서 취약한 대상은 라이브러리입니다 (단독으로 실행할 수 없습니다). 따라서 실제 시스템이 해당 라이브러리의 API를 호출하는 방식을 모의하기 위해 모의 애플리케이션이 필요합니다. 이 저장소에서 server.js 파일이 모의 애플리케이션 계층입니다.

  • /generateToken 엔드포인트: 이 라우트는 fast-jwt의 createSigner를 RS256으로 호출하여 일반 사용자(admin=false)를 위한 유효한 토큰을 생성합니다. 목적은 위조된 토큰과 비교할 "정상적인" 기준 토큰을 만드는 것입니다.
  • /admin 엔드포인트: 이 라우트는 Bearer 토큰을 받은 다음 fast-jwt의 createVerifier를 호출하여 토큰을 검증하고 payload.admin에 따라 admin 권한을 결정합니다. 의도적으로 취약한 지점은 검증기가 algorithms를 고정하지 않아 알고리즘 혼동이 발생하는 것입니다.

보조 PoC 코드 흐름:

  • sign.js: 공격자가 HS256으로 createSigner를 호출하고 공개 키를 secret으로 사용하여 위조 토큰(admin=true)을 서명하는 것을 모의합니다.
  • checkAdmin.js: 위조된 토큰으로 /admin에 요청을 보내 취약한 구성에서 서버가 위조 토큰을 수락함을 증명합니다.

요약하자면, 그룹은 라이브러리의 함수를 다시 작성하지 않았습니다. 취약한 라이브러리의 원래 API(createSigner, createVerifier)를 모의 앱 안에서 사용하여 공격 시나리오를 정확히 재현했습니다.

수정

검증을 RS256으로 제한하세요:

const verifySync = createVerifier({
  key: publicKey,
  algorithms: ["RS256"],
});

안전 유의 사항

이 프로젝트는 통제된 실험실 환경에서의 보안 학습 전용입니다.

도구 다운로드