【白帽故事】我是如何‘竊取’世界各地20多輛特斯拉汽車的
聲明:文章中涉及的程序(方法)可能帶有攻擊性,僅供安全研究與教學之用,讀者將其信息做其他用途,由用戶承擔全部法律及連帶責任,文章作者不承擔任何法律及連帶責任。 |
背景介紹:
一位德國19歲小伙兒David Colombo偶然發現竊取特斯拉汽車的“方法”(提示:這并不是特斯拉基礎設施中的直接漏洞所導致)。
該漏洞可以使黑客能夠遠程執行命令,比如“禁用哨兵模式”、“開車門”、“打開車窗戶”,甚至是“啟動無鑰匙駕駛”模式。
下面是其中一輛被‘竊取’特斯拉汽車的屏幕截圖:

讓我們來看看這位白帽小伙兒是如何發現該漏洞的。
19歲白帽
這位19歲的白帽小伙兒名叫David Colombo(大衛科倫坡),今年19 歲,來自德國美麗的巴伐利亞州。
他在 10 歲左右開始編碼,然后不知不覺中迷上了網絡安全。
15 歲時他基本處于輟學狀態(得到德國商會的特別許可,每周只上去學校2天),為了在網絡安全領域進行更多的自我教育,于是他創辦了一家旨在改善當前網絡安全形勢的公司。目前該公司已正式更名為Colombo Technology,公司主要提供安全審計、滲透測試和網絡安全咨詢等服務。
也就是從15歲起,這位小伙兒在 RedBull、美國國防部和許多其他 NDA 下的組織中發現了各種安全漏洞。
故事的開始
事情的起因是從去年開始的,當時這位白帽小哥正要跟一家來自巴黎的 SaaS 公司洽談安全審計的事宜。
然而好奇心涌上心頭,白帽小哥迫不及待地想看一看他們的基礎設施情況,以獲得有關他們使用哪些服務和平臺的基本信息,當時他想,也許可以很快找到一些過時的軟件或暴露的備份數據庫,以便在下一次會議上向他們公司展示。
在做子域枚舉時,白帽小哥發現了一個backup.redacted.com子域,但該網站除了一個簡單的“this works”內容外,幾乎沒有任何東西在運行。
難道就這樣結束了嗎?如果到此為的話,也就沒有今天的故事了。于是白帽小哥對該網站進行了端口掃描:

嘗試telnet失敗:

但是在瀏覽器中訪問這些端口,有時就會出現一些有趣的事情:

TeslaMate
這個頁面看起來有趣多了,但嘗試訪問儀表板或任何東西后,發現都無法正常工作。

但是這個頁面可以看到一輛特斯拉停在哪里,白帽小哥本想就這么上報該事件。
但好奇心再次涌上心頭,因為白帽小哥也是特斯拉的鐵桿粉絲,所以他很想深入搞清這件事。
TeslaMate是一個相當酷的應用程序,一個特斯拉的自托管數據記錄器,而且它是開源的,你可以在GitHub上找到它。
它用于拉取數據、存儲和顯示數據,你不能執行任何命令,如使用TeslaMate儀表板解鎖車門等。(但是后面我們將了解如何利用它來執行命令)
通過查看Dockerfile,會發現它還附帶了Grafana安裝,端口5555,嘗試訪問看看:

