1月11日,一位来自德国的19岁年轻黑客突然发推表示,自己成功地控制了10个国家的20多辆特斯拉的。
随后,这个数字很快就增加到了13个国家和超过25辆特斯拉。
简而言之,他能远程让被黑掉的特斯拉汽车执行:
- 解锁车门
- 打开车窗
- 启动无钥匙驾驶
- 分享视频到特斯拉
- 调整空调模式和温度
- 控制喇叭和灯光
David Colombo表示,虽然没有取得任何转向、加速、刹车和其他驾驶动作的权限,不过理论上可以通过漏洞开启召唤模式让车辆自动移动。
最近,他在个人博客上公布了自己如何做到的技术操作流程、前因后果。
不如我们先来看看那些被「黑」了的特斯拉们都到过哪里。
一辆特斯拉Model Y在加州
一辆特斯拉在欧洲
一辆特斯拉Model 3在比利时(大部分时间)
一辆特斯拉Model 3在英国(数过伦敦而不入)
一辆特斯拉Model Y在佛罗里达州
一辆特斯拉Model Y在加拿大的基奇纳及周边地区
Colombo在几个小时内就找到了来自13个国家的25辆以上的特斯拉。包括德国、比利时、芬兰、丹麦、英国、美国、加拿大、意大利、爱尔兰、法国、奥地利和瑞士。
还有大约至少30多个来自中国,不过Colombo非常谨慎,并没有对这些车下手。
漏洞如何被发现
事情的起因要从去年说起,Colombo正准备与一家来自巴黎的SaaS公司客户,讨论安全审计的问题。
然后,他的好奇心就被激发了。
在正式见面之前,他想偷偷看一下这家公司的基础设施,比如获得一些关于他们使用什么服务和平台的基本信息。
Colombo想着,如果很快能找到一些过时的软件或暴露的备份数据库,就可以在会议上向他们展示了。
在做一些基本的子域列举时,他发现了一个「backup.redacted.com」域名。
但除了一个普通的「this works」页面外,没有任何东西在运行。
在进行了一个非常简单的nmap扫描之后产生了一些结果,但只是发现了remoteanything和一些「游戏服务器」端口。
事情似乎有些奇怪。
Colombo尝试通过telnet连接,但没有成功。
不过,当通过浏览器访问时,就会发现这些端口竟然指向了——TeslaMate。
现在看起来,就有趣多了。
然而,尝试访问Dashboard时,只给了一个错误,并没有成功。
但是,好奇心再一次发挥了作用。
TeslaMate是特斯拉的一个自我托管的数据记录器,而且它是开源的。
理论上,它只用于提取数据和存储以及显示,并不能运行任何命令,比如使用TeslaMate解锁车门。
通过查看Docker文件,Colombo发现它还带来了一个Grafana的安装。
端口5555,访问了一下试试?
果然成了。
进入之后Colombo看到了大量的数据,包括特斯拉途径的路线、曾充电位置、目前的位置、惯常停车位置、车辆行进时段、出行的速度、导航请求、软件更新的历史,甚至特斯拉汽车周围的天气历史等等。
这真是......不妙啊。
Colombo表示,显然自己不应该从这个端口知道,这家SaaS公司的CTO去年去哪里度假了。
那么,如果TeslaMate能够提取所有的车辆数据,它可能也有办法向特斯拉发送命令?
在产生这种想法之后,Colombo花了点时间阅读TeslaMate的源代码,以便弄清楚认证是如何进行的、特斯拉的证书如何在应用程序中流动、以及它在哪里存储用户的API密钥。
结果有些出乎意料,TeslaMate将API密钥保存在了和所有其他数据相同的位置,既没有单独存储,也没有加密。
那么,如果Grafana可以访问车辆数据,而API密钥存储在车辆数据一边,Grafana可以读取和输出API密钥吗?
用Grafana Explore来运行自定义查询试试?但这需要认证,真是无奈。
不过,有没有听说过这个遥远的网络安全问题叫做「默认密码」?
是的,TeslaMate Docker的Grafana安装时带有默认凭证。
也有可能在没有通过Grafana端登录的情况下,以未经授权的匿名用户身份查询token。
试着用admin:admin登录,果然成功了。
为Grafana(Explore)建立一个查询字符串,并查询API token,这之后就没有什么神奇了。
所以说,软件用默认值初始化的默认值是为了让管理员方便去更改的,实际上并不安全。
开发者通常选择默认值,让软件在开箱后尽可能地开放和易于使用。然而,当默认值不安全而管理员不改变它时,这种便利是有代价的。
获得对世界各地的随机特斯拉的访问的过程:
- 在互联网上搜索TeslaMate实例
- 确保它们以不安全的默认Docker配置运行
- 转到3000端口,访问Grafana Dashboard
- 使用默认凭证登录(当然,只有在明确授权的情况下才可以这样做)
- 转到资源管理器标签
- 使用查询生成器来提取API并刷新token
- 愉快地玩特斯拉吧
除了登录之外,在漏洞的加持下,即便是车主改变了管理密码,依然可以通过Grafana的API端点,以未经授权的匿名Grafana用户身份对TeslaMate数据源运行任意请求。
不过这只影响到TeslaMate docker,而且现在补丁也已经发布了,也就是1.25.1版本。
那么,如果发现了这样的漏洞,该怎么做?
你应该将漏洞报告给负责的团队。
如果找不到又该怎么办呢?
那就发条推特吧~
抛开玩笑话不谈,Colombo表示,自己发那条推特只是因为很沮丧。
花了一整天寻找后,只能联系到两位特斯拉车主并且告知他们。
另外,对于这条推文可能引起的所有混乱和猜测,Colombo深表歉意。
然后……这条推特就火了。
为了尊重受影响的特斯拉车主的隐私,根据他的要求删掉了车主身份信息。在这篇文章中,受影响的特斯拉的名字更改为「蓝色巨人」。
多亏了这条推文,Colombo找到了另一位来自爱尔兰的特斯拉车主。
然而,车主多次重置特斯拉帐户密码后,也没能撤销API token。
好在经过了4小时的不懈努力,终于通过一个未被记录的API端点撤销了密钥。
联系特斯拉
当Colombo发现没有合法的途径找到其他受影响的车主之后,便和特斯拉产品安全团队取得了联系。(推特上有网友「支招」,在特斯拉汽车屏幕上放「你被黑了」的视频)
特斯拉表示他们正在调查这个问题,然后在不久之后就撤销了所有受影响的和遗留的token。
据特斯拉安全团队称,截至2022年1月13日,所有被影响的用户应该都收到了电子邮件通知。
所以如果特斯拉车主曾经安装过TeslaMate,就去检查一下你的邮箱。
然而,特斯拉安全团队第二次撤销token后,一些特斯拉访问token仍然公开在互联网上,可能是因为用户又登录了易受攻击的TeslaMate.
因此,Colombo写了一个Python脚本来自动从易受攻击的实例中撤销暴露的访问token。
坏消息是,第3版token好像没有办法撤销。
发布漏洞
鉴于有相当多的特斯拉车主受到影响,所以Colombo申请获得该漏洞的CVE编号。
CVE-2022–23126 描述:
「TeslaMate 1.25.1 之前的默认 Docker 配置允许攻击者获取受害者生成的token,从而使他们能够通过 Tesla 的 API 执行未经授权的操作,例如控制车辆的某些关键功能或泄露敏感信息。」
需要理解的是,这是一个开源项目,随着时间的推移而发展,这样的事情是有可能会发生。
在此,Colombo也给出了一些建议:
就是别把重要物件连上互联网。这很简单。
如果你必须把一些东西联网,一定确保它是被修改到安全设置程度,而不是用默认设置裸奔,默认设置可能会不安全。
完整的时间线
以下是David Colombo记录的事件时间线,所有时间都是欧洲中部时间:
2021–10–29:第一次听说这件事(发现了第一个被影响的第三方案例)
2021–10–29:联系车主
2021–11–01:记录下案例
2022–01–09:全网搜索被影响的第三方案例
2022–01–10:发现在12个国家中有超过20例
2022–01–10:试图找到车主的身份信息
2022–01–10:我把这件事汇报给两个我能找到的特斯拉车主
2022–01–10:我发了条推特,因为我不能确认更多的特斯拉车主
2022–01–10:这条推特火了
2022-01-10:已知的案例增加到了13个国家中超过25例
2022-01-10:我和知名网络安全专家John Jackson交流,他推荐我去搞一个CVE-ID,如此一来这件事就可以更有效的被处理了
2022-01-11:去MITRE申请一个CVE-ID,并提供了一些初步信息
2022-01-11:准备了一份详细的记录,描述整个情况
2022-01-11:联系了特斯拉生产安全组,让他们尽快告知被影响的车主
2022-01-11:联系了第三方的维修人员,让他们尽快准备一个补丁
2022-01-11:和特斯拉生产安全组共享有关被影响的车主的更多信息
2022-01-11:MITRE批准了我的CVE-ID申请。CVE-2022–23126待定
2022-01-11:特斯拉生产安全组表示他们正在调查这些案例
2022-01-12:第三方的维护人员发布了1.25.1版本,其中有一个部分补丁
2022-01-12:特斯拉在协调世界时6:30,欧州中部时间7:30,召回了数千个潜在被影响的API token
2022-01-12:特斯拉强制一些被影响的用户重置他们的密码
2022-01-12:等待特斯拉生产安全组的进一步回复
2022-01-12:和第三方维护人员一同开发更多潜在的补丁(加密关键访问token)
2022-01-13:特斯拉生产安全组表示他们召回了所有受影响的API token,并且通过邮件和推送的通知告知了所有被影响的特斯拉车主
2022-01-13:有些之前受过影响的特斯拉车主还在受影响
2022-01-18:再一次和特斯拉交涉,等待特斯拉生产安全组的进一步通知
2022-01-19:特斯拉召回了另一批访问token
2022-01-10:发现了另一处漏洞,并且做了汇报,这次的漏洞直接影响了特斯拉的API
2022-01-22:特斯拉承认了该处新增漏洞,并且在生产中进行了补救
2022-01-24:公开发表这篇记录
何许人也?
按David Colombo的自述,他现年19岁,家住德国巴伐利亚州,离慕尼黑车程两小时的地方。
Colombo自称10岁开始写码,从此扎进网络安全的世界里。15岁实际辍学,形式上是向德国商务部申请了每周只有2天去学校点卯的特殊许可。
实际上学校也不太愿意管他,毕竟他真上学时,学校的信息大屏幕经常无故黑屏故障。
David Colombo现在是个工具现代但形式古典的小作坊主:开了家「Colombo科技」的一人作坊式公司、自学编程手艺、自己招揽白帽黑客业务。
顾客包括从红牛公司到美国国防部的各种需要验证网络安全的机构实体。