Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2025-65945-poc — PoC for CVE-2025-65945 (node-jwsにおける暗号署名の不適切な検証) | Kitploit
ツール/GitHubGitHub/jedisct1/cve-2025-65945-poc
脆弱性分析エクスプロイトウェブアプリケーション悪用暗号化ペネトレーションテスト認証
GitHubjedisct1/cve-2025-65945-poc

CVE-2025-65945-poc

PoC for CVE-2025-65945 (node-jwsにおける暗号署名の不適切な検証)

リポジトリを見る
518ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2025-65945: node-jws 署名バイパス

これは、node-jws ライブラリにおける署名検証バイパスの概念実証です。このバグにより、サーバーがユーザー制御のデータから HMAC 秘密鍵を導出する場合、攻撃者は有効な JWT を偽造できます。

バグの内容

jws.createVerify() 関数は、HMAC アルゴリズムを使用する際に秘密鍵が実際に提供されたことを検証しません。アプリが JWT 内の何か(kid ヘッダーなど)に基づいて秘密鍵を検索し、その検索が失敗した場合、空の秘密鍵に対して検証してしまう可能性があります。

攻撃者はこれを次のように悪用できます:

  1. データベースに存在しない偽のキー ID を持つ JWT を送信する
  2. 悪意のあるペイロードを空文字列の秘密鍵で署名する
  3. サーバーの検索が undefined を返し、それが空文字列に変換される
  4. 両方の側で「秘密鍵」(空文字列)が一致するため、署名が検証される

攻撃者は、任意のユーザーになりすましたり、自身に管理者権限を付与したりできるようになります。

影響を受けるバージョン

  • jws 3.2.2 およびそれ以前
  • jws 4.0.0

修正するには、3.2.3+ または 4.0.1+ にアップグレードしてください。

PoC の実行

Bun がインストールされていることを確認してから、以下を実行してください:

root@kitploit:~
# Install the vulnerable version
bun install [email protected]

# Run the exploit
bun run exploit.js

偽造された管理者トークンが有効として受け入れられる出力が表示されるはずです。

エクスプロイトの動作

この PoC は、以下のようなサーバーをシミュレートします:

  • いくつかの API キーを持つ秘密鍵ストアを持っている
  • JWT の kid(キー ID)ヘッダーに基づいて秘密鍵を検索する
  • ストリーミング API と共に createVerify() を使用する

攻撃者は kid: "non-existent-key" を持つ JWT を作成し、空の秘密鍵で署名します。サーバーがこのキーを検索しようとすると undefined が返され、検証ストリームに空文字列が書き込まれ、偽造トークンが検証を通過します。

修正のテスト

root@kitploit:~
# Upgrade to patched version
bun install [email protected]

# Run again - should fail now
bun run exploit.js

パッチ適用版では、エラーが表示されます: secret must be a string or buffer or a KeyObject。修正により、HMAC 操作を実行する前に適切な秘密鍵が設定されていることが検証されます。

脆弱なコードパターン

あなたのコードが次のような場合、影響を受ける可能性があります:

root@kitploit:~
const decoded = jws.decode(token);
const secret = lookupSecret(decoded.header.kid); // might return undefined!

const verifier = jws.createVerify({
  algorithm: "HS256",
  signature: token,
});

verifier.secret.write(secret); // oops
verifier.secret.end();

参考文献

  • GitHub Advisory
  • Fix commit
ツールをダウンロード