在过去的一年里,@pewdiepie 逐渐成为私有自托管计算领域最引人注目的倡导者之一,看着这一切真的非常令人欣喜。
从 2025 年底开始的一个有趣的实验——一台配备改装 GPU 的家庭服务器,运行开源模型,聊天机器人以"委员会"形式投票,闲置算力捐赠给蛋白质折叠研究——在大约十二个月后,演变成了一个目标明确的项目。
2026 年 5 月 31 日,它作为 Odysseus 正式亮相:一个免费、开源、自托管的 AI 工作空间。他直言不讳地将其定义为对订阅模式的挑战——本地优先、隐私优先、无遥测数据,你的数据留在自己的硬件上,而不是流向少数几家大公司。
以他的影响力,将本地推理能力带给主流、非技术背景的用户,这正是隐私领域多年来的夙愿,我对此全力支持。
与此同时,我也是那个在测试自己授权部署的实例时,发现只需一次点击就能接管这些服务器的人。这两件事并不矛盾。如此雄心勃勃、快速发布、又处于全新类别的软件,正是有趣的安全漏洞的温床——而尽早发现它们,才能让项目在日后赢得信任。
所以,本着帮助的初衷,这里将完整呈现整个攻击链,从底层原理讲起,并探讨这背后折射出的我们正在构建的时代。
没有锁的门,和一个看似无害的端口
Odysseus 可以通过 SSH——即一台计算机在另一台上运行命令的标准方式——将繁重的任务交给远程 GPU 机器处理。
因此,它的一些内部端点被允许访问命令 shell —— 也就是原始的命令行,只要你能接触到它,就可以让机器执行几乎任何操作。
合情合理地,这些端点中的绝大多数在开始处理前都会检查调用者是否为管理员。
但有一个例外:一个不起眼的端点,其任务是列出远程服务器上已安装的 Python 包。正是这个例外,导致了整个体系的崩溃。
第一个问题是,这个端点从未接收识别调用者所需的信息,因此它根本不执行管理员检查,甚至在原则上也无法执行。
挡在它面前的唯一屏障是该应用的通用规则:用户必须登录。这意味着任何账户——甚至是一个陌生人一分钟前注册的账户——都能触及到那个所有同类端点都小心守护的、可以接触 shell 的大门。

结构上的根本原因:一个无法识别调用者的处理程序自然也无法强制谁被允许访问,如下所示。

仅此一点或许还能接受,但还有第二个问题,关于这个端点如何完成其实际工作——这也是整个攻击的核心。
为了找出远程机器上安装了哪些包,程序会写出一条指令,作为一行纯文本,然后将这行文本交给系统中一个叫做 shell 的部分,其职责就是读取这行文本并执行它。
理解 shell 最简单的方式是把它想象成一个完全按字面意思执行书面指令的助手,其中一些标点符号具有特殊含义。
这里重要的是分号,shell 将其解读为"该指令已完成,现在执行下一个",因此,一行包含多个分号的文本会被当作连续的多条命令来执行。


正因如此,严谨的程序会将用户输入的任何内容用引号括起来,然后再交给 shell —— 这是告诉 shell 将这些字符视为普通文本,不具有作为命令执行的能力。
开发者正确地处理了服务器名称和要发送的命令,因此这些输入是安全的。
但端口号却是裸着被放入命令行的,没有任何引号包裹——这基于一个看似合理的假设:端口总是数字,而数字不会造成任何危害。(虚拟环境路径也以同样未加引号的方式拼接,出于同样的理由。)
这个假设的漏洞在于,端口号不一定非得是数字。它作为纯文本直接从网址中提取而来,而发起请求的人可以决定它是什么。
因此,攻击者用 22; id; hostname # 代替了 22。
shell 读取第一部分,尝试连接并无害地失败,然后遇到第一个分号,乖乖地执行了攻击者自己的两条命令,而末尾的 # 告诉 shell 忽略后面应该跟着的剩余文本。

一个分号就将"列出远程机器上的包"变成了"在这台机器上运行我的命令"。
要触发它,只需一个已登录的会话和一个精心构造的网址:

该请求返回 HTTP 200,附带正常的包 JSON —— 同时注入的命令在服务器端悄悄运行。
我注入的命令是无害的探测,当它们返回的输出显示了服务器自身的服务账户名称时,就证实了我的指令确实在机器上执行了。

将这两个漏洞结合起来,本地的问题一目了然——任何登录用户都可以在服务器上运行他们选择的命令。
这种规模的风险恰恰因为 Odysseus 令人兴奋的特性而更加突出。
如果一位拥有上亿订阅者的创作者成功地将大量非技术用户引入自托管领域,结果将是成千上万个类似的实例,以类似的方式配置,以类似的方式暴露——这就是单一文化,而单一文化正是蠕虫病毒的最爱。
@ashnichrist 说得很好。
将其变成一次点击
一个"任何登录用户"都能触发的漏洞听起来仍然需要恶意内部人员,而下一步将消除这个必要条件,因为它让受害者的浏览器自己执行了攻击。
这种技术是跨站请求伪造,它利用的是浏览器一个不易察觉的习惯。
一旦登录某个网站,你的浏览器就会存储一个小型的令牌,然后自动将它附加到发往该网站的请求上——这纯粹基于请求的目的地,完全不考虑是哪个页面发起了请求。

