JWT(JSON Web Token) 취약점 악용(2) - Brute Force, jwk/jku/kid injection

2025. 2. 10. 16:57·보안/웹·모바일

주제

JWT(JSON Web Token) 취약점 악용(2) - Brute Force, jwk/jku/kid injection
JWT 개념에 대한 내용은 아래 포스팅에서 확인 가능합니다.

https://so106037.tistory.com/421

 

JWT(JSON Web Token) 개념

주제JWT 개념내용1. JWT 개념JWT(JSON Web Token)는 웹 애플리케이션에서 클라이언트와 서버 간에 정보를 안전하게 전송하기 위해 사용되는 토큰 기반의 인증 메커니즘입니다. 일반적으로 인증, 세션

so106037.tistory.com

내용

1. HS256 취약한 비밀 키

JWT HS256 알고리즘은 비밀 키를 사용하여 검증 및 서명을 진행합니다. 공격자는 토큰의 signature를 검증하기 위해 다양한 키 값을 대입하여 올바른 비밀 키를 찾아내는 공격을 시도할 수 있습니다.

거의 비슷한 방법으로 진행되나, 다양한 툴을 사용하여 진행해보겠습니다.

1. Dictionary Attack :: JTR/jwt-hack
2. Brute Force :: c-jwt-cracker

 

1.1. Dictionary Attack :: JTR/jwt-hack

Step 1) 유효한 토큰 획득

- wiener 계정으로 /admin 경로에 접근 불가능

- 헤더: {"kid":"2d1ac68e-18f4-4af9-.......","alg":"HS256"}

 

Step 2) JTR 툴을 사용하여 JWT 크래킹, 이후 획득한 비밀 키 값을 사용하여 유효한 토큰 생성

- 혹은 jwt-hack으로 비밀키 획득 가능

JTR
jwt-hack

 

Step 3) 생성한 administrator 토큰을 사용하여 /admin 경로에 HTTP 요청

- 토큰이 유효하다고 판단되어, Admin Panel 확인 가능

 

1.2. Brute Force :: c-jwt-cracker

Step 1) 유효한 토큰 획득

Step 2) c-jwt-cracker 툴을 사용하여 JWT 크래킹, 이후 획득한 비밀 키 값을 사용하여 유효한 토큰 생성 가능

 

 

2. JWT header parameter injections

일반적으로 JWT의 헤더에는 `alg` 만 필수적이지만, 실제로는 여러 파라미터들이 포함될 수 있습니다. 

 

1. jwk (JSON Web Key)

{
    "alg": "RS256",
    "jwk": {
        "kty": "RSA",  //Key Type
        "kid": "key-1",  //Key ID
        "n": "공개키-모듈러스-값", // 모듈러스 값
        "e": "AQAB" // 지수 값 
    }
}

- 키를 나타내는 JSON 객체가 직접 내장되어 있음

- JWK 유효성 미검증 시, 공격자가 자신의 키를 주입하여 서명에 사용할 수 있음

 

2. jku (JSON Web Key Set URL)

{
    "alg": "RS256",
    "jku": "https://example.com/.well-known/jwks.json",
    "kid": "key-1"
}
// https://example.com/.well-known/jwks.json 응답 예시. JWK Set을 나타냄
{
    "keys": [
        {
            "kty": "RSA",
            "kid": "key-1",
            "use": "sig",  //키의 용도
            "n": "공개키-모듈러스-값 1",
            "e": "AQAB"
        },
        {
            "kty": "RSA",
            "kid": "key-2",
            "use": "sig",
            "n": "공개키-모듈러스-값 2",
            "e": "AQAB"
        }
    ]
}

- 서버가 올바른 키를 가져올 수 있는 URL을 제공
- JKU 유효성 미검증 시, 공격자가 자신이 통제하는 URL로 변경하여 키를 조작할 위험이 있음

 

3. kid (Key ID)

{
    "alg": "RS256",
    "kid": "key-2023-12"
}

- 여러 개의 키 중에서 서버가 올바른 키를 식별하는데 사용하는 ID

- 키의 형식에 따라 일치하는 kid 매개변수가 있을 수 있음

- 공격자가 이 값을 조작하여 다른 키를 참조하게 만들 수 있음

 

2.1. jwk Injection

Step 1) Burp Suite 확장 앱 JWT Editor 으로 RSA 키 생성

 

Step 2) 일반 사용자 계정(’wiener’)으로 로그인 후, /admin 경로에 접근하여 응답 값 확인

 

Step 3) HTTP Request의 `JSON Web Token` 탭

