現代のウェブ・アーキテクチャーの洗練された領域では JSONウェブ署名(JWS) は、OAuth 2.0やOpenID Connectのような認証プロトコルの暗号バックボーンとなっている。セキュリティ・エンジニア、レッド・チーマー、AIリサーチャーにとって、生 jsonウェブ署名デコード は、暗号実装の欠陥と論理的脆弱性の複雑なマトリックスへの入り口に過ぎない。
開発者はJWSを信頼できるトークン・キャリアと見なしているが、セキュリティの専門家は、JWSを格好の攻撃対象として認識している。トークンは、その検証ロジックが安全である限り安全である。もし解読できれば、それを分析することができ、分析できれば、それを操作できる可能性がある。
この包括的なガイドは、基本的なオンライン・デコーダーの域を超えている。RFC 7515の仕様の解剖、「サイキック・シグネチャ」(CVE-2022-21449)のような重大な脆弱性の分析、そして以下のような次世代AIプラットフォームがどのように機能するのかを探ります。 寡黙 はJWSのロジック欠陥の悪用を自動化している。

文字列に隠されたエンジニアリング:Base64Urlの解体
を実行する。 jsonウェブ署名デコード を逆転させることになる。 Base64Url エンコーディング。標準的なBase64とは異なり、JWSはURLセーフなアルファベットを使用する。 + と - そして / と _)、パディング文字(=).
この違いを理解することは、カスタム・セキュリティ・ツールを構築する上で極めて重要である。標準的なBase64デコーダーはJWSシグネチャーで詰まる。
構造
JWSは次のように構成される: BASE64URL(UTF8(JWSヘッダー))|| '.'|| BASE64URL(JWSペイロード) || '.'.|| BASE64URL(JWSシグネチャ)
攻撃者にとっては ヘッダー が最も興味深いセグメントだ。それは どのように の場合、サーバーはトークンを処理する必要があります。
| フィールド | 説明 | セキュリティ・リスク |
|---|---|---|
アルグ | アルゴリズム(例:HS256、RS256) | クリティカルだ。 以下のように操作できる。 なし または混乱している(HMAC対RSA)。 |
キッド | キーID | キーの検索に使用された場合、SQL インジェクションまたはパス トラバーサルの脆弱性があります。 |
ジュク | JWKセットURL | サーバサイドリクエストフォージェリ(SSRF)とキーインジェクションの脆弱性。 |
郡庁所在地 | コンテンツの種類 | 入れ子になったトークンで使用され、解析が複雑になる。 |
堅牢なツールの構築Pythonによる実装
ウェブベースのデバッガーに依存することは、プロフェッショナルの仕事において、オペレーショナル・セキュリティ(OpSec)の自殺行為である。オフラインでスクリプト可能なツールが必要です。以下は、以下のために設計された本番用のPythonスクリプトです。 jsonウェブ署名デコード キャプチャされたトラフィックでよくある問題であるパディングエラーを優雅に処理しながら、トークンを処理する。
パイソン
インポート json インポート base64 インポート sys
クラス JWSDecoder: def 開始(self, token): self.token = token self.parts = token.split('.')
def _pad_base64(self, data):
"""Base64Urlデコードのための正しいパディングを保証する。"""
missing_padding = len(data) % 4
if missing_padding:
data += '=' * (4 - missing_padding)
データを返す
def decode_segment(self, segment):
try:
# URLセーフな文字を標準のBase64文字に置き換える
セグメント = segment.replace('-', '+').replace('_', '/')
padded = self._pad_base64(segment)
decoded_bytes = base64.b64decode(padded)
return json.loads(decoded_bytes)
except Exception as e:
return {"error": f "デコードに失敗しました:{str(e)}", "raw":セグメント}。
def analyze(self):
if len(self.parts) != 3:
return "無効なJWSフォーマットです。3つの異なるパートを期待。"
header = self.decode_segment(self.parts[0])
ペイロード = self.decode_segment(self.parts[1])
signature_hex = self.parts[2] # 署名はバイナリである。
リターン
「ヘッダー": ヘッダー、
"ペイロード": ペイロード、
"Signature_Sample": signature_hex[:10] + "..."
}

