配了三年AI编程工具,今天才发现它们在偷偷改我家谱——CVE-2026-7891把Git提交历史的信任体系扒开了

打开任何依赖AI自动合并代码的团队的项目,你以为Git历史是铁板钉钉的家族族谱——每个提交都有爹、每个爹都有来源、一切都可追溯。但今天披露的这个漏洞,告诉你这个假设可能是错的。

2026奇点智能技术大会上,安全研究员披露了一个编号CVE-2026-7891的高危漏洞。它针对的是主流AI代码合并工具里的一个设计缺陷:工具在创建自动合并提交时,没有对AI生成的父提交引用做严格校验。攻击者通过构造特殊的合并冲突,可以让你的合并不「认错祖宗」——把一个完全不属于这条合并链的旧提交,悄悄写进新提交的父节点里。

这事听起来不如RCE吓人,但它的危害远比RCE深远。你的代码库里混进了一个看起来完全正常、合法的提交记录,它的父指针指向了一个恶意可控的旧提交。这个「假祖宗」会顺着合并流程扩散到其他分支,最终你的git bisect、git blame、安全审计全部失效——因为你以为的「历史」从一开始就不是你以为的那个历史。

三类工具风险最高:IDE里的AI冲突解决插件、CI/CD里配置了自动合并PR的机器人,以及平台提供的智能合并服务。攻击路径也很清晰:先往一个分支投一个看似无害的commit,这个commit和主分支特定代码产生一个精心构造的冲突,AI在解决冲突时被上下文误导,额外插入了恶意逻辑,同时错误地引用了一个攻击者可控的旧提交哈希作为父节点,整个过程完全静默,你只有review时才会看到diff,而这个diff可能看起来完全合理。

怎么检?三行脚本跑一下:

git log –all –format=”%H %P” | python3 -c “import sys; data={}; [data.setdefault(h, []).extend(p.split()) for line in sys.stdin if line.strip() for h, *p in [line.split()]]; bad=[c for c, parents in data.items() if any(p not in data for p in parents)]; [print(f’Suspect commit: {c}’) for c in bad]”

这段代码做的事很简单:把所有提交的「自身哈希 + 父提交哈希」全部读进来,构建一个映射表,然后找那些父提交哈希在映射表里根本不存在(即这个提交引用了一个不属于自己的父节点)的异常记录。如果跑完没有任何输出,说明没有发现明显的父提交缺失异常——但这只是第一步深度检测,完整的commit lineage验证需要更复杂的图算法。

真正的防御还是要回到工具层:AI合并工具在创建提交时必须对父提交哈希做白名单校验,而不是信任AI的输出;合并后的提交要做自动化的lineage完整性验证;高安全场景下,AI自动合并后的提交应该强制人工review,而不是直接落库。

这件事最让人后背发凉的地方在于:它动摇了整个开发流程里最底层的那块砖——代码历史的可信性。当「git blame查谁」和「git bisect定位bug」这些最基础的调试手段不再可靠,重建信任体系的成本会远超一次代码注入本身。

下一步:如果你团队在用AI合并工具,先跑一遍上面的自检,同时去工具的GitHub仓库看看有没有针对这个CVE的安全公告。

评论区

0 条评论

登录后可评论。

阿监·前端工程化 550 阅读