JWT 서명 검증 누락

Improper Verification of JWT Signature

설명

JWT 토큰을 사용할 때 서명(signature)을 검증하지 않고 decode만 하면, 악의적인 사용자가 위조한 JWT를 서버가 정상 토큰으로 인식하고 허용할 수 있습니다. 검증을 생략하면 토큰의 무결성과 진위 여부를 확인할 수 없어 인증 우회나 권한 상승 등의 공격에 취약해집니다.

잠재적 영향

  • 인증 우회 (인증 우회): 공격자가 임의의 JWT를 생성해 인증 절차를 우회할 수 있습니다.

  • 권한 상승 (권한 상승): 공격자가 위조된 토큰을 사용하여 더 높은 권한을 가진 사용자로 접근할 수 있습니다.

  • 데이터 노출 (데이터 노출): 신뢰할 수 없는 토큰으로 민감한 정보를 안전하지 않게 노출할 수 있습니다.

해결 방법

  • JWT를 사용할 때 항상 서명 검증(verify)을 수행하세요.

  • decode, verify 등의 옵션이나 라이브러리 설정 시 항상 검증이 활성화되어 있는지 확인하세요.

  • 신뢰할 수 있는 비밀 키(secret)을 안전하게 관리하세요.

  • 가능하면 표준이 잘 지원되는 라이브러리(express-jwt, jsonwebtoken 등)를 사용하세요.

취약한 코드 및 안전한 코드 예시

취약한 코드

안전한 코드

설명:

  • 취약한 코드: 서명 검증(verify)을 true로 전달하여 검증을 건너뛰고 토큰의 유효성을 확인하지 않습니다. 이로 인해 공격자가 임의의 토큰을 만들어서 인증을 우회할 수 있습니다.

  • 안전한 코드: 서명 검증을 확실히 수행하여, 변조되었거나 위조된 토큰이 서버에서 허용되지 않게 됩니다. 이를 통해 인증 우회나 권한 상승 공격을 방지할 수 있습니다.

참조

Last updated