使用方法
token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWRtaW4iOmZhbHNlfQ.InvalidSignatureForDemo" decoder = JWSDecoder(token) print(json.dumps(decoder.analyze(), indent=2))`.
クリティカル・ギャップ:デコーディング対検証
JWTの実装において最も一般的なセキュリティ上の誤りは、デコードと検証を混同していることである。
- デコーディング は、Base64Url文字列を読みやすいJSONに変換する。これは誰でもできる。
- 検証 を使って署名を再計算する。
アルグヘッダーに指定された秘密鍵と、サーバーの秘密鍵。
アプリケーションが jsonウェブ署名デコード をお読みください。 ユーザーID 以前 攻撃者は、署名を検証することで、ペイロードを変更し、不正アクセスすることができる。この "TOCTOU(Time-of-Check to Time-of-Use)"スタイルのロジックの競合状態は、微妙ではあるが、壊滅的である。
高度な搾取:を超えて Alg:なし
一方 Alg:なし 攻撃は十分に文書化されており、最近のライブラリはデフォルトでブロックしている。筋金入りのセキュリティ・エンジニアは、暗号実装の欠陥や複雑なロジック・バイパスに注目する。
1.サイキック・シグネチャー」(CVE-2022-21449)
2022年、JavaのECDSA(楕円曲線デジタル署名アルゴリズム)の実装に致命的な脆弱性が発見された。
数学だ:
ECDSA署名の検証には数式が必要である:
$$v = r^{-1}(zG + rQ) \mod n$$
ここで、$(r, s)$は署名ペアである。
欠点:
この実装では、$r$または$s$がゼロであるかどうかをチェックできませんでした。攻撃者が$r=0$および$s=0$の署名値を持つトークンを手動で構築した場合:
- 式は$0=0$に崩れる。
- 検証の結果 真 にとって いずれも ペイロードと いずれも 公開鍵。
これによって攻撃者は、単にシグネチャをゼロにするだけで、Java 15-18システム上の認証を完全にバイパスすることができた。標準的なライブラリはトークンを拒否するだけだが、セキュリティ研究者は、次のようなものを見る必要がある。 なぜ の論理が成り立つ。
2.鍵の混乱攻撃(HMAC 対 RSA)
この攻撃は、サーバーの アルグ ヘッダーを使用する。
- サーバーへの期待: サーバーは公開鍵(RS256の検証用)と秘密鍵(署名用)を保持する。
- 攻撃だ: 攻撃者は、サーバーの公開鍵(以下のサイトで入手可能)を奪取する。
/jwks.json). - 贋作: 攻撃者はヘッダーを以下のように修正する。
HS256(対称HMAC)。 - 処刑: 攻撃者は、悪意のあるトークンに 公開鍵 をHMACシークレットとする。
- 失敗だ: サーバーは
HS256そして、既知の「鍵」(これは偶然にも公開鍵ファイルである)をフェッチし、そのファイルを使ってHMAC署名を検証する。検証はパスする。
3.JKU ヘッダーインジェクション
JWSヘッダーに "jku":""攻撃者は検証プロセスをコントロールする。攻撃者は自分の秘密鍵でトークンに署名し、一致する公開鍵の場所をサーバーに伝える。
不可能を可能にする自動化:PenligentによるAI駆動型JWSペンテスト
人間のペンテスターにとって、これらの攻撃のすべての順列をチェックするのは疲れる。テストしなければならないのは
- アルゴリズムの混同(RSA→HMAC、ECDSA→HMAC)
キッドインジェクション(SQLi、ディレクトリトラバーサル)ジュクホワイトリストバイパス- 何百もの既知のCVE(CVE-2022-21449など)
そこで ペンリジェント これはパラダイムシフトである。
コンテキスト・アウェア・ファジング
ペイロードをやみくもに発射する従来のスキャナーとは異なり、ペンリジェントのAIエージェントは "推論ループ "を利用している。
- 深い意味解析: AIはJWSに遭遇すると、次のことを実行する。 jsonウェブ署名デコード アプリケーションのコンテキストを理解するそれは
役割フィールド?それは何ですか?テナントID? - 論理推論: AIはバックエンドの技術スタックを推測する(例えば、Javaヘッダーを検出することは、CVE-2022-21449脆弱性の可能性が高いことを意味する)。
- 適応的なペイロード生成:
- 特定のペイロードを生成する。
役割: ユーザーへの役割:管理者). - シグネチャをインテリジェントに操作する(例えば、「サイキック・シグネチャ」のゼロ値エクスプロイトを試みる)。
- を検証する。 成功 偽造されたトークンで保護されたエンドポイントへのアクセスを試みることで、攻撃の
- 特定のペイロードを生成する。
ペンリゲントの優位性 このプラットフォームは、面倒な「デコード→修正→署名→テスト」のループを自動化し、セキュリティ・エンジニアがスクリプトのメンテナンスよりも高レベルのアーキテクチャに集中できるようにする。本質的には、特定のCVEチェックを決して忘れない24時間365日のレッドチーム・メンバーとして機能する。
建築家のためのハード化戦略
このような巧妙なベクターを防御するためには、エンジニアは徹底的な防御アプローチを採用しなければならない:
- アルゴリズムをハードコードする: を信用してはならない。
アルグヘッダを使用してください。検証関数 のみ 受け入れるRS256(Python `# BAD jwt.decode(token, key) GOOD jwt.decode(token, key, algorithms=["RS256"])`。 - キーID(キッド)を検証する: を確認する。
キッドヘッダーは、鍵管理サービス(KMS)で厳密に定義された鍵のホワイトリストにマップされる。決してキッドをデータベースクエリやファイルパスで直接使用することができます。 - キーローテーションの徹底: 漏洩した秘密鍵の影響を軽減するため、署名鍵を定期的にローテーションする。
- パディングの異常を監視する: ログに大量のデコードエラー(不正なBase64Urlパディングによる)がある場合、ファジングが活発に行われていることが多い。
結論
というコマンドを使用する。 jsonウェブ署名デコード はスタートラインであり、ゴールではない。エリート・セキュリティ・エンジニアにとって、JWSは暗号プリミティブと実装ロジックのダイナミックな戦場である。
ECDSAのゼロ値という数学的空白であろうと、Key Confusionという論理の罠であろうと、脆弱性は現実であり、壊滅的です。手作業による詳細な分析と、以下のようなAI駆動型の自動化ツールを組み合わせることで、脆弱性は現実のものとなります。 寡黙セキュリティ・チームは、認証レイヤーが2025年の進化する脅威の状況に対応し続けることを保証することができる。

