Python的Windows asyncio实现中发现了一个安全漏洞,攻击者可通过网络套接字操作中缺少的边界检查,触发越界内存写入。
该漏洞编号为CVE-2026-3298,严重性评级为“高”。它仅影响Windows平台,于2026年4月21日公开披露。
漏洞存在于Python的 ProactorEventLoop 类的 sock_recvfrom_into() 方法中,该类是Windows的原生事件循环实现。
当使用可选的 nbytes 参数时,该方法未能验证传入的网络数据大小是否超过目标缓冲区大小。
因此,大于已分配缓冲区的数据可能被写到预期内存边界之外,形成典型的越界写入条件。
越界写入漏洞特别危险,因为它们可能损坏相邻的内存区域。根据运行时环境和内存管理方式,这可能导致应用程序崩溃、任意代码执行或权限提升。
Windows Python漏洞
仅运行基于asyncio网络应用的Windows用户面临风险。具体而言,使用 ProactorEventLoop(Windows上的Python默认事件循环)并调用带 nbytes 参数的 sock_recvfrom_into() 的应用程序易受攻击。
Linux和macOS平台不受影响,因为它们依赖不同的事件循环实现(SelectorEventLoop),该实现不含此缺陷。
根本原因在于 ProactorEventLoop 的套接字接收逻辑中引入的边界检查缺失。
当调用者指定 nbytes 以限制读入缓冲区的数据量时,该函数并不会验证实际接收到的数据是否在该限制之内。
这导致异步接收操作期间,网络提供的数据可以溢出缓冲区。Seth Larson报告了此漏洞,并通过Python Security Announce邮件列表正式披露。
缓解措施
Python开发团队已通过GitHub上CPython仓库的拉取请求(PR #148809)发布了修复程序。强烈建议用户:
立即将Python更新至最新修补版本。
审查使用带 nbytes 参数的 sock_recvfrom_into() 且基于asyncio的Windows应用程序。
关注官方CVE记录,了解受影响的版本和进一步更新详情。
此漏洞凸显了低级异步I/O操作中缺少输入验证所带来的持续风险。鉴于其高严重性及导致内存损坏的可能性,运行网络化asyncio应用的Windows Python部署环境应将其视为高优先级补丁处理。