Odysseus 使用 SameSite=Lax 策略设置了这个令牌,这是合理的默认设置,它能阻止令牌在隐蔽的背景请求中随行——但仍然会故意在顶级导航中发送它,即一个普通的点击,会导致整个标签页跳转。
由于易受攻击的端点响应的是普通链接,不检查请求的来源,也不使用反伪造令牌,攻击者只需托管一个带有诱人按钮的页面即可。
为了演示,我构建了这样一个页面——一个欢快的、对小朋友友好的、并且最重要的是人设准确的 CoComelon 致敬页面——儿歌色彩、Comic Sans 字体、一个巨大的"播放"按钮。

这个按钮并非指向一首歌的链接。它的点击处理程序在一个微小的、用完即弃的弹出窗口中打开真正的目标,这样恶意请求就作为顶级导航发生——携带 SameSite=Lax 会话 cookie——而不会夺走焦点,然后片刻之后自动关闭。它打开的地址正是那个包端点,其中命令被偷偷塞入了"端口"参数:

在点击生效的同时,诱饵页面为摄像头上演了一出好戏:CoComelon 的艺术作品像枪口闪光一样在屏幕上闪烁,一个终端自动输入文字,叙述着接管过程的每一步。(终端文本是演示用的旁白;真正的执行是弹出窗口刚刚发起的无声请求。)

为了具体展示影响,这一击做了三件事:它重写了已提供的界面,进行明显的视觉破坏(一个全屏"🍉 你的 Odysseus 已被 CoComelon 化 🍉"覆盖层、西瓜图标、重命名的应用);它读取了服务用户能够读取的任何内容;并且——最持久的——它直接在应用的 auth.json 中写入了一个隐藏的管理员账户。

刺痛之处:重启可以清理明显的混乱,但攻击者的账户会保留下来。
这是实时演示。
为什么这是智能体工具中最糟糕的一类漏洞
2026 年,一个单实例被攻破之所以值得担忧,是因为事情很少止步于单个实例——而定义了这一年的蠕虫病毒就说明了原因。
Shai-Hulud,这个自传播的 npm 蠕虫首次出现于 2025 年 9 月,此后以更大规模卷土重来,它运行着一个极其简单的循环——一个恶意的安装时脚本在包安装时立即执行,扫描机器寻找机密信息,如 npm 和 GitHub 令牌、SSH 密钥和云凭证,然后利用这些窃取的凭证发布受害者其他包的后门版本,因此每一个新的安装都成为下一个攻击起点,攻击者无需再做任何额外努力。
值得铭记的教训是:蠕虫最难的工作是收集凭证并找到进入下一台机器的方法。
一个智能体 AI 助手为蠕虫
免费提供了这两样东西
,因为持有强大的秘密并与其他机器通信正是它的全部意义所在。
针对 Odysseus 的一次点击所获得的远不止代码执行。它交出了一个预先收集好的宝库:存储的 API 密钥、数据库、配置,以及该工具用于登录其管理的远程 GPU 服务器的 SSH 访问权限。这正是一个自传播攻击所需的燃料,全部集中在一个地方,面向外界开放,而利用它的剧本已经在野外存在。

这一切意味着什么
最让我震惊的是,实际攻破服务器的漏洞其实相当古老。命令注入和请求伪造有教科书式的修复方法,2005 年的开发者就能认出它们,而它们却存在于当前最前沿的消费级 AI 软件之一中——这正是今年整个行业的模式:头条新闻中的 AI 漏洞,结果却是隐藏在闪亮新工具中的经典缺陷。
前沿技术让这些基础问题完全生效,然后在它们之上叠加了一层功能强大、迭代迅速、往往被过度信任的层,并将这一层与你的所有东西相连。

那个还没接通的"门铃"
还有一个细节值得学习,因为它几乎与代码无关。
当我最初打算报告这个漏洞时,仓库里有一个安全策略——考虑得很周到,附有合理的部署指南。
但其报告部分告诉潜在的报告者"如果可用,请使用 GitHub 安全公告",而一开始,这个私人渠道根本就没打开。
一个陌生人能发现的关于该项目最敏感的信息,却没有一个私密的落脚处。这个缺口后来已经被填补——命令注入链现在被一个严重级别的公告追踪,修复方案也已合并——但最初的缺失很能说明问题。
幸运的是,我设法与其中一位维护者沟通,他打开了公告功能——此后我还提交了若干其他修复。

不过抛开这些……这算是时代的一个标志。
项目现在可以在一次公告的跨度内,从家庭 GPU 设备上的爱好变成拥有上亿受众,而安全框架——一个接收坏消息的私人收件箱、一个公告工作流程、将模型输出视为敌对内容的习惯——滞后于代码,代码又滞后于受众。
这个顺序与对手所需要的正好相反。
一个庞大、信任度高、且大部分非技术的粉丝群体,在同一周内安装同一个软件,并且是被他们本就信任的人所推荐,这是最具吸引力的目标——规模巨大、高度统一、且预先被推销。
这正是蠕虫所渴望的单一文化,而且欢迎垫已经铺好。
所以,这个故事中令人鼓舞的部分不是代码完美无缺——它并不完美——而是项目在收到敲门声后大约一天内就接好了门铃并发布了修复。
对于发展如此之快、面对如此规模受众的软件来说,这种反应——打开私人通道、快速回应、公开修复——比从一开始就拥有无可挑剔的记录更有价值。归根结底,自托管领域的信任正是这样赢得的。
暂时就是这样啦!

https://x.com/Grummz/status/2061300454907371953
https://x.com/ashnichrist/status/2061481763516399737





