夜雨聆风学习资料网

ARTICLE · 1279083

一条不用点的短信能废掉安卓:这口子开了 16 年零 7 个月

一条不用点的短信能废掉安卓:这口子开了 16 年零 7 个月

一条短信让手机循环重启到没法用,全程不需要你点任何东西。

这不是新一代钓鱼链接,是一段 2009 年就写进安卓的老代码。10 月 29 日,安全研究员 Mark B 把它公开在 smsofdeath.com 上,页面标题就叫 SMS of Death,短信死神。黑客新闻(Hacker News)当天 308 分、171 条讨论,中文圈到 10 月 30 日上午还是空白。

我把安卓源码的提交记录翻到了 2009 年:从口子成形,到 6 月被堵上,中间隔了 6068 天。

它怎么废掉一台手机

先说通道。短信除了发文字,还带着一个 2G 时代传下来的老功能:WAP Push,运营商用它给你推链接、推配置,功能机年代的产物。今天你在微信里聊一切,但这个通道还躺在每台插着 SIM 卡的安卓手机里,随卡激活。

问题出在安卓解析这类消息的代码上。整条攻击链四步:

环节
发生了什么
收到一条 WAP Push 短信
系统开始解析,要先读「头部长度」字段
读长度
这段 2009 年的代码不做范围检查,直接拿来当数组大小
头部长度被塞了特殊值
转成整数后是负数:负 2147483648
给负数开内存
电话进程 com.android.phone 的主线程当场异常,被系统杀掉重启

com.android.phone 是你手机接打电话、收发短信的中枢。你的手机可能正在通话,可能正等着一条验证码。屏幕上没有通知,收件箱里没有记录,连发件人号码都不显示。整个过程零点击、零感知。

后果有多重?研究者的实测数据(Pixel 9 的 2026 年 4 月固件加多款三星手机,复现率 100%):

症状
数值
口径
通话当场断线,含紧急呼叫
每次触发即断
研究者自测
无服务窗口
每次 1 到 2 秒
研究者自测
设备长时间不可用
累计约 20 条
研究者自测

真正狠的是后手。你的手机崩在回执发出之前,运营商那边的记账是「未送达」,于是按规矩重发。手机一活过来,又被同一条短信打死。研究者测下来,一条毒短信能造成最长一周的断续故障。黑客新闻上一位读者的解释很直白:

手机在能回执之前就噎死了,运营商只当你没收到,于是接着发。

还有一层。这条消息会留在系统待处理队列里,每次开机都重试一次。安卓的自救机制发现电话进程反复崩溃,会把手机重启进恢复模式,大约每 90 秒一轮。普通人面对循环重启,能做的基本只剩恢复出厂设置。研究者本人写过自己的恢复经历:删掉短信数据库,2 分钟后运营商把消息又重发了回来。社区后来找到的解法,是用电脑连手机手动删掉队列里那几行记录,普通用户做不到。

我去翻了它的出生证明

这个漏洞是新挖出来的,但这段代码不是。我去翻了它的出生记录,过程比想的曲折:谷歌官方的安卓源码站从这台服务器死活连不上,常用的 GitHub 镜像仓库整个没了,最后在 LineageOS 保存的完整历史里翻到。

记录很清楚。

2009 年 2 月 20 日,安卓公开仓库第一次导入这份文件,「读长度、强转、不检查」的写法就在里面,那时安卓才 1.5。2009 年 11 月 4 日的一次提交补上了按这个长度开内存的代码,负数口子从这天起成形。2012 年 7 月,这段代码搬进电话模块,之后 14 年没人动过它的逻辑。

一条短信漏洞从出生到修复的时间线

16 年零 7 个月。这期间它跟着安卓从 1.5 一路活到 17。你的第一台安卓手机里有它,你现在用的这台里也有。

修复只有 2 行,而且不是修漏洞

5 月 5 日,Mark B 通过谷歌的漏洞赏金项目报了上去。6 月 16 日,谷歌合入修复。

我把修复的提交记录拉出来看了 diff,结果有点意外。

真正的「修复」只有 2 行:原来代码里已经有一层异常捕获,但只抓数组越界,抓不住这次的负数异常。谷歌的改法是把捕获范围放宽,让任何运行时异常都不再炸掉电话进程。

