技术分析
Git 大文件存储或 Git LFS 是一个开源扩展,用于在 git 存储库之外存储大文件。Git LFS 将大文件存储在远程服务器上,同时将指向该文件的指针存储在 repo 中。
Git LFS (git-lfs) 版本 <= 2.12 有一个漏洞,如果受害者克隆使用 git-lfs 的攻击者存储库,远程攻击者可以在受害者的 Windows 系统上执行任意代码。
当通过以下 ExecCommand() 函数生成新的 git 进程时,Git LFS 没有指定 git 二进制文件的完整路径:
subprocess/subprocess_windows.go:
func ExecCommand(name string, arg ...string) *Cmd {
cmd := exec.Command(name, arg...)
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
cmd.Env = fetchEnvironment()
return newCmd(cmd)
}
如果攻击者在存储库被克隆时将恶意可执行文件放置在存储库中(必须命名为 git.bat、git.exe 或 git.cmd),则执行恶意文件而不是位于受信任的原始 git 二进制文件小路。
这可能导致特权访问并接管被欺骗克隆恶意存储库的 Windows 主机。绝对值得打补丁,尽管由于所需的用户交互级别(他们必须执行克隆)我会说可利用性评级相当低,尽管 CVSS 得分为 9.8
Metasploit 模块
https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/windows/http/git_lfs_rce.rb
更多参考
https://github.com/git-lfs/git-lfs/security/advisories/GHSA-4g4p-42wc-9f3m