CVE-2025-68146: CWE-367: tox-dev filelock中的时间检查与使用时间(TOCTOU)竞争条件
严重性: 中等 类型: 漏洞 CVE编号: CVE-2025-68146
filelock是一个Python的跨平台文件锁。在3.20.1之前的版本中,存在一个时间检查与使用时间(TOCTOU)竞争条件,允许本地攻击者通过符号链接攻击破坏或截断任意用户文件。该漏洞存在于Unix和Windows的锁文件创建过程中,即filelock在打开文件(使用O_TRUNC标志)之前会检查文件是否存在。攻击者可以在检查与打开之间的时间间隙内创建一个指向受害者文件的符号链接,导致os.open()跟随该符号链接并截断目标文件。所有在Unix、Linux、macOS和Windows系统上使用filelock的用户都会受到影响。该漏洞会波及到依赖库。攻击需要本地文件系统访问权限以及创建符号链接的能力(在Unix上具有标准用户权限即可;在Windows 10+上需要启用开发者模式)。当锁文件路径可预测时,攻击通常在1-3次尝试内即可成功。该问题已在3.20.1版本中修复。
如果无法立即升级,可采取以下变通方案:使用SoftFileLock替代UnixFileLock/WindowsFileLock(注意:其锁定语义不同,可能不适用于所有用例);确保锁文件目录具有严格的权限(chmod 0700),以防止不受信任的用户创建符号链接;和/或在运行受信任的应用程序之前,监控锁文件目录是否存在可疑的符号链接。这些变通方案只能提供部分缓解。竞争条件仍然可利用。强烈建议升级到3.20.1版本。
技术摘要
漏洞CVE-2025-68146影响tox-dev项目的filelock Python库,该库提供跨平台的文件锁定机制。在3.20.1之前的版本中,在类Unix和Windows系统的锁文件创建过程中存在一个TOCTOU竞争条件。该缺陷的产生是因为filelock首先检查锁文件是否存在,如果存在,则使用O_TRUNC标志打开并截断它。在存在性检查和打开调用之间,具有本地文件系统访问权限的攻击者可以创建一个指向任意目标文件的符号链接。当filelock打开锁文件路径时,它会跟随该符号链接并截断目标文件,导致文件损坏或数据丢失。此攻击需要创建符号链接的能力,这对于Unix系统上的非特权用户是标准的,在启用开发者模式的Windows 10+系统上也是可能的。当锁文件路径可预测时,攻击更容易得逞,并且利用通常会在1-3次尝试内成功。由于filelock被广泛使用,并作为依赖项包含在许多Python项目中,此漏洞可能会波及到跨多个平台的众多应用程序。该漏洞影响文件的完整性和可用性,但不直接影响机密性。该问题已在filelock的3.20.1版本中修复。
在升级之前,缓解措施包括:切换到SoftFileLock(它使用不同的锁定语义,可能不适用于所有用例),对锁文件目录强制执行严格权限(chmod 0700)以防止未经授权的符号链接创建,以及监控这些目录中是否存在可疑的符号链接。然而,这些缓解措施只能部分降低风险,因为竞争条件仍然可利用。截至发布时,尚未报告有在野利用。
潜在影响
对于欧洲组织而言,此漏洞对依赖filelock库的Python应用程序管理的关键文件的完整性和可用性构成重大风险。由于filelock用于协调对共享资源的访问,成功利用可能导致数据损坏、重要文件丢失或依赖可靠文件锁定的服务中断。这可能影响使用filelock进行并发控制的软件开发环境、自动化部署管道、配置管理以及其他操作流程。攻击的本地性质限制了远程利用,但内部威胁、受感染的端点或恶意的本地用户可能利用此漏洞造成损害。通过依赖库产生的级联效应增加了攻击面,可能影响广泛的应用程序。对于处理敏感或受监管数据(如金融机构、医疗保健提供商和关键基础设施运营商)的组织,文件损坏或服务中断可能导致合规违规、运营停机以及声誉损害。对本地访问和符号链接创建权限的要求在一定程度上限制了威胁,但并未消除,尤其是在具有多用户或权限限制较宽松的环境中。
缓解建议
主要的缓解措施是将所有filelock库实例升级到包含TOCTOU竞争条件修复的3.20.1或更高版本。对于无法立即升级的环境,组织应:
- 谨慎地用SoftFileLock替换UnixFileLock和WindowsFileLock,理解其不同的锁定语义并评估其是否适用于其用例。
- 将锁文件目录的权限限制为
0700或等效模式,确保只有受信任的用户可以在那里创建文件或符号链接。 - 实施监控和警报机制,以检测锁文件目录内意外符号链接的创建,从而发现潜在的利用尝试。
- 审查并强化本地用户权限,以尽量减少不受信任用户创建符号链接的能力,特别是在Windows系统上,如果不需要,则禁用开发者模式。
- 审计依赖库和应用程序是否存在易受攻击的filelock版本的使用,并协调整个软件供应链的补丁应用。
- 对关键文件实施文件完整性监控,以检测意外的截断或损坏。 这些步骤共同降低了风险,但在应用升级之前并不能完全消除风险。
受影响国家
德国、法国、英国、荷兰、瑞典、芬兰、丹麦、爱尔兰、波兰、意大利