JWT 서명 검증 비활성화

JWT Signature Verification Disabled

설명

JWT를 디코딩할 때 서명 검증을 비활성화하면 공격자가 임의로 만든 토큰도 애플리케이션이 신뢰할 수 있습니다. PyJWT의 jwt.decode(..., options={"verify_signature": False}) 같은 설정은 인증 우회나 권한 상승으로 이어질 수 있습니다.

잠재적 영향

  • 공격자가 임의의 사용자 ID, 역할, 권한 클레임을 포함한 토큰을 만들 수 있습니다.
  • 만료, audience, issuer 검증도 함께 우회될 가능성이 커집니다.
  • 인증 경계가 토큰 내용 조작만으로 무너질 수 있습니다.

해결 방법

  • 운영 코드에서 verify_signature=False를 사용하지 않습니다.
  • jwt.decode() 호출에 검증 키와 허용 알고리즘을 명시합니다.
  • exp, iss, aud 같은 핵심 클레임도 함께 검증합니다.
  • 테스트 전용 디코딩 로직은 운영 경로와 분리합니다.

예시

변경 전

python
import jwt

def bad_decode(token):
    return jwt.decode(token, options={"verify_signature": False})

변경 후

python
import jwt

def safe_decode(token, key):
    return jwt.decode(token, key, algorithms=["HS256"], audience="api")

설명:

  • 변경 전: 토큰 서명을 검증하지 않습니다.
  • 변경 후: 키, 알고리즘, audience를 명시해 토큰 무결성과 대상 서비스를 검증합니다.

참조