공격자 영향
부적절한 JWT 검증을 통해 공격자는 클레임을 위조하거나 만료된 토큰 [S1]를 재사용하여 인증 메커니즘을 우회할 수 있습니다. 서버가 유효한 서명 없이 토큰을 수락하는 경우 공격자는 페이로드를 수정하여 권한을 에스컬레이션하거나 사용자 [S1]를 가장할 수 있습니다. 또한 만료(exp) 클레임을 적용하지 않으면 공격자가 손상된 토큰 [S1]을 무기한 사용할 수 있습니다.
근본 원인
JSON 웹 토큰(JWT)은 디지털 서명 또는 무결성 보호 [S1]를 나타내는 데 사용되는 JSON 기반 구조입니다. 보안 실패는 일반적으로 두 가지 주요 구현 격차로 인해 발생합니다.
- 보안되지 않은 JWT 허용: 서비스가 서명 확인을 엄격하게 시행하지 않는 경우 서명이 없고 알고리즘이 "없음" [S1]로 설정된 "보안되지 않은 JWT"를 처리할 수 있습니다. 이 시나리오에서 서버는 무결성 [S1]를 확인하지 않고 페이로드의 클레임을 신뢰합니다.
- 청구 유효성 검사 누락:
exp(만료 시간) 청구는 JWT가 [S1] 처리를 위해 허용되지 않아야 하는 시간 또는 그 이후를 식별합니다.aud(대상) 클레임은 [S1] 토큰의 의도된 수신자를 식별합니다. 이러한 항목을 선택하지 않으면 서버는 만료되었거나 다른 애플리케이션 [S1]용으로 의도된 토큰을 허용할 수 있습니다.
구체적인 수정
- 암호화 서명 시행: 사전 승인된 강력한 서명 알고리즘(예: RS256)을 사용하지 않는 JWT를 거부하도록 애플리케이션을 구성합니다.
- 만료 유효성 검사: 현재 날짜와 시간이
exp클레임 [S1]에 지정된 시간 이전인지 확인하는 필수 검사를 구현합니다. - 대상 확인:
aud클레임에 로컬 서비스를 식별하는 값이 포함되어 있는지 확인하세요.aud클레임에서 서비스가 식별되지 않으면 토큰은 [S1]를 거부해야 합니다. - 재생 방지:
jti(JWT ID) 클레임을 사용하여 각 토큰에 고유 식별자를 할당하면 서버가 재사용된 토큰 [S1]를 추적하고 거부할 수 있습니다.
탐지 전략
JWT 처리의 취약점은 토큰 구조와 서버 응답 동작을 분석하여 식별할 수 있습니다.
- 헤더 검사:
alg(알고리즘) 헤더를 검사하여 "none"으로 설정되어 있지 않고 예상되는 암호화 표준 [S1]를 사용하는지 확인합니다. - 클레임 확인: JSON 페이로드 [S1] 내에서
exp(만료) 및aud(대상) 클레임의 존재 및 유효성을 확인합니다. - 유효성 검사 테스트:
exp클레임에 따라 만료되었거나aud클레임 [S1]에 정의된 대로 다른 대상을 대상으로 하는 토큰을 서버가 올바르게 거부하는지 테스트합니다.
