Python 周刊 #5:Python 3.15.1 紧急吊销失陷 CA,PEP 850 启动硬件加速轮子规范,PEP 836 撤回调整 JIT 路线

Python · 周刊 #5

Python 周刊 #5:Python 3.15.1 紧急吊销失陷 CA,PEP 850 启动硬件加速轮子规范,PEP 836 撤回调整 JIT 路线

pythonPython语言周刊WheelVariantsJIT架构安全漏洞

数据源:GitHub Releases + 官方博客 + HN

欢迎阅读「团子技术日报」Python 专栏第 5 期。本周(2026-10-19 至 2026-10-26)Python 官方紧急发布多个维护版本以拦截失陷 CA 证书;打包工作组联合提交 PEP 850 确立硬件加速轮子规范;CPython 核心团队撤回 PEP 836 并转向外部 JIT 原型孵化;Brotli 解码器漏洞对网络依赖链产生威胁。笔者梳理了过去 7 天经核验的关键动态。

📦 版本动态

官方紧急安全发布与网络传输层防护

官方当前最新稳定主线版本为 Python 3.15.1(发布日期为 2026 年 10 月 21 日,由发布经理 Hugo van Kemenade 签署)。关于 3.15 主版本的完整特性与改动,可参阅站内专文:Python 3.15 详解。

过去 7 天内,因受信任 CA 机构 eMudhra 发生中间证书私钥失陷事件,CPython 团队连续执行两次紧急发布,并在主分支合入了导入层死锁回归补丁。核心工程变动概括如下:

  1. 证书校验阻断(gh-160040 / CVE-2026-115557):针对失陷的 eMudhra 中间证书私钥,10 月 21 日释出的 Python 3.15.1、3.14.9 与 3.13.17 随附升级内置 pip 至 26.2.2(内嵌 certifi 2026.10.19);10 月 25 日进一步发布 3.13.18、3.12.16 与 3.11.18,在 _ssl 核心模块注入基于 SubjectPublicKeyInfo(SPKI)哈希特征的硬编码黑名单。只要客户端启用证书校验,底层握手直接阻断失陷证书链,无需等待系统证书库滞后更新。
  2. Python 3.15.1 维护补丁强化:作为 3.15.0 首个维护更新,合入了来自 117 位贡献者的约 330 项修复。涵盖:修复 http.cookiejar 负版本号 Cookie 校验漏洞(gh-160300)、修复 tempfile.TemporaryDirectory 在并发清理时的竞态条件(gh-157579)、修复 tarfile.tar_filter 中链接覆盖目标路径的安全隐患(CVE-2026-114583),以及 Windows 禁用默认加载 mimetypes.knownfiles(CVE-2024-3220)。
  3. 并发首次导入假性死锁修复(gh-159963 / gh-159965):3.15.0 引入的 _HierarchicalLockManager 导致子模块执行期间长期持有父包锁,多线程冷启动时引发虚假 _DeadlockError。核心团队在主分支与 3.15 维护分支解除该绑定,执行子模块代码体前立即释放父包锁。

官方维护分支状态概览:

版本号官方发布日期维护分支类别核心工程影响与修复要点
Python 3.15.12026-10-21最新稳定主线 (Bugfix)随附 pip 26.2.2 移除失陷 CA,合并 330 项稳定性修复
Python 3.14.92026-10-21前代稳定维护版 (Bugfix)升级 pip 并同步更新 macOS 安装器信任链证书
Python 3.13.182026-10-25安全支持分支 (Security)_ssl 模块硬编码拦截 eMudhra 失陷中间证书,升级 Expat 至 2.9.0
Python 3.12.162026-10-25安全支持分支 (Security)向后移植 SPKI 阻断补丁与 tarfile 路径规避修复
Python 3.11.182026-10-25安全支持分支 (Security)阻断失陷证书特征,消除容器与存量系统伪造证书风险

笔者查验发布说明确认,针对现存虚拟环境,升级全局 Python 二进制不改变现有环境依赖,需在各 virtualenv 中显式执行 python -m pip install --upgrade certifi pip 以完成防御防护。


📝 深度条目

