JWT 토큰 위조 (JWT Token Forgery)

정보보안학
한 줄 정의: 사용자 인증에 널리 쓰이는 JWT(JSON Web Token)를 서명 검증의 허점을 이용해 조작하거나 임의로 만들어 인증을 우회하는 공격입니다.

쉽게 풀면

JWT는 로그인한 사용자에게 서버가 발급해주는 일종의 신분증과 비슷합니다. 이 신분증에는 사용자 정보와 함께, 위조되지 않았음을 보증하는 서명이 붙어 있습니다. JWT 토큰 위조는 이 신분증의 내용을 몰래 바꾸거나, 서명 검증 과정의 허점을 이용해 가짜 신분증을 진짜처럼 통과시키는 공격입니다. 예를 들어 신분증에 적힌 이름을 관리자로 바꿔치기해서, 서버가 이를 눈치채지 못하고 관리자 권한을 그대로 내주는 상황이 생길 수 있습니다.

왜 중요한가

JWT는 세션을 서버에 따로 저장하지 않아도 되는 편리함 때문에 현대 웹과 API 인증에서 널리 쓰이고 있는데, 서명 검증 로직에 결함이 있으면 인증 시스템 전체가 무력화될 수 있습니다. 이 때문에 웹 애플리케이션 보안 분야에서는 JWT 구현 취약점과 이를 악용하는 위조 기법이 지속적으로 연구되고 있습니다.

논문에서는 이렇게 쓰입니다

"서버가 alg 헤더 값을 none으로 설정한 토큰도 그대로 신뢰하는 구현 결함을 이용해 서명 없이도 인증을 우회할 수 있었다."

토큰에 서명 알고리즘이 없다고 표시된 경우까지도 서버가 검증 없이 받아들이는 허점을 이용한 공격 사례를 설명하고 있습니다.

"비대칭키 기반 서명 알고리즘을 대칭키 알고리즘으로 오인하게 만드는 알고리즘 혼동 공격을 통해 위조된 관리자 토큰을 생성하였다."

서버가 사용해야 할 검증 방식과 다른 방식으로 서명을 처리하도록 속여서, 공격자가 원하는 내용을 담은 토큰을 만들어낸 사례입니다.

조금 더 깊게 보면

대표적인 JWT 위조 기법으로는 서명 알고리즘을 "없음(none)"으로 지정해 검증 자체를 생략시키는 방식, 비대칭키 서명(RS256 등)을 대칭키 서명(HS256)으로 오인하게 만드는 알고리즘 혼동 공격, 그리고 서명 키 자체가 추측하기 쉬운 값으로 설정된 경우 이를 무작위 대입으로 알아내는 방식 등이 있습니다. 이런 공격들은 대부분 서명 알고리즘 자체의 결함이 아니라 서버 측 구현이 알고리즘 지정 값을 제대로 검증하지 않는 데서 비롯됩니다.

주의할 점

JWT 위조는 암호 알고리즘 자체가 취약해서라기보다 검증 로직의 구현 실수에서 비롯되는 경우가 대부분이므로, 서명 알고리즘을 서버 측에서 명시적으로 고정하고 클라이언트가 지정한 값을 그대로 신뢰하지 않는 것이 중요합니다.

관련 용어