패스잇
보안 · 심화

JWT 서명 검증 시 발생할 수 있는 alg 헤더 관련 취약점들(alg:none 허용, RS256으로 발급한 토큰을 HS256으로 검증하면서 공개키를 비밀키로 악용하는 key confusion 공격)을 설명하고, 검증 로직을 어떻게 안전하게 구현해야 하는지 설명해주세요.

힌트 · 토큰의 alg 헤더를 신뢰하지 않고 서버가 기대하는 알고리즘을 강제하는 검증 설계 관점에서 접근하세요.

alg:noneKey ConfusionRS256HS256공개키/비밀키

모범답안

JWT 서명 검증 시 alg 헤더 관련 취약점은 크게 두 가지입니다.

첫째, alg:none 허용 취약점입니다. 이는 서명 없이 토큰을 발급하도록 허용하여, 공격자가 토큰의 페이로드를 조작하고 서명 없이도 유효한 토큰처럼 사용할 수 있게 합니다.

둘째, Key Confusion 공격입니다. RS256으로 발급된 토큰을 HS256으로 검증할 때 발생하며, 공격자는 RS256의 공개키를 HS256의 비밀키로 사용하여 토큰을 위조할 수 있습니다.

이러한 취약점을 방지하기 위해 검증 로직은 토큰의 alg 헤더를 신뢰하지 않고, 서버가 기대하는 특정 알고리즘(예: RS256)만을 강제해야 합니다. 즉, 토큰의 alg 값이 서버에서 설정한 허용 알고리즘 목록에 없으면 즉시 거부해야 합니다. 또한, RS256 검증 시에는 반드시 공개키를 사용하고, HS256 검증 시에는 반드시 비밀키를 사용하도록 명확히 구분하여 구현해야 합니다.

읽었다면, 이제 직접 답해볼 차례예요

패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.

함께 보는 웹 보안 면접 질문

← 웹 보안 면접 질문 전체 보기