
# fast-jwt 알고리즘 혼동 PoC fast-jwt 라이브러리의 JWT 알고리즘 혼동을 시연하는 개념 증명입니다. 취약한 서버, 토큰 위조 스크립트, 그리고 보안 교육을 위한 검증 수정 사항을 포함합니다.
이 저장소는 토큰 검증 시 허용 알고리즘을 고정하지 않을 때 fast-jwt에서 발생하는 JWT 알고리즘 혼동을 시연합니다.
프로젝트 루트에서 다음을 실행하세요:
npm install
앱은 다음 파일을 필요로 합니다:
keys/private.pemkeys/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
node server.js
예상 출력:
Server running at http://localhost:3000
curl http://localhost:3000/generateToken
node sign.js
출력된 토큰을 복사하세요.
node checkAdmin.js <JWT_TOKEN>
공격이 성공하면 응답에 Welcome Admin!이 포함됩니다.
server.js에서 검증기가 알고리즘을 제한하지 않습니다:
const verifySync = createVerifier({
key: publicKey,
});
알고리즘 허용 목록이 없으면 서버는 공개 키를 HMAC 비밀로 사용하여 서명된 악의적인 HS256 토큰을 수락할 수 있습니다.
그룹의 CVE 데모에서 취약한 대상은 라이브러리입니다 (단독으로 실행할 수 없습니다). 따라서 실제 시스템이 해당 라이브러리의 API를 호출하는 방식을 모의하기 위해 모의 애플리케이션이 필요합니다. 이 저장소에서 server.js 파일이 모의 애플리케이션 계층입니다.
보조 PoC 코드 흐름:
요약하자면, 그룹은 라이브러리의 함수를 다시 작성하지 않았습니다. 취약한 라이브러리의 원래 API(createSigner, createVerifier)를 모의 앱 안에서 사용하여 공격 시나리오를 정확히 재현했습니다.
검증을 RS256으로 제한하세요:
const verifySync = createVerifier({
key: publicKey,
algorithms: ["RS256"],
});
이 프로젝트는 통제된 실험실 환경에서의 보안 학습 전용입니다.