XZ Utils: 使用 LZMA 算法的开源数据压缩工具,被许多 Unix-like 系统(如 Linux、FreeBSD 等)和各种软件项目广泛采用。

事件: 微软工程师在 3 月 29 日发现,XZ 软件包含有恶意代码,用于供应链攻击。攻击者名为“Jia Tan”,是黑客团伙虚构的开发者,作为“间谍”,从两年前就积极为 XZ 项目做贡献,并逐渐取得了信任。

原文Rob Mensching - 2024.03.30

最初是 Twitter 上关于 xz/liblzma 漏洞的帖子,当写完它时,我意识到这是一次真实的开源互动片段,值得我们更深入地关注。

关于 xz/liblzma 漏洞,将会有大量的分析。然而,我发现大多数分析,都忽略了攻击发生前的步骤:

  1. 原始维护者精疲力尽,只有攻击者提供帮助(因此攻击者继承了原始维护者建立的信任)

令人惊讶的是,有人发现了一个存档,其中包含了一系列相关的电子邮件,刚好记录了这个第 0 步发生的情况。让我们看看他们的话。

首先,我们开始于一个合理的请求,以合理的方式提出。这个问题迫使维护者面对他的"失败"。我在此用引号括起"失败",因为:a. 维护者实际上并不欠任何人什么,所以他并没有真正的失败,b. 我完全理解这种感受。让你的"社区"失望,这种感觉真的很糟糕。

“XZ for Java 还在维护吗?我一周前在这里提了个问题,但还没有得到回复。” - https://www.mail-archive.com/xz-devel@tukaani.org/msg00562.html

维护者承认他“落后”了,正在努力赶上。这是一种痛苦的呼喊,这是寻求帮助的呼声。然而在这个邮件中,帮助并未到来。

“是的,至少在某种程度上,如果有人报告了一个 bug,它会得到修复。但新功能的开发肯定不会很活跃。:-( " - https://www.mail-archive.com/xz-devel@tukaani.org/msg00563.html

哦!我们在同一条消息中初次见到了 xz/liblzma 攻击者。但这并不是你所期待的帮助。

“Jia Tan 帮助了我……他未来可能会在项目中扮演更大的角色……显然,我的资源太有限了……从长远来看,必须有所改变。” - https://www.mail-archive.com/xz-devel@tukaani.org/msg00563.html

然而,一个没有提供帮助的使用者 Jigar Kumar,说出了无益的话,这正是这类电子邮件的走向。

“在没有新的维护者之前,进展不会发生……当前的维护者失去了兴趣,或者不再愿意维护。看到这样的仓库走到这一步真是令人难过。” - https://www.mail-archive.com/xz-devel@tukaani.org/msg00566.html

旁白:考虑到 xz/liblzma 的漏洞看起来像是“Jia Tan”蓄意发起的攻击,“Jigar Kumar”是否应该被视为积极鼓励原始维护者放弃的帮凶呢?不确定?我们很快就会再次看到这个无帮助的使用者“Jigar Kumar”。

不可避免地,维护者试图为自己辩护。维护者对于疲惫不堪的压力处理方式各异。我倾向于变得愤怒,这最终表现出一种嘲讽的态度。然而,这种反应真的让人心痛。

“我并没有失去兴趣,但由于长期的心理健康问题,以及一些其他事情,我的精力已经相当有限。” - https://www.mail-archive.com/xz-devel@tukaani.org/msg00567.html

然后,维护者也提醒大家,现在的软件是如何构建的。

“也应该记住,这只是一个无偿的业余项目” - https://www.mail-archive.com/xz-devel@tukaani.org/msg00567.html

一周后,那个无帮助的使用者又回来了。

“你忽视了这个邮件列表上许多失效的补丁。现在你把仓库搞得一团糟。为什么要等到 5.4.0 版本才更换维护者?为什么要推迟仓库需要的事情?” - https://www.mail-archive.com/xz-devel@tukaani.org/msg00568.html

这有什么目的?我无法告诉你,这让我为该维护者感到多么的愤怒。

然后,发起这个电子邮件的合理请求者,认为现在是提出要求的好时机。

“我对你的心理健康问题感到抱歉,但了解自己的极限非常重要。我明白这对所有贡献者来说都是一个业余项目,但社区期望得到更多” - https://www.mail-archive.com/xz-devel@tukaani.org/msg00569.html

再读一遍最后一句,“社区期望得到更多”。使用者必须得到满足,维护者的需求,尽管明显有一些重要的,却被忽视了。

我们这个不再合理的请求者也提出了一个建议。注意,他没有提供实际的帮助。

“为什么不把 XZ for C 的维护工作交给别人,这样你就可以更多地关注 XZ for Java 呢?或者把 XZ for Java 交给别人,以便专注于 XZ for C?试图维护这两者意味着都不能维护得很好。” - https://www.mail-archive.com/xz-devel@tukaani.org/msg00569.html

所以,维护者不得不解释现在的情况。

“找一个共同的维护者或者把项目完全交给别人,这个想法在我头脑中已经有很长时间了,但这并不是一件容易得事。比如,需要这个人具备技能、时间,以及对此具有足够的长期兴趣。” - https://www.mail-archive.com/xz-devel@tukaani.org/msg00571.html

编写软件需要技能和知识。虽然许多技能和一些知识是可以转换的,但在新的软件项目上工作,无可避免地需要开发新的技能和更多的知识。

软件开发者不是可以随意更换的可替代零件。

电子邮件以抱怨的使用者继续提出要求但不提供帮助而结束。只剩下那个攻击者。

“Jia Tan 可能在未来的项目中扮演更大的角色。他已经在邮件列表外提供了很多帮助,实际上已经是共同维护者了。:-)” - https://www.mail-archive.com/xz-devel@tukaani.org/msg00571.html

这个邮件是开源项目中互动的缩影。使用者对一个(很少有两个)做所有事情的维护者提出要求(有些礼貌,有些不那么礼貌)。

毫无疑问,这就是它的运作方式。

我们需要改变。