ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

签名验证与密钥身份必须一致:PyJWT OKP JWK 漏洞的工程启示

签名验证与密钥身份必须一致:PyJWT OKP JWK 漏洞的工程启示 签名验证与密钥身份必须一致PyJWT OKP JWK 漏洞的工程启示背景与时间线新收录不等于新攻击本次选题的时效依据是 GitHub 已审核数据库在近 72 小时的收录。项目此前已披露相关问题不能把数据库日期当作攻击发生日期。以下事实以安全公告及其关联的项目发布资料为依据后续工程分析和建议不代表厂商确认的事故结论。核验项结果漏洞编号CVE-2026-102275项目公告日期2026-09-23GitHub 已审核数据库收录日期2026-10-05受影响与最低修复边界PyJWT 2.1.0,2.14.0最低修复版本 2.15.0Ed448 支持边界另见公告攻击发生时间所引用资料未提供可确认的现实攻击时间技术原理与信任边界公告确认旧版导入 OKP 私有 JWK 时未验证公钥字段 x 与私钥字段 d 的对应关系。最低修复版本为 2.15.0正式发布页日期为 2026-09-23。公告保留了早期“尚未发布修复版”的历史段落但后面的发行更新已明确取代该状态不能只截取旧段落。影响边界必须保留DPoP 场景中的令牌滥用还需要应用接受证明头中的私钥字段等附加条件不能把它写成任意 JWT 都可伪造。库层面的确定问题是密钥组件不一致被接受具体授权后果取决于使用方如何计算身份和选择验证密钥。工程分析序列化对象、密钥导入结果与授权绑定必须描述同一个密码学身份。仅验证字段存在、长度正确、曲线受支持都不能证明字段之间相互一致。对验证入口而言公钥输入与私钥导入应当是不同接口不应依靠一个宽泛反序列化接口自动猜测使用意图。影响范围从依赖存在到路径可达依赖清单命中是调查入口还需要确认相关功能是否启用、输入能否被不可信主体影响、程序以何种权限运行以及产物或状态是否跨任务复用。本文不把潜在后果写成已经发生的事故也不以公开说明等同于在野利用证据。建议保留一份服务级判定记录运行版本、调用点、输入来源、权限边界和处置负责人。由开发确认调用路径安全团队确认不可信输入如何进入平台团队确认补丁是否覆盖运行实例。这比单纯将漏洞工单标记为“依赖已升级”更有验证价值。防御性实验只验证安全不变量下列 Python 3 示例仅处理本地内存数据不攻击真实服务可独立运行。defaccept_public_key_metadata(jwk):# 仅为边界模型不执行密码学解析或签名验证。ifnotisinstance(jwk,dict):returnFalseifany(kinjwkforkin(d,p,q,dp,dq,qi,k)):returnFalsereturn(jwk.get(kty)OKPandjwk.get(crv)Ed25519andisinstance(jwk.get(x),str)andbool(jwk[x]))public{kty:OKP,crv:Ed25519,x:placeholder}assertaccept_public_key_metadata(public)assertnotaccept_public_key_metadata(dict(public,dplaceholder))assertnotaccept_public_key_metadata(dict(public,x))assertnotaccept_public_key_metadata([])print(4 项公钥入口策略检查通过)placeholder 不是有效密钥。通过模型只表示元数据满足入口策略绝不表示签名有效。生产实现仍须验证编码、曲线、密钥长度、算法策略以及令牌的发行方、受众、时效和请求绑定这些检查应交给成熟库并配合应用层协议校验。测试还应包括合法输入确保防护不是通过关闭全部功能而获得表面成功。负向用例要断言拒绝发生的位置及副作用而不只是断言最终返回错误。若测试仅验证“抛出了异常”异常前已经发生的网络连接、内存分配或代码生成仍可能被漏掉。修复与防护建议升级 PyJWT 并检查实际运行环境而非只修改依赖声明。对外部提交的证明 JWK 设置公钥专用入口拒绝私钥参数。内部确有私钥导入需求时使用修复版校验组件一致性并将其与外部证明处理路径分开。安全团队应盘点调用 PyJWK.from_dict 等导入接口的位置追踪指纹计算和验证密钥是否来自同一个规范化对象。回归测试覆盖合法公钥、含私钥参数的外部输入、组件不匹配和算法不匹配。不要为了排查而记录完整私钥或访问令牌记录错误类别、关联 ID 与不可逆摘要即可。交付验收清单责任方应交付的证据研发相关调用路径说明、合法与拒绝用例、版本升级差异安全输入信任边界、历史暴露判断、剩余风险记录平台实际运行版本、部署范围、失败回滚与监控方案修复关闭当前缺陷后仍应把相同类型的边界检查纳入后续开发约束。没有异常日志可能意味着未发生攻击也可能意味着没有记录到关键阶段应结合暴露条件解释证据避免作出超出可见范围的结论。总结本案例的实用价值是把依赖告警转化成可验证的工程问题哪个输入获得了超出预期的解释哪一步必须先执行校验以及升级后哪些运行对象需要重新确认。版本修复、调用链审查和回归测试应共同构成关闭风险的依据。
返回列表