본문 바로가기
Portswigger/JWT

Portswigger - JWT authentication bypass via jku header injection solution

by jh117jh 2025. 4. 1.
728x90

 

이번 문제는 JKU 헤더 삽입으로 인한 JWT 우회 문제이다.

 

JKU란?

JWT(Json Web Token)에서 사용되는 헤더 파라미터 중 하나로, "JWK Set URL"의 약자이며 JWT의 서명을 검증할 때 사용할 공개 키 집합(JWK Set)이 위치한 URL을 명시하는 데 사용된다.

서버는 이 URL에 접근해 JWK Set(JSON Web Key Set)을 받아오고, 그중에서 JWT의 kid(Key ID)와 일치하는 공개 키를 사용해 서명을 검증한다.

 

이때 JKU에 대한 검증이 없어 공격자가 임의의 JKU 값을 넣고, 자신이 제어하는 URL을 지정한다면, 서버가 이 URL에서 키를 받아 검증하게 되어 보안 취약점이 발생할 수 있다.

 

먼저 Burp suite의 JWT Editor를 이용하여 RSA 키를 생성해준다.

 

그다음, 해당 키의 공개키를 exploit 서버에 저장해 준다.

 

이제 wiener 계정에 로그인하여 해당 JWT를 확인해 보면 

 

페이로드의 sub 파라미터 안에 wiener를 확인할 수 있다.

 

 

이제 해당 sub 파라미터를 administrator로 바꾸고 헤더에 jku 파라미터를 추가해 exploit 서버 주소를 넣어 우리가 생성했던 공개키를 사용하게 하고 kid 파라미터를 해당 공개키의 kid로 바꿔준 후, 해당 키로 사인해 준다.

 

이제 해당 JWT값을 session 쿠키값에 넣어 administrator 계정으로 접속해 보면 

 

관리자 페이지에 접근할 수 있고

 

 

carlos 계정을 삭제하면 문제가 풀린다.

728x90