CVE-2022-23126
详情:https://medium.com/@david_colombo/how-i-got-access-to-25-teslas-around-the-world-by-accident-and-curiosity-8b9ef040a028
2022年1月份,年轻黑客宣称远程控制了25 辆特斯拉
其实就是这个cve的来源,而真正的漏洞来自于https://github.com/adriankumpf/teslamate暴露在外网端口上
teslamate是Tesla 的功能强大的自托管数据记录器
特点:
- 通过Elixir编写
- 数据存储在Postgres数据库中
- 使用Grafana进行可视化和数据分析
- 车辆数据发布到本地MQTT Broker
先从作者的文章来看看这个漏洞的细节
信息泄露
访问dockerfile默认暴露的4000端口可以得到特斯拉地址信息
但因为使用了grafana,如果开启了匿名访问(即免登陆访问),且3000端口也暴露在公网,那么grafana就会泄露大量数据如:特斯拉去过的地方,充电的地方,当前位置,通常停放的地方,驾驶时间,旅行速度,导航请求,软件更新历史,甚至特斯拉周围的天气历史等等多得多。
Grafana
Grafana 是一个监控仪表系统,它是由 Grafana Labs 公司开源的的一个系统监测 (System Monitoring) 工具。它可以大大帮助你简化监控的复杂度,你只需要提供你需要监控的数据,它就可以帮你生成各种可视化仪表。同时它还有报警功能,可以在系统出现问题时通知你。
修复措施
也就是将默认开启的匿名访问关闭
进一步获取Tesla 用户API 密钥
grafana确实保存了 API 密钥,它还存储了所有其他数据。API 密钥既不单独存储也不加密。但需要Grafana Explore来运行自定义查询。这需要身份验证(经过测试,匿名访问不需要身份验证)。
然后就是利用默认密码(admin/admin)/弱口令来进行身份验证,然后得到查询权限
如何访问世界各地的随机特斯拉
- 在互联网范围内搜索 TeslaMate 实例(例如搜索 MQTT 代理)。
- 确保它们使用不安全的默认 Docker 配置运行(这应该现在已经修复,因为用户请尽快拉取最新版本)。
- 转到端口 3000 以访问 Grafana 仪表板。
- 使用默认凭据登录(当然只有在明确授权的情况下才能这样做)。
- 转到资源管理器选项卡。
- 使用查询生成器提取 API 并刷新令牌。
- 玩特斯拉(当然仅限于您拥有的车辆),玩得开心。
使用 Tesla API 令牌可以做的事情包括但不限于:
- 解锁车门。
- 打开窗户。
- 开始无钥匙驾驶。
- 与特斯拉分享视频。
- 更改加热器/冷却器设置。
- 按喇叭和闪烁的灯光。
最终结果是特斯拉撤销了数千个密钥,所以这可能是一个更普遍的问题。
实例复现
互联网一个实例(外国)
获取tesla key
4000端口默认开放,访问可以得到地理位置等一些信息
访问3000,开启了匿名访问
那么可以直接得到更多tesla信息
然后访问explorer数据库查询接口通过sql语句查询获取key
curl http://xxxx:3000/api/tsdb/query
{"queries":[{"refId":"A","intervalMs":60000,"maxDataPoints":1843,"datasourceId":1,"rawSql":"SELECT\n id AS \"time\",\n *\nFROM tokens\nORDER BY 1","format":"table"}]}
如果,没开启匿名访问,需要尝试默认密码或者弱口令,成功登录后一样获取信息或者使用explorer进行查询key
得到数据库中的Tesla key
access:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
前面加bearer (也就是jwt)然后访问Tesla官方api接口
获取车辆列表
得到车辆id(注意这里是id不是vehicles_id)
再获取车辆信息
官方还提供了对车的种种操作比原文作者说的更多
这里未授权就不进行深入尝试了
后记
复现下来,这是一个tesla的开源项目的漏洞和tesla本身并没有什么联系,漏洞利用难度也很低,只是web应用层的简单利用,但是影响也不小。即使在现在互联网上还是有很多存在漏洞的实例。