居然能夠查看到大量數據,包括特斯拉在哪里、充電在哪里、目前的位置、通常停在哪里、什么時候開車、旅行的速度、導航請求、軟件更新歷史、甚至是特斯拉周圍的天氣等等。
更新:TeslaMate版本1.25.1已修復了該問題,現在已經禁止未經授權的訪客訪問這些敏感信息的Grafana儀表板。
緊接著好奇心再次來襲,白帽小哥很想知道TeslaMate是怎樣工作的,因為…如果它能夠提取所有的車輛數據,它是否也有辦法向特斯拉發送指令呢?
在有了上面這個想法后,他開始閱讀TeslaMate的源代碼,以弄清楚身份驗證是如何工作的,特斯拉憑證是如何通過應用程序以及它將用戶的API密鑰存儲在哪里。
長話短說吧,它確實保存了API密鑰,還存儲了所有其它數據,API密鑰既不單獨存儲,也不加密。
那么,如果Grafana可以訪問車輛數據,并且API密鑰存儲在車輛數據‘隔壁’,那么Grafana不就可以讀取和輸出API密鑰嗎?
Grafana Explore可以運行自定義查詢,很可惜需要身份驗證......
大家應該都聽過一個“默認密碼”的‘上古’安全漏洞,是的,TeslaMate Docker的Grafana安裝也帶有默認密碼。
可以在不通過Grafana端點登錄的情況下,以未經授權的匿名用戶身份查詢令牌(參見下面的CVE2022-23126以及在私下披露之后發布的TeslaMate補丁v1.25.1和下面進一步包含的屏幕截圖)。
白帽小哥嘗試用admin:admin登錄,在這之后,為Grafana(Explore)構建查詢字符串并查詢API令牌。
在這點上,白帽小哥能夠完全確認,確實有可能被一些外部攻擊者執行這些步驟,并最終控制CTO的特斯拉汽車。
白帽小哥認為這是一個嚴重的安全問題,應該沒有人能夠解鎖SaaS公司的首席技術官的特斯拉,于是白帽小哥立即聯系了該單位并解決了該問題。
TeslaMate在默認情況下是不安全的,這意味著如果使用默認的Docker配置部署,或者使用默認配置的Docker映像,那么TeslaMate就會暴露并受到此類攻擊。
互聯網上有更多這樣的例子嗎?
雖然白帽小哥很忙,但他無法打消這個探索的念頭,于是他再一次在互聯網上搜索暴露的信息,只不過這一次他可以進入車輛。
另一個讓白帽小哥再次開啟探索的是,可以無需用戶密碼來發出無鑰匙啟動的API調用。

如何訪問世界各地的隨機特斯拉?
大致分為以下步驟:
- 在互聯網范圍內搜索TeslaMate實例(例如搜索MQTT代理)
- 確保它們在不安全的默認Docker配置下運行(這個問題現在應該已經修復,因為用戶已獲取了最新版本)
- 通過3000端口訪問Grafana儀表板
- 使用默認憑據登錄(當然,只有在授權的情況下才能這樣做)
- 轉到資源管理器選項卡
- 使用查詢構造提取API并刷新令牌
- 開心地玩一輛特斯拉吧(當然,最好是只玩你自己的特斯拉)
作為登錄的替代方法,例如,如果所有者更改了管理員密碼,還可以通過Grafana API以未經授權的匿名Grafana用戶身份向TeslaMate數據源運行任意請求,具體參見CVE-2022-23126

從Grafana查詢特斯拉API令牌,無需提交憑證或登錄Cookie
而使用特斯拉API令牌可以做的事情包括但不限于:
- 打開門鎖
- 打開窗戶
- 開始無鑰匙駕駛
- 將視頻分享給特斯拉
- 更改加熱器/冷卻器設置
- 按喇叭和閃燈
它甚至有可能打開或關閉一些車庫門(如果車庫門連接到暴露的特斯拉,可參閱https://tesla-api.timdorr.com/vehicle/commands/homelink)
完整名單可在https://tesla-api.timdorr.com/ 找到
下面一些截圖這位白帽小哥在世界各地發現的暴露特斯拉:







白帽小哥在幾個小時內就發現了來自13個國家的25輛以上的特斯拉,包括德國、比利時、芬蘭、丹麥、英國、美國、加拿大、意大利、愛爾蘭、法國、奧地利和瑞士。至少還有大約30多輛來自中國,但白帽小哥為了不觸碰我國的網絡安全法,所以就沒有碰它們。
因為這件事,這位19歲的白帽小哥的推特也在短時間內被大量網友關注、熱議。有興趣的童鞋可以通過@david_colombo_找到他。
今天的分享就是這些,如果覺得不錯,請分享給更多喜愛的朋友~