
現代のGCSに対する脆弱性とエクスプロイトのコレクション
ドローンから地上管制局への攻撃ベクター、脆弱性、エクスプロイト
今日のドローン群は、1人のオペレーターが単一の地上局から数十機または数百機のドローンを飛行させるものです。これにより、地上管制局は敵対者にとって価値の高い標的となります。通常パイロットがそこに位置し、ミッションデータが保存されることが多く、UxSネットワークや群内の他のドローンを横断するラテラルムーブメントの主要なベクターとなるからです。
ドローンセキュリティ研究のほとんどは、ドローン自体を標的にすることに焦点を当ててきました。Infected Droneの研究は別のアプローチを取り、1機の侵害されたドローンが、それに接続する地上局をどのように攻撃できるかを明らかにしています。ほとんどの地上管制ソフトウェアはドローンから送られてくるものをそのまま信頼するため、認証、検証、サニタイズが欠如しており、侵害されたドローンからのデータが、オペレーターのマシン上でのファイルCRUD、コード実行、またはクラッシュにつながる可能性があります。
このリポジトリは、地上管制局ソフトウェアの脆弱性を文書化し、それらに対する動作する概念実証コードを提供しています。これは教育目的のみで公開されており、オペレーターが自身の露出を理解し、メンテナーがこれらの問題を再現して修正できるようにするためのものです。
PoCは、あなたが所有するか、テストの書面による許可を得ているシステムに対してのみ実行してください。それらはすべてベンチ向けに書かれており、ペイロードは無害なマーカーであり、他人の航空機や地上局に対して使用するためにパッケージ化されたものは何もありません。あなたが制御していないシステムに対してこの資料を使用することは、あなたがどこにいても違法となる可能性が高いです。
各発見の再現セクションには、必要なものと何をするかが記載されています。何かを実行する前に読んでください。
凡例:
配送クラスとは、攻撃者がリンク上で何をしなければならないかであり、どのベクターが機能するかを決定します。プッシュの発見は、GCSにフレームが到着するだけでよいため、注入可能なベクターであれば十分です。ハンドシェイクおよびリクエスト/レスポンスの発見は、攻撃者が会話相手そのものであるか、完全に制御する必要があり、オンバスペリフェラル、侵害されたコンパニオン、サプライチェーン、または完全なMITMが有利です。
Fix列は、提出済みのアップストリームプルリクエストにリンクしています。15件の発見のうち10件は、ベンダー自身のリポジトリに対して提出されたパッチとともに提供されています。
| ID | 製品 | 深刻度 | CWE | シンククラス | 配送クラス | 感染FC / サプライチェーン? | 悪意のあるオンバスペリフェラル? | 侵害されたコンパニオン? | WiFi/UDP注入? | TCP/クラウドMITM? | SiKW00F注入? | SiK完全MITM? | 修正 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| QGC-01 | QGroundControl | 🟠 HIGH | 22/73/170 | CAMERA_INFORMATION → パストラバーサル書き込み (接続時のゼロクリック書き込み) | プッシュ (CAMERA_INFORMATION) + cam_definition_uri経由のコンテンツ | ✅ | ✅ 最も自然 (カメラ) | ✅ | ✅ | ✅ | ✅ トリガーはプッシュ; 名前フィールドはインライン | ✅ | PR #15083 |
| QGC-02 | QGroundControl | 🔴 CRITICAL | 22/73/494/918 | COMPONENT_METADATA uri → 任意ファイル書き込み → 接続時のゼロクリックRCE | リクエスト/レスポンス (IP経由のURIフェッチ) | ✅ | ✅ メタデータuriを発行 | ✅ | ✅ トリガー用 | ✅ | ⚠️ プッシュトリガーは可; フェッチはIP経由 | ✅ | PR #15084 |
| QGC-03 | QGroundControl | 🟠 HIGH | 22/770 | FTPリスティング → トラバーサル書き込み + オフセットディスク充填 | ハンドシェイク (MAVFTPリスティング/ダウンロード) | ✅ | ✅ ピアがFTPに応答 | ✅ | ⚠️ 注入は可、自身のハンドシェイクはより困難 | ✅ | ⚠️ 競合するセッション/シーケンス | ✅ ブリッジがリスティングを提供 | PR #15085 |
| QGC-04 | QGroundControl | 🟡 MED | 191/125 | DataFlash .binパーサーOOB読み取り + アンダーフロー | ハンドシェイク (悪意のある.binのログダウンロード) | ✅ | ✅ ピアがDataFlashを提供 | ✅ | ⚠️ | ✅ | ⚠️ ログチャンクを提供する必要あり | ✅ ブリッジが.binを供給 | PR #15086 |
| MP-01 | Mission Planner | 🟠 HIGH | 22→94 | MAVFTPトラバーサル → プラグインローダーRCE | ハンドシェイク (MAVFTP req/ack → RCE) | ✅ | ✅ ピアがリスティングに応答 | ✅ 完全なリンク制御 | ⚠️ 注入は容易だが、ハンドシェイクを所有する必要あり | ✅ リレーで書き換え | ⚠️ 競合に勝ち、セッション/シーケンスを一致させる必要あり | ✅ ブリッジがFTP会話を所有 | PR #3774 |
| MP-02 | Mission Planner | 🟠 HIGH | 94/78 | gst:// → gst_parse_launch (ファイルr/w + 持ち出し) | プッシュ (VIDEO_STREAM_INFORMATION → gst) | ✅ | ✅ カメラがuriを通知 | ✅ | ✅ UDPデータグラム | ✅ | ✅ ワンショットストリームフレーム | ✅ 自明に | PR #3775 |
| MP-03 | Mission Planner | 🟠 HIGH | 74/601 | STATUSTEXTマークアップ → Process.Start | プッシュ (STATUSTEXT → ShellExecute) | ✅ | ✅ 任意のコンポーネントが発行 | ✅ | ✅ | ✅ | ✅ ファイアアンドフォーゲットテキスト | ✅ | PR #3776 |
| MP-04 | Mission Planner | 🟡 MED | 248/20/1050 | RALLY_TOTAL/FENCE_TOTAL → 未検証のint.Parse + UIスレッド上のO(n²) (接続時のゼロクリック) | プッシュ (PARAM_VALUE、接続後自動) | ✅ | ✅ PARAM_VALUEを発行 | ✅ | ✅ | ✅ | ⚠️ MPのdictにパラメータを着地させる必要あり | ✅ | PR #3777 |
| MAVSDK-01 | MAVSDK | 🟡 MED | 918/749 | コンポーネントメタデータcurl SSRF + file:// (プロトコル許可リストなし) | リクエスト/レスポンス (IP経由のCOMPONENT_METADATA.uriフェッチ) | ✅ | ✅ メタデータuriを発行 | ✅ | ✅ トリガー用 | ✅ | ⚠️ プッシュトリガーは可; フェッチはIP経由 | ✅ | なし |
| MAVSDK-02 | MAVSDK | 🟠 HIGH | 22/73/918 | cam-definition SSRF + mftp://トラバーサル → サンドボックス外のファイルのゼロクリック破壊 | プッシュ (CAMERA_INFORMATION.cam_definition_uri、自動) | ✅ | ✅ 最も自然 (カメラ) | ✅ | ✅ | ✅ | ✅ 自動消費プッシュ | ✅ | PR #3073 |
| MAVSDK-03 | MAVSDK | 🟠 HIGH | 409/400/770/459 | .xz cam-definitionまたはCOMPONENT_METADATA → 無制限の解凍 → 永続的なディスク枯渇 | プッシュ (CAMERA_INFORMATION.cam_definition_uri、自動) — 素のHEARTBEATで開始 | ✅ | ✅ 最も自然 (カメラ) | ✅ | ✅ | ✅ | ✅ 自動消費プッシュ; 2 GiBあたり約50秒の57.6 kbpsエアタイム | ✅ | PR #3074 |
| MAVPROXY-01 | MAVProxy | 🟠 HIGH | 502 | asterix pickle.loads over UDP → RCE | IPサイドチャネル (UDP、MAVLink RFリンクではない) | ❌ MAVLinkリンク上ではない | ❌ 別個のUDPソケット | ⚠️ :45454に到達できる場合のみ | ✅ ホスト:45454へのUDP | ❌ 自身のUDPソケット、リレーではない | ❌ RF/MAVLinkリンク上ではない | ❌ RF/MAVLinkリンク上ではない | #1728によりアップストリームで修正済み、未リリース |
| MAVROS-01 | mavros | 🟡 MED | 345/770 | PARAM_VALUE → 偽造されたグローバル/parameter_events + 無制限マップ | プッシュ/ストリーム (PARAM_VALUEを注入、ハンドシェイクなし) | ✅ | ✅ PARAM_VALUEを発行 | ✅ | ✅ UDPフラッド | ✅ | ✅ PARAM_VALUEをフラッド | ✅ | なし |
| MAVROS-02 | mavros | 🟠 HIGH | 125/617/248 | FTP書き込みack → 無制限のstd::advance → ヒープ開示 + プロセス中止 | ハンドシェイク (FTP応答を汚染 → クラッシュ) | ✅ | ✅ ピアが不正なFTPを送信 | ✅ | ⚠️ | ✅ | ⚠️ 不正な応答を着地させる必要あり | ✅ ブリッジが不正な応答を注入 | なし |
| DRONEKIT-01 | DroneKit | ⚪ INFO | 20 | 信頼境界ハンドオフ (param_id / STATUSTEXT) | プッシュ (テレメトリ → アプリコールバック; 設計上のハンドオフ) | ✅ | ✅ 任意のコンポーネント | ✅ | ✅ | ✅ | ✅ 任意のプッシュフレームがコールバックに到達 | ✅ | n/a |
マトリクスは発見ごとに7つの列をスコアリングします: 以下の5つのベクター、および2つのSiK無線 (RFテレメトリ) モードで、後者は注入対MITMのニュアンスを考慮して以下に独自の注記があります。