JWT 'none' 알고리즘 사용
Use of 'none' Algorithm in JWT
설명
JWT 토큰에서 'none' 알고리즘을 사용할 경우, 토큰의 무결성이 검증되지 않습니다. 즉, 공격자가 서명 없이 위조된 JWT 토큰을 만들어도 서버에서 정상 토큰으로 신뢰할 수 있습니다. 이 취약점은 인증 우회 또는 세션 탈취로 악용될 수 있습니다.
잠재적 영향
인증 우회 (인증 우회): 공격자가 토큰을 손쉽게 위조하여 인증을 통과할 수 있습니다.
민감정보 노출 (Sensitive Data Exposure): 보호되어야 할 사용자 데이터와 세션 정보가 노출될 수 있습니다.
해결 방법
반드시 안전한 알고리즘(예: 'HS256', 'RS256' 등)만 사용합니다.
'none' 알고리즘이 설정으로라도 사용되지 않도록 구현합니다.
인증/인가에 JWT 사용 시, 토큰의 서명이 항상 검증되도록 합니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
const jose = require("jose");
const { JWK, JWT } = jose;
// 취약: 'none' 알고리즘을 사용함
const token = JWT.verify('token-here', JWK.None);안전한 코드
설명:
취약한 코드: 이 코드는 'none' 알고리즘을 사용하여 JWT 서명 검증을 완전히 생략합니다. 공격자는 자신의 정보로 토큰을 만들고 서버에서 정상 사용자로 오인할 수 있습니다.
안전한 코드: 'HS256'과 같은 강력한 알고리즘을 명확하게 지정하고 서명을 검증함으로써, 위조된 토큰이 거부되어 인증 우회가 불가능합니다.
참조
Last updated