平时 `yay -S` 一键装包、从来不瞅一眼 PKGBUILD 的朋友们,这条值得你停下来看完。
这个夏天,Arch 的 AUR(Arch User Repository)经历了一次真正意义上的供应链攻击:先是大规模投毒,然后注册、接管、推送被挨个关闸,整个写入侧冻了十来天,8 月 11 日才重新开放。截至发稿,注册功能依然没开,邮件列表里还在吵怎么改 AUR 的治理结构。
更要紧的是:攻击窗口期里推送过的恶意更新,不会因为你没关注新闻就从你机器上消失。这两个月装过、更新过 AUR 包的,建议照着下面的清单过一遍。

先快速复盘:这两个月 AUR 到底发生了什么
把官方公告和 aur-general 邮件列表的存档捋一遍,时间线大致是这样:
6 月 12 日,Arch 官方发布事件公告,确认 AUR 正在遭遇大量恶意接管和恶意更新,提醒用户更新时务必检查 PKGBUILD 和安装脚本的变更。Arch 官方
6 月 15 日,官方宣布暂停 AUR 新账号注册,理由是恶意包上传泛滥,先清理再说。aur-general 邮件列表7 月 13 日注册曾短暂重开,加上了拒绝一次性邮箱、强制验证邮箱等强化措施,但到 8 月 11 日 aurweb v6.5.0 公告时,注册又处于关闭状态,一直持续到现在。
7 月 30 日前后,新一波攻势来了:大量孤儿包被新账号批量接管,有的包 source 数组被直接替换成恶意 ELF 二进制,有维护者一夜之间收到一大堆接管通知。aur-general 邮件列表
7 月 31 日,社区成员贴出了一份当时"仍在分发恶意 ELF 二进制"的包名单,archutil、boringssl-git、icloudpd、stirling-pdf-desktop-bin、windscribe-cli-v2-bin 等 29 个包榜上有名。aur-general 邮件列表
7 月 30 日到 8 月 1 日,官方先关掉包接管功能,两天后把 git 推送也整个关了,AUR 写入侧彻底进入"只读"状态。aur-general 邮件列表知乎
8 月 11 日,aurweb v6.5.0 上线,推送和接管功能重新开放——但规则变了(下面细说)。aur-general 邮件列表

据中文社区媒体"开源派"援引社区审计的说法,这波通过恶意接管中招的包,早期统计 400+,后来拉到 1500+。知乎官方没有给出最终总数,这个数字姑且听之,但量级上"不是个位数"是肯定的。
现在去 AUR 还能干什么:三个入口,三种状态
很多人以为 AUR 整个被关了,其实官方仓库(core/extra)从头到尾没受影响,AUR 的下载、安装也一直可用,冻的只是"写入侧"。截至 8 月 22 日,状态是这样:
1. git 推送:已恢复。 8 月 11 日随 aurweb v6.5.0 重新开放。重开当天有维护者反馈 SSH 推送遇到连接重置,属于重开后的阵痛。
2. 包接管(adoption):已恢复,但从"先到先得"变成了审核制。 这是这次事件最重要的规则变化:现在接管一个孤儿包不再立刻获得维护权,而是提交一个接管申请,需要 Package Maintainer 审核批准。aur-general 邮件列表每个包同一时间只能挂一个待处理申请,14 天没人处理自动拒绝。攻击者"注册小号→秒接管孤儿包→推毒"的路径,至少被这道闸卡住了。
3. 新账号注册:仍然关闭,而且官方明说没有人工通道。 8 月 13 日官方在邮件列表里专门强调:目前没有"破玻璃"式的人工注册流程,让大家耐心等方案,发到邮件列表的注册请求也不会逐一回复。aur-general 邮件列表想入坑 Arch 又需要 AUR 账号的,先别折腾了。
另外一条和你直接相关:官方在 v6.5.0 公告里提到,未验证邮箱的账号会在 7 天后收到警告、14 天后被清理。aur-general 邮件列表如果你在 AUR 有账号但从没验证过邮箱,现在就去验证一下,别等账号被当成僵尸号清掉。
攻击者的套路拆解:看懂了才知道防什么
这次攻击最"聪明"也最恶心的地方,是它专挑孤儿包下手。AUR 上 10 万+ 的包里有一万多个孤儿包——原作者跑路、没人维护、但还挂在仓库里被人装着用。攻击者吃准了这一点:
接管孤儿包:这套玩法五月底就演练过:孤儿包 plex-media-player 被一个当天新注册的账号接管,同批还冒出 plex-media-player-v2、-mod、-custom 三个仿冒克隆。aur-general 邮件列表安装脚本里被塞进 `npm install crypto-javascript`,官方确认这个 npm 载荷就是恶意软件。七月底这波把同样的路子放大:像 org-cli 这个包,上游作者亲自到邮件列表举报——包被一个叫 roantielemans 的账号接管,推了一个伪装成 “Add missing deps” 的恶意 commit,作者名伪造成了 `github-actions[bot]`,载荷里带着 .onion 地址,是个 Tor 后门。aur-general 邮件列表
载荷藏在安装脚本和 source 数组里:主流手法是在 `.install` 脚本的 post_install 里塞一条 `npm install` 拉可疑载荷,或者把 source 数组直接替换成一个恶意 ELF 二进制。aur-general 邮件列表还有压根不依赖 Node.js 的项目,PKGBUILD 里被塞进 npm 命令、拉下 atomic-lockfile 这类可疑载荷,比如开源 VR 流媒体项目 alvr,一眼假。知乎
仿冒克隆:给热门包做 “-v2” “-mod” 版本,或者起个和官方包高度相似的名字。比如 brave-origin——正规包是 Brave 官方维护的 brave-origin-bin,这个多出来的"野包"在 source 里塞了个叫 “translator” 的 ELF 二进制,来路不明。aur-general 邮件列表
一句话总结:孤儿包 + 新账号 + 看起来正常的 commit,就是这次的作案三件套。

