关键信息 漏洞概述 漏洞类型: Use-After-Free Vulnerability 受影响版本: 4.8.0 修复版本: 4.9.0 严重性: Moderate CVE ID: CVE-2025-48145 弱点: CWE-416 根源分析 根本原因: 不当处理回调引用,当 Channel 对象被销毁时。 1. DNS 查询启动时,pycares 使用 存储回调引用。 2. 如果在查询未完成时 Channel 对象被垃圾回收,回调引用变得无效。 3. 当 c-ares 尝试调用回调时,访问已释放的内存,导致致命错误。 技术细节 核心问题: Python 垃圾收集器和 c-ares 回调执行之间的竞争条件。 1. 在 c-ares 回调上下文中调用 时,不能立即调用 。 2. c-ares 需要在 Python 回调返回后执行清理代码。 3. 过早销毁通道会导致 c-ares 访问已释放的内存。 影响 应用影响: 应用程序可能因触发导致 Channel 对象在查询完成前被垃圾回收的 DNS 查询而崩溃。 - 每次请求创建 Channel 对象。 - 快速处理多个失败的 DNS 查询。 - 应用程序未正确管理 Channel 生命周期。 修复与缓解措施 修复: 在 pycares 4.9.0 中通过实现安全的通道销毁机制修复。 开发者建议: 1. 升级到 pycares >= 4.9.0。 2. 最佳实践(可选但推荐): - 显式清理: - 使用上下文管理器: 3. 避免每次请求创建 Channel 对象,使用长生命周期实例以提高性能和安全性。 致谢 报告者: @vEpiphyte 通过 aio-libs 安全计划报告此漏洞。