주제
JWT 취약점 악용 (1) - None Algorithm, Algorithm Confusion
JWT 개념에 대한 내용은 아래 포스팅에서 확인 가능합니다.
https://so106037.tistory.com/421
내용
1. None Algorithm
JWT의 none 알고리즘은 JSON Web Token에서 사용 가능한 서명 알고리즘 중 하나로, 서명이 없는 JWT를 나타냅니다.
{
"alg": "none",
"typ": "JWT"
}
# 서명 부분이 생략된 JWT
<Base64URL-encoded Header>.<Base64URL-encoded Payload>.
JWT 라이브러리가 잘못 구현되어, 서명 검증이 필요한 상황에서도 none 알고리즘을 허용하는 경우 악용이 가능합니다.
가정: 서버가 none 알고리즘을 허용
익스플로잇:
Step 1) JWT 토큰 확인
Step 2) 공격자가 JWT 생성 → 토큰 유효
- 헤더의 alg 값을 none 으로 설정
- 서명 부분을 빈 문자열로 설정
2. Algorithm confusion (RSA/HMAC)
서명 검증방식은 보통 아래와 같이 이루어집니다.
verify(string token, string verificationKey)
#JWT의 alg 헤더 값과 입력받은 verificationKey를 바탕으로 서명을 검증
여기서 verificationKey 는 서명 방식을 기준으로 달라질 수 있습니다
- HMAC 서명 방식: 비밀 키(secret signing key)가 들어감
- RSA 서명 방식: 공개 키(public key)가 들어감
정리하면,
- HMAC
- 대칭 키 알고리즘
- 하나의 비밀 키를 사용하여 서명과 검증을 수행
- 검증 시 verify(clientToken, serverHMACSecretKey) 의 형태로 서버에서 비밀 키를 사용
- RSA
- 비대칭 키 알고리즘
- 개인 키로 서명하고, 공개 키로 검증
- 검증 시 verify(clientToken, serverRSAPublicKey) 형태로 서버에서 공개 키를 사용
서버가 RSA 서명방식을 사용하도록 설계되었음에도 불구하고 HMAC 서명을 허용하는 경우 악용이 가능합니다.
가정:
a. 서버가 클라이언트의 alg 헤더 값을 신뢰
b. 서버가 키의 적합성을 미검증
c. 공격자가 RSA 공개 키 획득
익스플로잇:
Step 1) JWT 토큰 확인 (guest 계정)
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJsb2dpbiI6Imd1ZXN0In0.AyCmqz4soB6rKuRUBsXWA4WwX0LBxM-uPGJIJ1L-X_ERrIVN5tBBmrK2JAe3tkH2XQTv4o1XTi6Q6p7ogl0DSlbiS8Ej56KsqZYgWRXjSZ0XKgdZtpTMH_a0o43J6SjKtkRJ_N42iJ6-ANiy6ff9ix_qq3D_UjZUods1VoDTCavIG-zRinavo7eryVkUHWLdYKGfwpGLyLekMbpukhKAxnlecagQ5YzmC_QiQGVuJj5ucZlIoqE8cyRjsA3hC4D_XgHYulxoniCiT-LY5EUMtDgGXAxDou9_GXASsuGorjra_HP1wk4fqKmt9YNkDAr20yiBXI_S98-6sloskz6dkw
# header {"typ":"JWT","alg":"RS256"}
# payload {"login":"guest"}
Step 2) RSA 공개 키를 HMAC 서명 키로 사용하여 토큰 생성
- “alg”: “RS256” → “HS256”
Step 3) 생성된 토큰을 서버에 전송 → guest 계정 토큰 유효
- 서버의 RSA 공개 키를 HMAC 비밀 키로서 사용한 것으로 받아들였기 때문
Step 4) JWT 페이로드 변경 후 토큰 생성 → admin 계정 토큰 유효
레퍼런스
- Auth0: Critical vulnerabilities in JSON Web Token libraries (링크)
- Pentesterlab: JWT Algorithm Confusion (링크)
- PortSwigger: Algorithm confusion attacks (링크)
'보안 > 웹·모바일' 카테고리의 다른 글
JWT(JSON Web Token) 개념 (0) | 2025.01.05 |
---|---|
CVE-2024-4577:PHP-CGI 원격 코드 실행 (0) | 2024.12.23 |
Burp Suite로 패킷이 잘 안잡힘 해결 (0) | 2024.02.16 |
[IOS] Fairplay DRM 복호화 툴 frida-ios-dump (Windows) (0) | 2023.11.09 |
[IOS] "Alpine" 패스워드가 작동하지 않는 경우 (0) | 2023.11.06 |