游客发表
乐乎(Lofter)的安全搜索接口曾经把用户邮箱和手机号一起吐出来。这不是漏洞乐乎段子。2021年那会儿,安全我一个做安全的漏洞乐乎朋友半夜给我发消息,说“你赶紧去试试乐乎的安全某个API,返回的漏洞乐乎数据里带用户绑定信息”。我试了,安全果然。漏洞乐乎请求一个公开的安全搜索关键词,返回的漏洞乐乎JSON里明晃晃躺着脱敏不彻底的手机号、邮箱、安全甚至部分用户的漏洞乐乎注册时间。你搜一个标签,安全它送你一串身份信息。漏洞乐乎这叫什么?安全这叫买泡面送金条,只不过金条是别人的。
问题出在接口设计上。乐乎的搜索接口没有做字段级的权限过滤,前端只需要展示昵称和头像,但后端把整个用户对象序列化后直接扔了回来。开发图省事,安全背锅。这种“过度返回”在Web开发里是老毛病了——SELECT *一时爽,出事火葬场。更离谱的是,这个接口不需要登录就能调用。未授权访问加上数据过度暴露,两个漏洞叠在一起,效果拔群。
我后来跟几个做后端的朋友聊这事,他们反应出奇一致:“我们以前也这么干过。”有个哥们儿说他们早期项目里,用户详情接口返回了password_hash,前端不显示,但网络面板里看得一清二楚。另一个说他们返回过internal_notes字段,里面写着“这个用户是傻逼,别理他”。你看,漏洞不光是技术问题,还是人性问题。写代码的人觉得“反正前端不展示”,但攻击者不看前端,看的是响应体。
乐乎这个事后来被提交到漏洞平台,厂商修了。修的方式也很典型:加了个字段白名单,只返回nickname、avatar、id。完事。但根子上的问题没解决——他们的API设计缺乏统一的安全规范。今天修了搜索接口,明天可能又冒出个推荐接口、评论接口、私信接口。打地鼠游戏,累不累?
我自己后来养成一个习惯:每次调第三方API,先拿Burp Suite抓包看看返回了什么。有次调某个天气接口,返回里居然带了服务器内网IP。还有次调某电商的物流接口,返回了快递员的手机号和工号。这些信息对普通用户没用,但对攻击者来说,是拼图的碎片。内网IP能帮你画网络拓扑,快递员工号能帮你社工。安全漏洞从来不是孤立的,它们像乐高积木,单看一块不起眼,拼起来能盖一座楼。
说回乐乎。这个漏洞的CVSS评分大概在5.3左右,中危。不算致命,但足够恶心。你的邮箱和手机号被陌生人批量拉取,拿去撞库、发垃圾短信、搞诈骗,你连怎么泄露的都不知道。更麻烦的是,这种漏洞很难被用户感知。你不会收到通知,不会看到异常登录,你的数据安安静静地流出去,像下水道里的水,无声无息。
所以每次有人问我“我的数据到底安不安全”,我都说:别问,问就是不安全。你唯一能做的,是给每个平台用不同的密码,开两步验证,别在A平台用B平台的邮箱注册。至于平台那边——他们什么时候能把“最小权限原则”刻进代码规范里,什么时候才算真正把用户当人看。在那之前,你我的数据,不过是他们JSON里的一串字符,随时准备被下一个SELECT *捞出来。
友情链接