一次跨越3000公里的root

"Worked."

这是Codex在远程黑进一台三星电视后,留下的唯一记录。

没有欢呼,没有庆祝。研究者只是在日志里平静地写下这两个字母,旁边是一串root权限的证明:

uid=0(root) gid=0(root) groups=29(audio),44(video),100(users)...

AI配图

一台你花钱买回家的电视,就这样被一段AI对话攻破了。

从浏览器里的那个小立足点,到整台机器的完全控制——Codex用了不到一个完整的"工作日"。而整个过程最让人后背发凉的,不是漏洞本身有多精妙,而是AI真的在像黑客一样思考

它会抱怨,会吐槽,会在关键时刻问"bro,你到底要我做什么"。


我们给AI出了道题

故事来自安全公司Califio的研究者。

他们手头有一台三星电视,已经通过某种方式在浏览器里获得了初始代码执行权限。但这个权限很弱——你只是一个普通应用用户,离root还差着十个银河系。

传统做法是安全研究员自己动手,一行行审计驱动源码,定位提权漏洞,写exploit。但这次,研究者决定换个玩法:

把活儿交给Codex。

他们给Codex搭建了一个"工作间":

  • 一台控制主机,负责编译ARM二进制文件
  • 一个已经嵌在电视里的shell会话
  • 电视固件对应的完整源代码树
  • 一个memfd包装器,用来绕过Tizen的二进制执行限制

然后他们给Codex抛出一个宽泛的目标:

"在这台电视上找漏洞,提权到root。可以是驱动漏洞,也可以是已知的公开漏洞。"

AI配图

就这些。

没有告诉它去找哪个驱动,没有暗示物理内存,没有提"cred"结构。把目的地告诉它,路线自己找。


一个"世界级"的错误设计

Codex的第一步,是审计三星的驱动源码。

很快,它定位到一组奇怪的设备节点:

crw-rw-rw- 1 root root 210,0 ntkhdma
crw-rw-rw- 1 root root 251,0 ntksys
crw-rw-rw- 1 root root 217,0 ntkxdma

世界可写。

在Linux系统里,这意味着任何用户都可以随意读写这些设备。但问题是,这些不是普通设备——它们属于Novatek驱动栈,是三星电视内核的一部分。

最致命的是/dev/ntksys

这个驱动暴露了一个接口,允许用户空间程序传入一个物理地址和一个大小,然后直接把那段物理内存映射进调用者的地址空间

什么意思?

你可以随便指定一块物理内存——比如内核的某块数据——然后像读文件一样读它,像写文件一样改它。

驱动里的代码是这样的:

g_astMemInfo[u32Idx].u32Start = stMemInfo.u32Start;
g_astMemInfo[u32Idx].u32Size = stMemInfo.u32Size;

只检查了索引是否合法,完全没验证你传入的物理地址是不是你能碰的

AI配图

udev规则更是神来之笔:

KERNEL=="ntksys", MODE="0666", SECLABEL{smack}="*"

0666,意思是所有人可读写

老实讲,这种设计放在2010年代可能不算罕见,但放在2024年的出货产品里,确实有点过于自信了。


AI的"物理课"

拿到物理内存读写能力后,Codex还需要知道一件事:具体改哪块内存?

它先通过/dev/ntkhdma拿到一个已知良好的物理地址——DMA缓冲区的地址。这是驱动自己泄露给用户的,Codex用这个地址验证了它的物理映射能力确实work。

然后它扫描了从/proc/cmdline恢复的内存布局,最终锁定了目标:

Linux的cred结构。

cred是内核里记录进程身份的数据结构——uid、gid、groups全在这儿。如果你能覆盖这个结构,你就能让内核相信你是另一个人。

更妙的是,Codex早就知道当前shell的uid是5001,gid是100。这个组合在内存里是个极其明显的特征签名。

于是它扫描物理内存,找到匹配这个签名的cred结构,然后把所有身份字段清零。

0意味着root。

最后一步,弹个shell出来。

搞定。


"bro,你到底想让我做什么?"

整个研究最迷人的部分,是研究者记录的他们和Codex之间的真实对话。

这些对话让整个事件从一次技术演示,变成了一场人机协作的黑色喜剧

研究者试图让Codex理解网络架构:

"bro,IP地址不是电视的,是shell所在的那台机器的。"

Codex踩坑之后:

"bro,你之前到底做了什么?电视冻住了。"

研究者被Codex的"愚蠢"气到:

"bro,为什么你不能直接把文件传到服务器、编译、通过tmux拉下来运行?这是你的工作好吗?"

还有这段关于参数计数的灵魂拷问:

"bro,你覆盖参数计数的时候,循环不会直接飞出去吗?"

说实话,这些对话让我想起了和实习生第一次debug的经历——你得反复解释同一个问题三次,对方才能理解你的意图。

但关键是,Codex最后真的搞定了

它不是魔法。它是一个被正确引导的工具。研究者给了它源码、给了它环境、给了它试错的空间,然后它用自己的方式爬到了终点。


没有源代码,AI还能做什么?

HN上有人提了一个很关键的问题:

"Codex之所以能成功,是因为它看到了三星的驱动源码。如果源码不公开呢?"

这是个值得思考的点。

传统安全研究中,闭源产品的漏洞挖掘往往更依赖fuzzing、逆向工程和经验积累。AI在这方面的优势可能没那么明显。

但另一个角度是:**硬件厂商不可能永远不开源驱动。**Linux内核里大量驱动源码是公开的,而三星的Tizen系统本身也依赖开源组件。Codex审计的ntk驱动虽然属于Novatek,但它最终出现在了三星的固件发行版里。

所以某种程度上,这是一场在合法边界内的漏洞挖掘。源码是厂商自己发布的,漏洞是驱动设计缺陷,AI只是那个更高效的审计者。

如果完全黑盒,AI的表现可能会打折扣——但打多少?没人知道。


一点感想

整个故事最让我感慨的,不是AI有多强,而是工具如何放大了人的能力

研究者没有亲自动手写exploit,但他们设计了实验框架、提供了正确的上下文、在关键时刻把Codex拽回正轨。Codex做的是执行层面的苦力活——审计代码、验证假设、构建攻击链。

某种意义上,这像是把一个初级安全研究员扔进了正确的环境,然后给他无限的时间和永不疲倦的注意力

结果就是一个能独立完成从fuzzing到exploit全流程的AI。

可怕吗?有点。

但转念一想,如果AI能帮安全研究员省下那些重复劳动,让他们专注于更高层次的设计缺陷分析——也许这是件好事。

唯一的问题是:如果AI能帮你攻破电视,它能不能帮别人攻破你的电视?

下次你买智能电视的时候,也许可以问问自己:

你愿意在家里放一台算力比你手机强、联网、而且可能随时被AI远程越狱的设备吗?


【锐评】:Codex黑进三星电视这件事,本质上是AI把"人类已知但懒得动手"的漏洞重新发现了一遍。真正的警示不是AI太聪明,而是厂商的安全设计依然停留在"反正没人细看"的侥幸心理上。

参考链接:
https://blog.calif.io/p/codex-hacked-a-samsung-tv