配套的还有另一处 13 行的改动,在我看来这才是点睛之笔:一旦解析崩溃,就把这条毒短信从待处理队列里删掉。断掉的不再只是这一次崩溃,而是「重发、再崩、重启、再重试」的整个循环。另外补了 149 行测试。

修复前
修复后
异常捕获
只抓数组越界
抓所有运行时异常
崩溃后果
电话进程死亡,通话断
记一条日志,进程活着
毒短信去向
留在队列反复重试
当场从队列删除
开机表现
约 90 秒循环重启
正常开机

有意思的地方在这。研究者给谷歌建议的方案是老老实实加范围检查:长度是负数或者超过消息本身,直接拒收。谷歌没用这个方案,选了「崩了也别死,顺便删掉祸根」。

我理解这是务实的选择。那段 2009 年的解析代码跑在全世界的机型上,入口不止一个,与其逐个检查每个入口,不如让整个解析环节变得摔不死。等于说,往后解析环节不管出什么幺蛾子,电话进程都死不了。治的是一类,不是一个。代价是,非法的消息至今仍会被解析,只是不再致命。

谁还裸着

修复随 10 月安卓安全更新下发,但名单只有 Android 14 到 17。

Android 14 是 2023 年 10 月发布的系统。也就是说,2023 年 10 月之前出厂、后来也没升上 14 的机器,这次补丁永远不来。

安卓各版本能否拿到本次补丁

想想身边有多少这样的设备:还在用老旗舰的人,买给爸妈的千元机,车里那块带 4G 的车机屏。黑客新闻的讨论里有人专门提醒,车机和支付终端这类设备更新周期最长,是最可能带着老安卓一直跑下去的。

自查只要 30 秒:设置,关于手机,找「Android 安全补丁级别」。看到 2026 年 10 月 1 日或更晚,你是安全的;看不到这个日期,你还在窗口里,而窗口不会自己关上。

三个快问快答

不点链接为什么也会中? 链接要你点,是因为陷阱在网页里。这次的陷阱在短信本身的头部字段里,手机收到、系统解析的那一瞬就触发了,你的手指从头到尾没用武之地。

能把这个通道关掉吗? 关不掉。WAP Push 的解析在系统短信层里,没有开关。研究者建议的缓解只有一条:装上 10 月安全更新。

苹果手机没事吗? 这次出事的是安卓的电话框架代码,苹果设备不走这段代码。但别把「这次没事」当成「永远没事」,安卓的历史教训恰恰是:没人看的旧通道,迟早出事。

16 年里的第三回

SMS of Death 这个名字不是新造的。2010 年 12 月,两位安全研究者就用它命名过一组功能机时代的短信漏洞,一条短信让手机断网死机,那时的主角还是功能机。2017 年 1 月,同样的 WAP Push 通道咬过三星,一条短信就能改掉手机的网络配置。

同一条通道,16 年里第三次上新闻。功能机死了,3G 退网了,WAP 早就没人提起,这段处理代码却跟着每一代安卓活到今天。

谷歌的赏金定性也值得记一笔。按研究者 Mark B 的转述,谷歌最初的回复只有一句:

临时拒绝服务,不够赏格标准。

修复倒是照做了。黑客新闻上争议最大的也是这条:这到底是致命漏洞,还是又一个会被慢慢修掉的老 bug?

我的看法没这么摇摆。判断一个漏洞的分量,我有个笨标准:它离你的通话有多近。

数据金句卡

危险从来不在新代码里,新代码有人盯着。危险在那些送走了三代手机、没人再看一眼的旧通道里,它们安安静静,直到某天变成一条短信。

你的手机安全补丁级别是哪一天?设置里翻一眼,评论区报个数。

(数字与事实出处:漏洞机制、影响与复现数据来自 smsofdeath.com 公开报告,2026-10-29;代码出生与修复细节为本文对 AOSP 提交记录(LineageOS 镜像,commit 15ab3eae、d5b325aa、71d68ae 等)的逐版本核对,2026-10-30 自查;补丁覆盖范围来自谷歌安卓安全公告 2026-10-01,本机拉取原文计数;黑客新闻数据取自 Algolia API,2026-10-30 快照;SMS of Death 历史见 Schneier 博客 2011 年 1 月及 The Register 2017 年 1 月报道。)

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料