从充电枪口黑掉特斯拉壁挂式充电桩

admin 2026-05-16 06:00:58 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详细分析了Synacktiv团队在Pwn2OwnAutomotive大赛上通过特斯拉壁挂充电桩充电枪口发起的攻击链,涵盖物理信号分析、硬件架构、固件逆向、单线CAN协议劫持及调试Shell缓冲区溢出漏洞利用。攻击利用固件降级逻辑缺陷植入恶意固件,揭示物联网设备安全防护薄弱性。特斯拉后续通过加入防降级机制修复漏洞。 综合评分: 85 文章分类: 漏洞分析,IoT安全,硬件安全,渗透测试,红队


cover_image

从充电枪口黑掉特斯拉壁挂式充电桩

幻泉之洲

2026年5月14日 11:48 北京

在小说阅读器读本章

去阅读

2025年Pwn2Own Automotive大赛上,Synacktiv团队从充电枪接口入手,用非标准协议与特斯拉壁挂充电桩通信,借助固件降级逻辑漏洞植入恶意固件。这篇文章拆解了整个攻击链:从物理信号分析、硬件架构、固件逆向,到单线CAN协议劫持,最后用调试shell的缓冲区溢出拿下设备。

一个有意思的攻击面

过去几年,我们一直在拆特斯拉的车机系统和安全网关更新机制。翻代码时注意到一个细节:特斯拉汽车竟然能通过充电电缆给壁挂充电桩升级固件。

从用户角度看,这个功能没有任何公开文档,硬件和底层协议也没人分析过。既然它是比赛目标之一,我们提前几个月就盯上了这条路径。

充电桩就那么回事

家用交流充电桩看着复杂,核心其实就是个电动开关。它负责闭合或断开继电器,把电网和车辆接通,本身不做变压或功率调节。通断决策靠各种条件判断,有些还带车桩双向通信,不过大部分家用桩没这么讲究。

两个关键信号:Proximity Pilot(PP,接近导引)和Control Pilot(CP,控制导引),都参考保护地。

PP主要用来检测车辆是否插入,同时告诉车载充电机电缆的额定电流。车端给分压电路一个恒定电压,电缆里有个电阻,阻值对应最大电流。充电枪上的按钮会额外并入一个电阻,触发停止充电。

CP管整个充电流程:

  • 充电桩通过1kHz PWM的占空比告知最大可用电流
  • 车辆用不同阻值的下拉电阻回应状态(已连接、就绪、充电中、故障)
  • 车到网(V2G)模式下,CP线上叠加电力线通信(PLC),跑IP包,能谈功率合同、双向送电

Wall Connector长什么样

特斯拉这款壁挂充电桩支持单相和三相电,最大22kW,装在家里、酒店、停车场都行。它连上Wi-Fi跟特斯拉云通信,手机App可以远程控制。设备上有个NFC读头,目前没任何功能,估计为将来预留。

Wi-Fi在几种情况下切到AP模式:未配置时、长按充电枪按钮几秒、启动瞬间有几秒窗口。SSID和密码印在说明书上,不可更改,厂商认为攻击者拿不到。但后面我们会演示,从充电枪口就能把这组凭据读出来。

拆开看硬件

ZDI公开过详细硬件分析[1]。这里只提关键件:Gen3内部就两块主要芯片——负责Wi-Fi和主应用的AW-CU300模组(Marvell 88MW300 SoC,ARM Cortex-M4),以及管传感器、计量和继电器的STM32。两者通过UART串口用Protobuf来回传消息。

PCB上预留了高通PLC芯片的焊盘,但实际没有贴装,板上也没其他PLC部件。也就是说,标准V2G它压根不支持。特斯拉八成用了私有协议跟自家车通信。

抓波形,看协议

直接怼示波器到PP和CP线上,接上模拟器看结果。

通信开始阶段还是标准的电阻分压信号。但车辆一拉CP线到+6V/-12V表示准备充电之后,CP线上冒出来一个非标准协议。

放大看,这玩意儿居然是单线CAN(SWCAN)。

双向通信确认了,攻击面就打开了。接下来是逆向和挖漏洞。

逆向:先拿到固件

搞固件有三个路子:

  • 特斯拉官网故障排查页面[2]提供离线更新包,原先有个老版本,现在是最新版
  • 特斯拉手机App里嵌了一个旧版
  • 车机固件包里也带着Wall Connector固件,我们积攒了好几个版本

Marvell SoC的固件用了自定义二进制格式,下面这个脚本可以解析:

import sys import struct

data = bytearray(open(sys.argv[1], “rb”).read())

header_len = struct.unpack(“”, data[:4])[0]

通过静态分析和动态调试,我们定位到固件更新逻辑中的关键校验过程。

降级漏洞:调试Shell埋的雷

设备在启动阶段可以从充电接口进入一种“恢复模式”,允许通过CAN总线与外部通信,执行固件刷写。问题出在版本检查上:它只比较当前固件版本号和待刷入的版本号,却没有做最低版本限制,也没有记录上次更新序号。只要你能讲话,就能给它刷一个更低版本。

低版本固件里还留着没删干净的调试Shell,TCP端口直接暴露。这个Shell里提供memwrite命令,理论上能写任意内存,但单独用它容易导致崩溃——我们怀疑这条命令只在关中断时才安全,TCP Shell访问时中断是开着的。

我们换了一个方向:调试Shell解析命令时有个全局缓冲区溢出。输入的命令行被拆成参数放进16个槽位的全局数组,但对参数个数没做边界检查。从第17个参数起,参数字符串指针会写到数组外。紧挨着的就是注册命令表及其函数指针。通过覆盖命令表入口,我们能劫持执行流。

因为固件没有内存保护(所有区域RWX),执行任意代码非常简单:跳到攻击者可控的输入数据上就行。

利用效果和影响

比赛当天一次成功,整个攻击花了大约18分钟,主要瓶颈在SWCAN总线的低速上面。我们用劫持后的代码控制LED闪烁,作为现场演示的可见载荷。

这种充电桩通常接在家庭、酒店或企业网络里,拿下它相当于在内网插了个钉子,横向移动的机会不小。特斯拉后来的补丁加入了防降级机制,禁止回滚固件,堵住了我们所利用的路径。


说到底,充电桩这类设备的安全防护并不比一台路由器强多少,攻击面还多了一根伸到户外的充电枪线。厂家把调试接口藏在降级版本里,相当于给攻击者留了后门。即便没有PLC硬件,私有协议照样可以被逆向和滥用。在物联网设备里,固件降级限制和最小化调试接口,这两条基本防线比想象中更容易被忽略。


参考资料

[1] https://www.zerodayinitiative.com/blog/2024/12/16/detailing-the-attack-surfaces-of-the-tesla-wall-connector-ev-charger

[2] https://www.tesla.com/support/charging/wall-connector/troubleshooting

[3] https://www.synacktiv.com/en/publications/exploiting-the-tesla-wall-connector-from-its-charge-port-connector


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:幻泉之洲 《从充电枪口黑掉特斯拉壁挂式充电桩》

评论:0   参与:  0