一名 2014 年款 Renault Latitude 的驾驶员发现,在夏令时变更后,车辆仪表盘的时钟失去了同步。在调查设置菜单时,他们发现“设置时间”选项完全缺失。通过对该单元固件(一个运行 Linux 2.6.28.10 内核的 TomTom Carminat LIVE 系统)进行逆向工程,车主确定该导航系统被设计为除非插入正版导航 SD 卡,否则就会隐藏时间设置菜单。该系统使用数字版权管理(DRM)来验证 SD 卡的唯一 ID(CID)和签名,从而有效地锁定了未拥有官方地图的用户。

显示“未找到地图”错误消息的汽车导航屏幕。
当未检测到正版 SD 卡时,导航系统显示错误消息。blog.nns.ee

此视觉效果展示了系统在验证导航 SD 卡失败时的行为。

该系统的安全架构为未经授权的访问设置了多重障碍。大多数分区都以 `noexec` 权限挂载,防止外部 SD 卡上的脚本或二进制文件运行。此外,虽然车主在脚本解析器中发现了一个路径遍历漏洞,允许将 ASCII 文本写入任意位置,但根文件系统是以只读模式挂载的。这意味着即使可以将命令写入磁盘,也无法执行或直接用于修改系统配置文件。这些保护层旨在防止地图盗版,但导致了一个即使没有官方硬件也无法进行基本时钟调整的系统。

为了绕过这些限制,车主采用了内核漏洞利用中常见的技术:操纵 `core_pattern` 文件。通过利用路径遍历漏洞将特定字符串写入 `/proc/sys/kernel/core_pattern`,他们指示内核在进程崩溃时执行一个有效负载脚本。他们随后通过运行 `/bin/dbus-monitor` 来触发崩溃,该程序将无法连接到系统总线并触发 SIGABRT。这迫使内核以 root 权限执行位于 SD 卡上的脚本,成功绕过了 `noexec` 挂载限制,并最终允许车主访问隐藏的时间设置菜单。虽然这次破解实现了目标,但它凸显了一种地图盗版保护机制为基本用户功能制造巨大阻碍的设计缺陷。

显示执行主脚本提示的汽车主机显示屏。
在触发内核漏洞后,主机显示屏提示用户执行脚本。blog.nns.ee

这张图片展示了在主机显示屏上成功执行有效负载脚本的情况。