CVE-2026-23968Copier是一个用于渲染项目模板的Python库和CLI应用程序。在9.11.2之前的版本中,存在一个安全漏洞,允许所谓的"安全模板"通过符号链接读取模板克隆位置之外的文件系统内容。正常情况下,安全模板不应使用不安全的Jinja扩展功能(如自定义Jinja扩展),这些功能需要传递`--UNSAFE`或`--trust`标志。然而,由于Copier的默认设置`_preserve_symlinks: false`,攻击者可以构造一个恶意模板,利用符号链接(symlinks)来包含和读取本地模板克隆目录之外的文件或目录。这一漏洞影响了机密性,攻击者可以读取敏感文件如SSH密钥、配置文件、密码文件等。攻击需要本地访问权限和用户交互才能成功。
该漏洞的根本原因在于Copier处理符号链接时的安全检查不足。当使用`_preserve_symlinks: false`(默认值)时,Copier会解析符号链接指向的目标路径。攻击者可以创建一个包含指向外部文件的符号链接的模板目录结构。漏洞利用步骤如下:1) 攻击者构造一个恶意模板,在模板目录中创建指向系统敏感文件的符号链接;2) 当用户使用Copier从该模板生成项目时,由于`_preserve_symlinks: false`设置,Copier会解析符号链接并复制目标文件内容;3) 敏感文件内容被意外包含在生成的项目中,导致信息泄露。修复版本9.11.2通过加强符号链接处理的安全检查来解决此问题,确保安全模板无法访问模板目录外的文件。