命令行工具willitmerge存在命令注入漏洞

本文详细分析了npm包`willitmerge`(一个用于检查拉取请求是否可合并的命令行工具)中存在的命令注入安全漏洞。漏洞源于其不安全地使用`exec`执行用户可控的输入,攻击者可通过构造恶意分支名或远程URL参数执行任意系统命令。

GHSA-j9wj-m24m-7jj6: willitmerge 存在命令注入漏洞

严重程度:中等 发布日期: 2025年11月25日 所属仓库: shama/willitmerge 最近更新: 2025年11月26日

漏洞详情

软件包: npm / willitmerge

受影响版本: <= 0.2.1 已修复版本:

描述

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

资源:

  • 项目 GitHub 源代码:https://github.com/shama/willitmerge/
  • 项目 npm 包:https://www.npmjs.com/package/willitmerge

漏洞利用背景

报告 willitmerge npm 包中的一个命令注入漏洞。 该软件包中存在安全漏洞,原因是其使用了不安全的子进程执行 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 漏洞 的攻击向量类似。

作者: Liran Tal

参考

发布时间: 2025年11月25日,由 shama 发布到 shama/willitmerge 发布于 GitHub Advisory Database: 2025年11月26日 已审核: 2025年11月26日 最后更新: 2025年11月26日

弱点

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

描述: 该产品使用来自上游组件的外部影响输入来构建全部或部分命令,但在将命令发送到下游组件时,它没有中和或错误地中和了可能修改预期命令的特殊元素。 在 MITRE 上了解更多信息。

CVE ID: 无已知 CVE GHSA ID: GHSA-j9wj-m24m-7jj6 源代码: shama/willitmerge

报告者: lirantal

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