PEP 850 正式提交:Wheel Variants 启动异构硬件轮子分发标准

  • 发生了什么:2026 年 10 月 19 日,Michał Górny(Quansight)、Jonathan Dekhtiar、Konstantin Schütze(Astral/uv)与 Ralf Gommers 正式提交 PEP 850(Wheel Variants: Providers),联动重构 PEP 817 与 PEP 825。提案由 Carol Willing 赞助,Astral、Meta 与 Quansight 联合起草。
  • 为什么重要:PyTorch、JAX 等科学计算库受限于静态平台标签,长年依赖本地版本号(如 +cu124)或私有 Extra Index 托管分发异构硬件包。PEP 850 确立了 Variant Provider 扩展机制,允许打包解析器在安装阶段动态探测宿主计算设备(CUDA 算力级别、ROCm、AVX-512、Metal),在原生 PyPI 单一索引下自动匹配对应加速 Wheel,消除各项目各行其是的私有规约。
  • 对谁有影响:深度学习框架发布人员、科学计算库维护者、Python 打包工具链(uv、pip)开发者以及自动化镜像构建流水线管理员。

CPython 撤回 PEP 836 与 PEP 774:JIT 编译器路线转向外部原型演进

  • 发生了什么:2026 年 10 月 19 日,CPython JIT 核心作者 Savannah Ostrowski、Ken Jin、Brandt Bucher 宣布正式撤回 PEP 836(“JIT Go Brrr: The Path to a Supported JIT Compiler for CPython”),10 月 20 日同步撤回免除 LLVM 构建依赖的 PEP 774。作者在 Discourse 说明,受限于维护精力与指导委员会对 3.16 稳定特性的高门槛要求,将方法级 JIT 原型移至外部分支(openai-oss-forks:cpython:public/pep-836)继续推进。
  • 为什么重要:该决定标志 CPython JIT 从 3.13 确立的追踪架构向方法级方案分流。方法级 PoC 在 pyperformance 与 Pyston 基准测试中实现 5-6% 加速,并精简了约 3,100 行生成代码与 4,300 行非生成代码,但短期难以达到跨平台与自由线程一级生产可用标准。官方在 3.16 周期放缓了将 JIT 升格为默认核心特性的进度。
  • 对谁有影响:关注 CPython 底层性能的架构师、自由线程并发计算研发者、解释器与编译器研究人员。

CVE-2026-111497 (Broccoli2Shell):Brotli 越界写入波及 Python 网络库

  • 发生了什么:2026 年 10 月 24 日,安全机构披露 Google C 语言 Brotli 解码器存在越界写入漏洞(CVE-2026-111497,CVSS 4.0 评分 9.2 Critical),影响 1.0.3 至 1.2.0 版本。PyPI 上的 C 扩展包 Brotli 与 brotlicffi 同步受损。
  • 为什么重要:Python 库 urllib3 与 requests 检测到环境中安装 Brotli 时,会自动发送 Accept-Encoding: br 并执行自动解压;异步框架 aiohttp 具有相同行为。即便业务未主动调用解码函数,对外发起的 HTTP 请求只要接收到恶意构造的约 23 MB 数据流,就会触发内存越界写入,引发宕机甚至远程代码执行。生产环境需升级至 Brotli>=1.2.1 或 brotlicffi>=1.2.1.0;无法即刻升级时,卸载这两个包可使客户端自动降级至 gzip。
  • 对谁有影响:使用 requests、urllib3、aiohttp 进行外网通信的后端工程师、爬虫开发者、企业安全运营人员。

Python 3.15 紧急修复层级锁子模块并发导入假性死锁(gh-159963)

  • 发生了什么:2026 年 10 月 25 日,CPython 核心团队向主分支合并 gh-159965(向 3.15 分支合入 gh-160630),修复了 3.15.0 中引入 _HierarchicalLockManager 导致的子模块并发首次导入挂起缺陷(gh-159963)。
  • 为什么重要:在 3.15.0 运行时中,多线程并发执行跨模块首次导入时,父模块锁在子模块执行代码体期间被长期持有。导致无循环依赖的代码抛出虚假 _DeadlockError 或误报 ImportError。cryptography、protobuf 等底层库在多线程冷启动初始化时频繁发生挂起。合入补丁重构了锁生命周期管理,确保子模块执行代码体前放开父包锁,消除了并发启动异常。
  • 对谁有影响:在 Python 3.15.0 上部署多线程微服务、使用 FastAPI、Gunicorn、Celery 进行多工作线程并发冷启动的工程团队。