自查清单:五分钟过一遍你机器上的 AUR 包
别慌,按顺序来:
第一步,列出你装了哪些 AUR 包:
```
pacman -Qm
```
第二步,对名单。 社区公开的"已知中招"参考名单包括:邮件列表里点名的 29 个分发恶意 ELF 的包(archutil、bigwebapp-manager、boringssl-git、cinnamon-no-nemo、duhh、eden-nightly、garlic-decompiler-gui、gigolo-git、gitarbor-bin、icloudpd、imago-bin、juicebox-plus-git、magic-context-dashboard-bin、option-term、pagerduty-short-circuiter、portless、pylnker-git、python-libipld-git、python-numkong、python-parallax、python-ultraplot-git、ramses-git、src-cli-bin、steamidra-bin、stirling-pdf-desktop-bin、wiki-go、windscribe-cli-v2-bin 等),加上 plex-media-player 及其 -v2/-mod/-custom 克隆、brave-origin、org-cli。aur-general 邮件列表名单里有的,重点回忆一下安装/更新时间。
第三步,圈时间窗口。 六月中旬到八月上旬安装或更新过 AUR 包的,是重点排查对象。可以用 `pacman -Qi 包名` 看安装时间,再决定要不要深挖。
第四步,看 diff。 对可疑的包,翻一下它的 PKGBUILD 和 `.install` 文件最近的变更,重点盯这几个信号:安装脚本里出现 `npm install` 之类的联网拉包行为;source 数组里出现来历不明的二进制文件;`.onion` 地址、`curl | sh` 这类模式。AUR 网页端每个包都有 git 提交历史,逐版本看。

第五步,真中招了怎么办。 卸载相关包;如果安装脚本执行过联网载荷,稳妥起见修改一下这台机器上用过的敏感凭据,检查有没有多出来的 systemd 服务、cron 任务和 SSH authorized_keys;然后到 aur-general 邮件列表报告,官方公告里明确让大家把可疑提交报过去。Arch 官方
说句宽心的:只要你没装上面那些点名包、也没在窗口期里更新到来路不明的版本,大概率是没事的。这波攻击打的是长尾孤儿包,不是对着所有 AUR 用户撒网。
接下来盯什么:AUR 的"补丁"还在路上
这次事件大概率不会以"重开"收尾,几个信号值得持续跟踪:
接管审核制只是第一块补丁。 v6.5.0 还顺带清理未验证账号,官方明说是为将来的 SSO 整合做准备——账号体系要动真格了。
社区在讨论引入自动化安全扫描。 有人牵线 Socket.dev(做 npm/PyPI 供应链检测的)想给 AUR 接扫描,也有人提议搞众包审查,邮件列表里的讨论已经启动。aur-general 邮件列表
治理改革还在进行。 就在 8 月 21 日,aur-general 上还开着 “Process Architecture of AUR and Trusted Users” 的新帖,也有人申请 Package Maintainer 这个新角色。aur-general 邮件列表审核制落地后,谁来审、审得过来吗,是下一个问题。
对普通用户,我的建议就三条:近期装新的 AUR 包之前,花一分钟看一眼 PKGBUILD 和安装脚本;能用官方仓库或 -bin 官方维护版的,优先用它们;追更类、冷门工具类的包,更新前扫一眼 diff,反正 yay 也会告诉你有更新。
最后聊一句:这次事件把 AUR “社区自治、用户自负” 的老模式顶到了墙上。想问问大家——你平时 `yay -S` 之前,会看 PKGBUILD 吗?你机器上现在装着多少个 AUR 包?评论区报个数。