安全研究员发现某汽车品牌车联网漏洞,可远程解锁全球车辆
来源标题:Unlocking any car from X brand in most of the world
安全研究员Sam Curry与作者合作,发现某大型汽车制造商的车联网系统存在安全漏洞,可远程解锁该品牌车辆。研究从反编译手机APK、追踪App连接的后端基础设施入手,最终定位到可被利用的互联网服务。漏洞影响范围覆盖全球大部分地区。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
我一直对这个汽车品牌情有独钟。这些年来,我们家拥有过好几辆这个品牌的车,它们为我们服务得非常好。2023年,我从他们那里买了一辆新的四驱/SUV,那是我第一次接触到他们的车联网平台。
我之前研究过类似的平台(参见以往的工作),对它们的安全性持怀疑态度。我怀疑其中存在问题,但生活总是让我无暇去深入探究。今年七月,我与Sam Curry合作,对一家大型汽车制造商的车联网系统进行了安全审查。在本文中,我将他们简称为“该汽车制造商”。
通常提到汽车黑客,人们很容易想到硬件层面,但我的背景主要集中在攻破面向互联网的Web应用和基础设施上。不管硬件部分多么复杂,最终都会连接回某个服务,而这个服务在设计上必须能够从互联网访问。
这一切始于一个简单的问题:当我远程解锁车辆时,App连接的是什么基础设施?为了弄清楚这一点,我下载了APK并进行了反编译,最终还原出了正在发出的API请求。
浏览代码后,主要的连接点似乎是 *.redacted-telematics.com.au 下的资产: dartExecutor.executeDartEntrypoint(createDefault, CollectionsKt.r(gson.toJson(new GlobalConfigParams(false, g11, com.redacted.app.xcapp.a.f69866f, "X", str)), new Gson().toJson(new ApiConfig("https://api.redacted-telematics.com.au", "https://api.redacted-telematics.com.au", "https://api.redacted-telematics.com.au" ...
消费者应用几乎每个部分都会回调 redacted-telematics.com.au。这个域名下还有什么?
运营车联网基础设施相当复杂,管理它需要混合使用管理工具、预发布环境、开发环境和QA环境,以确保客户获得干净的体验。至于这些东西是否应该全部暴露在公共互联网上、任何愿意做一些基础侦察的人都能访问,那就是另一回事了。
有一个资产比其他资产更引起了我的注意。admintool.redacted-telematics.com.au 返回了一个标题为 TEST HARNESS 的页面。谁能抗拒一个包含 admintool 的子域名呢?
访问这个子域名后,呈现的是一个非常朴素的灰色登录界面,在我们还没登录之前就显示了一个登出按钮,这实在谈不上什么品质感。
我喜欢大多数单页应用即使只需要渲染一个登录页面,也会把整个JavaScript包发给客户端。当然,一些更现代的框架会拆分JavaScript文件,只提供必要的部分,但在这种情况下,我们可以仔细梳理这个庞大的JavaScript包,来了解这个“管理工具”到底能做什么。
事实证明,这个管理工具能做的事情相当多。它有一套丰富的API,让汽车制造商的员工能够与客户账户和生产车辆进行交互,而且限制极少。通过还原请求,我们发现这些API中有很多除了JavaScript包中硬编码的API密钥之外,根本不需要任何认证。
例如,我们可以通过电子邮件地址查找用户账户:
但这还不够。如果我们想仅凭车牌号就能解锁他们的任何一辆车,我们需要做得更好。
在澳大利亚,通过各州的车辆注册查询网站,用车牌号获取VIN(车辆识别码)是相当容易的。
幸运的是,有一个API正好可以做到这一点:
那么,我们如何向任意车辆发送指令呢?这个管理工具应该能让我们做到吧?很遗憾,不能。它可以让我们为车辆配置功能、将自己作为次级用户添加到某个用户的账户中,甚至生成远程访问码。但尽管有这些功能,没有一个能真正让我们获得对车辆的远程控制权。
随后,Sam和我花了两周时间深入研究该汽车制造商如何管理其核心身份系统:他们使用的软件、指令的签发方式,以及消费者如何进行身份验证。
当用户通过该汽车制造商移动App的认证流程时,请求会发往 login.redacted-identity.com.au,经过MFA流程后,最终签发一个消费者认证token。这个认证token随后用于对 api.redacted-telematics.com.au 的后续请求(包括REST API和GraphQL)。一旦你拥有了那个认证token,基本上就大势已去了。你可以控制用户的车辆(远程解锁/上锁、喇叭、引擎等)。
所以,如果我们能为任意用户铸造一个token,我们最终就能控制任何人的车联网汽车。这就是我们选择的角度。
该汽车制造商是ForgeRock身份软件(OpenAM/OpenIDM)的重度用户。这是他们认证机制的基石。拉取 *.redacted-identity.com.au 的子域名后,我们很快找到了他们的OpenIDM实例,位于 openidm.redacted-identity.com.au。这个系统管理着该汽车制造商车联网平台上注册的每一个身份。
当我们在梳理 *.redacted-telematics.com.au 下的JavaScript文件时,一切都串联起来了——我们发现了一个极其离谱的第三方JavaScript包,里面竟然嵌入了OpenIDM的管理员凭据 😱:
尽管这些管理员凭据本应是用于他们的预发布环境的,但鉴于我们目前看到的安全卫生状况,我们很确定它们在生产环境中也能用。
进一步审视OpenIDM,我们无法判断该汽车制造商是否知道它有多脆弱。但有一点很明显:他们在WAF规则上投入了大量精力,以阻止访问ForgeRock通常允许通过 /openidm/* 调用的敏感API。
即使知道了源IP,任何对 /openidm/ 的请求都会直接返回Nginx WAF拦截。有人确实花了真功夫来加固这些资产(尽管它们可以从外部访问)。
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。