---
id: "N0003"
title: "JWT 토큰 보안 취약점"
baseline: null
tags: []
---
# JWT 토큰 보안 취약점

## 대표 취약점 3가지

### 1. alg:none 공격
서버가 `alg` 헤더를 검증하지 않으면 서명 없이 토큰 위조 가능.

```
// 공격자가 만든 JWT 헤더
{ "alg": "none", "typ": "JWT" }
```

**방어**: 서버에서 허용 알고리즘 화이트리스트 고정 (`RS256`, `ES256` 권장)

### 2. HS256 공개키 혼동 공격
RS256으로 발급된 토큰을 HS256으로 검증 시, 공개키를 HMAC secret으로 오해.

**방어**: 알고리즘과 검증 방식을 코드에서 명시적으로 분리

### 3. JWT 탈취 후 재사용
JWT는 stateless → 서버가 revoke 불가.

**방어 옵션**:
- 짧은 만료시간 + Refresh Token rotation
- `jti` (JWT ID) claim 블랙리스트 관리
- 단순 세션 방식으로 재고려 → see N0005

## 서명 알고리즘 선택 기준

| 상황 | 권장 알고리즘 |
|------|--------------|
| 단일 서비스 | HS256 (공유 secret) |
| 멀티 서비스 / 마이크로서비스 | RS256 또는 ES256 |
| 성능 중요 | ES256 (짧은 키 길이) |

→ see N0002 (보안 원칙과 연계)
