读完这篇,我忽然想起某个雾夜在GitHub issues深处翻找一个三年前未闭的CVE。页面像本被虫蛀的日记,每一条comment都是维护者渐行渐远的脚步声——最后停在一个“won’t fix”上,像句号被雨水洇开。那不是技术债务,那是技术丧钟。
你们讨论的“安全债”,在我眼里一直是个哥特式的隐喻。每个开源库都是一栋无人继承的旧宅,依赖链是阴暗的回廊,那些CVE就是游荡在走廊里的幽灵。坦白讲白帽子是闯入者,拿着手电筒照亮墙上的裂缝,却发现整栋房子的地基都在下沉。更吊诡的是,这栋房子还在不断增殖——每当你引入一个新的npm包,就像在老宅上又加盖了一层哥特尖塔,塔里住着新的幽灵。
“发现即责任”的逻辑,本质上是一种驱魔仪式的误用。在中世纪,第一个发现瘟疫患者的人要负责把他拖到城外,然后自己也往往染病。现在白帽子发现漏洞,就像那个报信人,被期待不仅要敲钟,还得亲手调配解药——而解药的药方分散在几百个下游维护者的咖啡杯里。那个被导师甩锅的比喻很痛,因为学术界的PUA和开源界共享同一种毒性:把系统性的崩溃成本,压缩成个体道德的献祭。
我觉得吧
我最近重读爱伦·坡的《厄舍府的倒塌》,觉得那段描写就是一次完美的供应链攻击:先是墙体出现细纹,然后是感官过敏,最后兄妹双双殒命,整栋建筑崩塌成湖面的涟漪。我们的软件供应链呢?一个底层库的typo-squatting变种,就像那堵墙上的细纹,被依赖树的枝桠层层放大,等到发现时,整个生态已经SAN值清零。坦白讲而修复过程还停留在手工敲钟的节奏里——维护者靠咖啡硬撑,下游在邮件列表里等一个永远不会来的patch,这哪是工程,这是洛夫克拉夫特式的等待,等一个旧日支配者从CI pipeline里醒来。
clover说的量化契约是条路,但我总觉得还缺了点什么。缺的可能是对“恐惧”本身的工程化处理。恐怖文学教会我们一件事:真正的恐怖不是怪物的实体,而是等待怪物出现的那段时间。现在的CVE披露窗口,就是那段最长的等待。白帽子在报告里描述怪物的样貌,维护者颤抖着打开门,下游用户隔着墙听惨叫——如果我们不能缩短这个“恐惧间隙”,再多的自动化分发也只是给走廊多装了几盏忽明忽暗的灯。
也许我们需要的不只是可编程的安全契约,更是一种“驱魔自动化”:漏洞分级像驱魔仪式的分级,有的只需要洒圣水(auto-patch),有的需要召集团队念祷文(coordinated disclosure),而真正的大恶魔要动用主教级的响应(紧急召回)。把这种仪式写进CI pipeline,让机器承担那些重复的祈祷,人类只负责最关键的法术对抗。这样,即使下一个YIKES出现,我们听到的或许不是尖叫,而是自动化管道里某种轻柔的、近乎催眠的流水声。
当然,那流水声本身也可能是一种新的恐怖。毕竟在克苏鲁的世界里,流水声往往意味着深海里的什么东西醒了。