- 페이로드 변조(wiener → administrator)

- [Attack] → [Embedded JWK]에서 생성한 RSA 키 선택
- 헤더에 jwk 키-값이 추가됨을 확인

 

Step 3) HTTP 요청 시 administrator 토큰이 유효하다고 판단되어 Admin Panel 접근 가능함을 확인

 

2.2. jku Injection

Step 1) Burp Suite 확장 앱 `JWT Editor` 으로 RSA 키 생성

Step 2) 일반 사용자 계정(’wiener’)으로 로그인 후, /admin 경로에 접근하여 응답 값 확인

 

Step 3) exploit 서버의 /exploit 응답 값을 JWK Set 형식으로 변경
- JWK Set 작성 시, Burp Suite의 `JWT Editor` 에서 생성한 키 참고

 

Step 4) HTTP Request의 `JSON Web Token` 탭
- 헤더의 kid를 JWK Set에 있는 kid 값으로 변경
- jku 키-값 추가
- 페이로드 변경(wiener → administrator)

 

Step 5) HTTP Reuqest 의 JSON Web Token 탭 하단의 [Sign] 버튼 클릭

 

Step 6) HTTP 요청 시 administrator 토큰이 유효하다고 판단되어 Admin Panel 접근 가능함을 확인

 

2.3. kid Injection

Step 1) Burp Suite 확장 앱 `JWT Editor` 으로 비대칭 키 생성

- 실제 키 값을 의미하는 “k”에 null 값 입력(base64)

 

Step 2) 일반 사용자 계정(’wiener’)으로 로그인 후, /admin 경로에 접근하여 응답 값 확인

 

Step 3) HTTP Request의 `JSON Web Token` 탭

- JWT 토큰 페이로드 변경(wiener → administrator)

- 헤더의 kid 키 값 ../../../../../../dev/null 입력, 이후 [Sign] 버튼 클릭

 

Step 4) HTTP 요청 시 administrator 토큰이 유효하다고 판단되어 Admin Panel 접근 가능함을 확인

레퍼런스

- Claude ai (링크)

- Pentesterlab: JWT Ⅵ (링크)

- PortSwigger: JWT(링크)

 

저작자표시 (새창열림)

'보안 > 웹·모바일' 카테고리의 다른 글

CVE-2020-1938: Tomcat-AJP 프로토콜 취약점  (0) 2025.03.07
JWT(JSON Web Token) 취약점 악용 (1) - None Algorithm, Algorithm Confusion  (0) 2025.01.18
JWT(JSON Web Token) 개념  (0) 2025.01.05
CVE-2024-4577:PHP-CGI 원격 코드 실행  (0) 2024.12.23
Burp Suite로 패킷이 잘 안잡힘 해결  (0) 2024.02.16
'보안/웹·모바일' 카테고리의 다른 글
  • CVE-2020-1938: Tomcat-AJP 프로토콜 취약점
  • JWT(JSON Web Token) 취약점 악용 (1) - None Algorithm, Algorithm Confusion
  • JWT(JSON Web Token) 개념
  • CVE-2024-4577:PHP-CGI 원격 코드 실행
병뚜
병뚜
열정!
  • 병뚜
    열려라 뚜껑
    병뚜
  • 전체
    오늘
    어제
    • all (372)
      • 일상X사랑X돈 (0)
        • 보안이슈 (114)
        • 뜨거운감자 (9)
        • 맛집 (2)
        • 혼잣말 (16)
      • 보안 (87)
        • 웹·모바일 (46)
        • 인프라 (19)
        • 리버싱 (8)
        • Security-Gym (10)
        • 리뷰 (4)
      • 프로그래밍 (66)
        • python (14)
        • java (12)
        • js (40)
      • System (47)
        • OS (14)
        • 침투 (33)
      • Play (20)
        • wargame (20)
      • 기타 (10)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이썬초보
    랜섬웨어
    혼자공부하는파이썬
    windows internals
    드림핵리버싱
    파이썬공부
    정보보호
    it이슈
    혼공학습단
    윈도우인터널스
    IT뉴스
    혼공단
    jwt
    파이썬입문
    공급망공격
    정보보안
    커널디버깅
    악성코드
    뉴스요약
    보안이슈
    리버싱초보
    프로세스
    혼공
    리버싱
    정보보안교육
    자바스크립트 상속
    혼공파
    kisa
    보안뉴스
    파이썬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
병뚜
JWT(JSON Web Token) 취약점 악용(2) - Brute Force, jwk/jku/kid injection
상단으로

티스토리툴바