命令行工具willitmerge曝命令注入漏洞

本文详细披露了npm包willitmerge存在命令注入安全漏洞,攻击者可通过控制输入参数执行任意命令。文中包含漏洞成因分析、PoC示例和受影响的代码位置。

willitmerge存在命令注入漏洞

漏洞详情

软件包: npm - willitmerge 受影响版本: <= 0.2.1 已修复版本: 无 严重程度: 中等

描述

willitmerge是一个用于检查拉取请求是否可合并的命令行工具。在版本0.2.1中存在命令注入漏洞。

漏洞背景

该漏洞是由于使用了不安全的子进程执行API(exec)并连接用户输入造成的。用户可通过命令行参数或目标仓库中可控的输入来利用此漏洞。

漏洞利用

PoC 1

  1. 安装willitmerge
  2. 运行以下命令:
    1
    
    willitmerge --verbose --remote "https://github.com/lirantal/npq.git; touch /tmp/hel"
    
  3. 确认/tmp/hel文件在磁盘上被创建

GitHub源代码攻击向量

lib/willitmerge.js文件的第189-197行,将仓库协作者控制的用户输入传递到git命令中:

1
2
3
4
5
6
7
8
9
var cmds = [
  'git checkout -b ' + branch + ' ' + that.options.remote + '/' + iss.base.ref,
  'git remote add ' + branch + ' ' + gitUrl,
  'git pull ' + branch + ' ' + iss.head.ref,
  'git reset --merge HEAD',
  'git checkout ' + origBranch,
  'git branch -D ' + branch,
  'git remote rm ' + branch
];

用户可创建恶意的分支名称,例如:;{echo,hello,world}>/tmp/c

这与之前报告的pullit漏洞攻击向量类似。

资源

弱点

CWE-77: 命令中使用的特殊元素中和不当(命令注入)

产品使用来自上游组件的外部影响输入构建全部或部分命令,但在发送到下游组件时,未能中和或错误地中和可能修改预期命令的特殊元素。

作者: Liran Tal

参考

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计