- 이 글은 아직 현업을 경험하지 못한 보안 공부생의 정리 글이니, 정확하지 않을 수도 있습니다.-
JWT란?
json 형식으로 이루어진 웹 토큰이라고 쉽게 생각하면 된다. jwt는 header, payload, signature세 부분으로 나뉜다.
보통 signature 부분은 해당 jwt 알고리즘에 따른 key를 이용해 생성되기 때문에 변조 불가능하고,
header, payload 부분을 변조한다.

보통 header 부분에는
alg : 해당 jwt 생성 시 사용한 알고리즘
typ : 토큰 타입, 보통 JWT 로 지정
cty : 페이로드의 타입
kid : 키의 id
jwk : 서명에 사용된 공개키를 직접 포함
jku : 공개키가 위치한 url
x5u, x5c : 공개키 인증서 위치한 url, 혹은 직접 포함
이렇게 올 수 있다.
header 부분을 조작해서 인증 우회를 하는건, 서버의 코드 설계 자체에서 오는 결함이 대부분일듯 하다.
내가 아는 한도는
1. key 검증에서 문제가 발생해 임의로 만든 jwt 토큰으로 검증 우회 (alg 이 none으로 설정되어 있는 경우가 대표적)
2. kid 를 이용한 directory traversal (리눅스에서 /dev/null 경로를 많이 사용한다고 함)
3. algorithm confusion. 보통 서버는 비대칭을 원하는데, 공격자가 대칭키로 조작했을 때 발생
https://portswigger.net/web-security/jwt/algorithm-confusion
Web Application Security, Testing, & Scanning - PortSwigger
PortSwigger offers tools for web application security, testing, & scanning. Choose from a range of security tools, & identify the very latest vulnerabilities.
portswigger.net
4. jwk 와 jku를 서버가 사용할 경우, 이들을 임의로 인젝션해서 서버가 jwt를 신뢰하도록
등이 있는데, 그 밖에도
5. cty 를 이용해 Content-type을 바꿔 XXE나 역직렬화 공격
6. x5c를 통해 인증서 주입 및 우회 (CVE-2017-2800, CVE-2018-2633)
가 있다고 한다.
payload는 서버에서 지정한 양식대로 가는데, 만약 header 조작으로 우회를 성공했다면?
"admin":true 이런 식으로 센스껏 조작해서 시도해보면 되겠다.
대부분의 인증 우회가 그렇듯, JWT를 이용한 인증도 우회가 되는 이유는 설계 상의 문제인 듯 하다.
서명 검증을 빡세게 하거나, jku 를 화이트리스트로 필터링하고, kid 파라미터를 필터링한다던가 여러 방법으로 완화할 수 있겠다.
'Study' 카테고리의 다른 글
| XS_leak (0) | 2025.12.02 |
|---|---|
| Web cache deception (0) | 2025.07.19 |
| pugjs 취약점 (0) | 2025.06.26 |
| Unicode case mapping collision (0) | 2025.06.26 |
| Prototype Pollution (0) | 2025.06.25 |