x/exp/cmd/txtar命令没有限制它可能覆盖的文件的范围,这似乎存在风险(例如,参见 https://snyk.io/research/zip-slip-vulnerability )。此外,环境变量的扩展可能会使攻击者更容易构造恶意文件:
$ go install golang.org/x/exp/cmd/txtar@latest
$ cat hmm.txt
-- $HOME/.ssh/not_authorized_keys --
hmm
$ txtar -x < hmm.txt
$ cat ~/.ssh/not_authorized_keys
hmm
(纯文本给予了一点优势,即它更难隐藏恶意路径,但对于足够大的txtar文件,用户不太可能审查所有文件路径。)
我建议x/exp/cmd/txtar默认只写入当前目录内的文件。如果有任何解析在当前目录之外,txtar应该以错误退出。(我认为不写入任何文件是最安全的,但如果txtar的实现碰巧更容易写入范围内的文件,那么这样做也是可以的。)可以提供一个标志来允许对任意文件路径进行扩展。
我还建议默认情况下不要展开环境变量,而是要求使用该功能时需要一个标志。
/cc @bcmills@rsc@FiloSottile
6条答案
按热度按时间jckbn6z71#
可以提供一个标志,以允许扩展到任意文件路径。或者——甚至更好!——提供一个明确的允许变量列表。
8oomwypt2#
我看到了两个相关的风险:
/
或../
开头的文件路径。我认为为安全的环境变量提供灵活的允许列表是可以接受的。我只是不想请求太多的控制参数或者添加太多的复杂性。我只希望当我在不受信任的输入上运行
txtar
时,默认情况下我不需要担心我的 SSH 文件被破坏。:)xriantvc3#
我只想让默认情况下,当我在不受信任的输入上运行
txtar
时要清楚:无论如何,你都应该对不受信任的
txtar
输入保持警惕。txtar
归档可以包括点文件(与变量扩展无关),而且有很多方法可以通过工作目录中的各种点文件注入恶意行为(例如.git/config
)。qgzx9mmu4#
我为这个发送了两个CL:
这些标志目前只影响归档提取,即它们在写入归档时没有效果。
我曾尝试在写入归档时也应用这些标志,但我认为这会增加不必要的复杂性。
3qpi33ja5#
https://golang.org/cl/371274提到了这个问题:
cmd/txtar: extract only in current dir by default
x8goxv8g6#
https://golang.org/cl/371275提到了这个问题:
cmd/txtar: add flag for environment variables