🔥 社区热议

Broccoli2Shell 蔓延:C 解码器安全性与客户端隐式协商之争

  • 讨论热度:Hacker News 主贴收获 390 points / 209 comments(HN #50219177),衍生讨论帖收获 186 points / 95 comments(HN #50216791)。
  • 核心分歧点:
    1. 底层核心组件是否必须转向 Rust:多位系统开发者指出,Brotli 作为通用传输基石,C 实现依然出现 9.2 级内存越界写入,主张全面使用 Rust 重写解码器;反对意见则表示,现有 C 库经过十余年微架构 SIMD 指令调优,在边缘高吞吐设备上的极限解析效率依然是关键考量,跨语言重写在短期内难以实现对等优化。
    2. 网络客户端是否应取消隐式内容协商:部分工程师批评 urllib3 与 requests 在环境存在 Brotli 包时自动开启 Accept-Encoding: br 的行为,认为隐式行为放大了攻击面,主张改为显式 Opt-in;库维护方反驳称,自动协商压缩算法是现代 HTTP 规范的既定基线,强制手动启用会加剧网络带宽消耗。

Daniel Lemire 实测 fastpybase64:SIMD 指令突破与标准库定位讨论

  • 讨论热度:Hacker News 讨论帖(HN #50154972)与 Daniel Lemire 技术专文。
  • 核心分歧点: 在 Intel Xeon Gold 6548N 单核压测环境下,基于 simdutf 的 fastpybase64 在 64 KiB 数据块上跑出 13.3 GB/s 解码吞吐,相比现有 pybase64(3.1 GB/s)快 4 倍,相比 Python 标准库 base64(0.49 GB/s)快 27 倍。
    1. CPython 标准库是否应内置 SIMD 矢量化优化:性能倡导派提出,Base64 与 JSON 等作为数据序列化瓶颈,官方标准库应积极集成类似 simdutf 的汇编指令集;系统维护派强调,CPython 核心追求最大化可移植性,在解释器源码树维护跨平台编译矩阵会极大推高维护成本,保持标准库精简、将极限吞吐交由外部三方库更符合分层设计。
    2. 自由线程下的内存带宽极限:自由线程多核并发环境下,单核 13 GB/s 已逼近内存总线带宽瓶颈,多核密集计算时进一步矢量化优化的边际效用成为讨论焦点。

PyPI 二进制 Wheel 供应链盲区:源码与预编译二进制不一致风险

  • 讨论热度:Hacker News 讨论帖(HN #50154823)与安全专家 Artem Golubin 专文。
  • 核心分歧点: 讨论聚焦于当前 PyPI 审查机制的重大结构缺陷:绝大多数扫描器仅对上传的源码包(sdist)执行抽象语法树与文本分析,攻击者可在 GitHub 仓库公布无害源码,却在上传至 PyPI 的二进制 Wheel(.whl)中植入恶意机器码。
    1. 是否强制实行可重现构建与托管编译:安全合规派提议,PyPI 应逐步禁止开发者直接上传本地预编译 Wheel,强制要求所有发布包通过受信任 CI 从源码执行可重现构建并附加数字证明;生态维护派指出,Python 涉及复杂的 C/C++/Fortran/Rust 跨平台编译,PyPI 缺乏基础设施去承载全球庞大的免费编译算力,激进推进会导致大量科学计算轮子无法及时发版。

🔭 下周关注

  • CPython 3.16.0 推进与 WASI 适配:关注 PEP 11 将 WebAssembly 目标架构三元组由 wasip1 升级至 wasip3 的核心代码合并进展。
  • Python Steering Council 2026 换届选举:PEP 8107 换届选举日程启动,关注核心指导委员会新一届候选人提名动向。