朋友们又来吃瓜了,这次小红书出现的事故我认为比服务器崩掉严重 100 倍!相当离谱!
事故现场
6 月 18 日下午 1 点,小红书隐藏的后门竟然被人挖出来了!进入 APP 个人主页 => 打开设置 => 连续点击标题多次 => 输入口令 ,然后竟然就进入了开发者模式?!
解释一下,开发者模式是应用中隐藏的高级设置,主要方便开发者在开发、调试和优化应用时,更深入地了解和控制设备系统 。
哦豁,这下完了,普通用户都能进入开发者模式,虽然对普通用户影响不大,但关键在于,任何让普通用户能够访问开发者权限的设计,本身就违反了最基本的安全原则 。
我刚看到这个消息的时候,手里的养肾茶差点喷出来。作为一个写了 9 年代码的老程序员,这种事故我是真的头一次见。
因为这次事故的严重性,我甚至都只敢先给官方反馈、然后等到官方修复后再发布这期内容。。。
进入开发者模式后,小红书的业务划分直接一览无遗!
每个菜单下都有一大堆普通用户根本看不懂的设置,你就知道这玩意泄露出去对用户的影响并没那么大。很多功能都是用来调试程序的,比如什么手动模拟堆栈溢出、闪退、程序崩溃等等,这些即使普通用户发现了,也只能自娱自乐。
但有些设置,在程序员眼里可就没那么简单了。。。
先来看个最炸裂的。在社交菜单的社交数据库下,我可以直接执行 5w 条数据的批量插入,而且竟然 直接把数据库表的结构给曝出来了 ?!我敢打赌,小红书的竞争对手、还有学技术的同学都在疯狂截图。这现场教学,可比任何技术分享都直接。
而且整个开发者模式的菜单和各种眼花缭乱的功能设置,透露着大厂雄厚的技术底蕴,本身就是一个很好的学习案例,相当于 "开源了" 自己开发者工具的架构设计。还有很多功能设置以及调试日志也能不经意地透露出一些信息,有水平的程序员顺着这些信息,就可能把小红书的一些技术实现摸清楚。
这里考虑到暴露太多信息不太好,就不给大家一一演示了。
所以这次事故虽然没有影响用户,但从信息泄露的角度,我觉得是非常严重的。至少我可以给它评一个 P0 级事故 ,屏幕前的朋友们,你们觉得呢?
技术分析
介绍完了事故,我来给大家分析一下背后可能的原因。
唉,大概率是个低级到不能再低级的错误!
首先,这个开发者模式功能相当完整,连数据库表结构都能看到,这种级别的调试功能,只应该在内部测试环境出现,就像厨师在后厨做菜,绝对不应该把做菜的工具端到客人面前对吧。所以一定是 开发环境的代码或配置泄露到了生产环境 ,比如写代码时把 环境配置搞错了 !线上生产环境也开启了开发者工具。
// 错误示例
if (isProduction) {
showDebugPanel = true; // 这里应该是 false!
}
当然,这种可能性有点低,代码里这么写怎么可能通过审核呢?也不至于粗心到这个程度吧?
再结合网友提供的一些信息,IOS 和安卓都是某些版本能进后门、有些进不去,而且被修复的时间和表现不同。这说明什么呢?不同版本的 APP 肯定是独立构建和发布的。
正常情况下,大厂构建 APP 的流水线会有明确的环境区分:
-
开发环境:各种调试工具、后门、日志输出
-
测试环境:部分调试功能,但比开发环境收敛
-
生产环境:所有调试代码都应该被编译时移除或禁用
我觉得使用 流水线构建 APP 时,配置项填错 的可能性更大,可能是某个倒霉的实习生,天真地以为开启这个后门便于线上排查问题呢,所以生产环境使用了开发环境的配置。这样打出来的包名虽然是正式版本的,但里面有一些功能可能是异常的。反正我不相信有人蠢到不小心把内部测试用的包发布到了应用商店。
此外,还有一种可能性,就是做 A/B 测试时写错了配置,把内部员工的标识给了所有普通用户。不然我也不是很理解为啥普通用户拿个弱口令密码就能进入调试?
紧急响应
值得夸奖的是,小红书的应急响应速度还是很快的,截止到我做这期内容,大概 4 个多小时,就不能再通过原密码进入后门了。
诶?明明我们也没更新 APP,为啥突然密码失效了呢?
其实这个很简单,密码不可能写死在 APP 本地,一定是存在服务端数据库或者配置中心里,只要修改下保存的密码,自然无法登录。不幸中的万幸啊,要是真把密码写死在了 APP 本地,我不更新 APP,不就一直是开发者了?好家伙,免费的测试劳动力是吧?
最后想说的话
说实话,作为程序员,我对小红书团队还是有点同情的。这种事情在大厂其实并不少见,只是很少被用户发现而已。话说这次怎么能被发现的?
唉,到底是怎么了,这么大的团队还会犯这么低级的致命错误?世界真是一个巨大的草台班子。
这也提醒我们所有技术人:再小的配置也要谨慎,高端的 Bug 往往只需要最简单的代码。
我估计这个 618 晚上,小红书的技术朋友们又不好过了呀。。。
如果你也是程序员,欢迎在评论区聊聊你对这次事故的看法;如果你是普通用户,希望我的分析能帮你理解技术故障背后的原理,吃瓜吃的更懂。
记得点赞关注鱼皮,下次再有翻车,我继续带大家从技术角度吃瓜!好吧,我希望世界和平~