错误: 当 inline_env 设置为 True 时,通过未经过消毒的 env 变量进行命令注入
作者: themavik创建于 2026年3月19日更新于 2026年8月10日
标签BugConnection
□ 错误描述
在fabric/runners.py'中,当inline env=True'(自Fabric 3.0起的默认)时,嵌入键和值被直接缩入 shell 命令字符串而没有任何逃逸。 这允许通过被刻制的嵌入值任意命令执行.
□ 代码位置
`fabric/runners.py',行~67-73:
参数= " ".join(
['''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
(中文(简体) ).
命令=“导出 QQ QQ ” 格式(参数,命令)
□再现.
[Python] 从布料导入连接 c = 连接 ("本地主机") c.run ("echo hello", env={"X":"a;回声INJEECT #"). #执行:导出QQa;回声INJEEDET #QQ回声你好
输出包括"INJETED"——任意命令被执行
□ 影响
任何将用户控制或不信任的数据传递到`run()'、`sudo()'或`local()'等`env'参数的代码路径,都容易受到外壳指令注射的影响。
代码本身有一个TODO承认这一点:"逃避,如果我们能找到一个FOOLPROOF 第三方方法这样做!"
□ 建议修补
对按键和值使用 “shlex.quote()” :
```2ZZ
参数= " ".join(
['''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
(中文(简体) ).
□ 环境
- 观察最近的主要分支
- 以`inline env=True' (默认) 代替 3.x
内容来源: fabric/fabric