Why Always Me!

2. JWT None Algorithm Attack 본문

취약점 CASE/Web

2. JWT None Algorithm Attack

Racil U 2024. 4. 9. 15:29

1. 개요

JWT는 헤더에 알고리즘을 정의합니다. 헤더에 정의한 알고리즘으로 JWT의 헤더와 페이로드를 해싱한 후, 시그니처에 담습니다. JWT는 페이로드에 데이터가 담겨있고 base64로 디코딩을 하면 확인할 수 있어 쉽게 변조할 수 있을 것 같지만, 서버 단에서 시그니처 검증을 하기 때문에 쉽게 변조할 수 없습니다.

일부 서비스에선 헤더 알고리즘을 None으로 바꿔 서버에 요청을 보내게 되면 서버 측에서는 시그니처 검증을 하지 않고 변조된 페이로드를 원 데이터로 인식하게 됩니다. 이를 JWT None Algorithm Attack이라고 합니다.

 

JWT 라이브러리 내 None alg 정의 확인 (https://github.com/jwtk/jjwt/blob/master/api/src/main/java/io/jsonwebtoken/SignatureAlgorithm.java)

 

2. 진단 사례

1) 서비스 A는 JWT 만료 시간을 30분으로 설정하고 있음.

2) 만료 시간이 초과됐을 시, 만료 후 30분까지 새 JWT를 발급함.

3) 이 때 JWT 알고리즘 검증이 미흡하여 None Algorithm Attack이 발생함.

 

JWT None Algorithm Attack
발급된 JWT 디코딩 시 변조된 데이터 확인

 

'취약점 CASE > Web' 카테고리의 다른 글

5. XST (Cross Site Tracing)  (0) 2025.03.01
4. Padding Oracle Attack  (0) 2025.03.01
3. Zip Slip  (0) 2024.05.02
1. XSS / 공백 필터링 우회  (1) 2024.02.29
WEB/API  (0) 2024.02.28