AnyDeskにroot権限でのリモートコード実行を許す脆弱性

セキュリティ研究者が、Linux版AnyDesk 8.0.2に存在するヒープバッファオーバーフロー脆弱性を公開しました。この脆弱性は「AnyPwn」と名付けられています。

セキュリティインシデント対応

この脆弱性を悪用すると、ユーザーがデスクトップ制御を承認する前にリモートからコマンドを実行できます。AnyDeskのサービスは通常root権限で動作しているため、攻撃に成功すればシステムのroot権限を奪取されます。問題を発見したのはV12で、AnyDesk 8.0.3で修正されています。

V12セキュリティチームのRick de Jager氏による概念実証(PoC)では、Linux x86_64システムのTCPポート7070への直接接続を利用した攻撃手法が示されています。このPoCは、サービスモードで動作する特定のAnyDesk 8.0.2バイナリを対象としており、オフセットも検証環境に合わせて調整されています。他のビルドを攻撃するには調整が必要となり、今回は実証されていません。

AnyDeskの脆弱性

脆弱性は、AnyDeskのセッションプロトコル、具体的にはmode-5ストリームパケットのハンドラに存在します。このハンドラは、リモートから渡されるペイロード長が残りのパケットデータに収まるかを検証する前に、その値を信頼してしまいます。さらに、必要なメモリ割り当てサイズを求める際に、32ビット演算で16バイトのオブジェクトヘッダを加算します。

攻撃者は、ペイロード長として0xfffffff0を指定できます。これに0x10を加えると結果は0x100000000となり、32ビットでは切り捨てられて0になります。0xffffffffまでの値でも同様の計算となり、割り当てられるのはわずか0〜15バイトです。

一方、オブジェクトが保持する論理的な長さは大きいままです。しかも、データポインタは割り当て領域の先頭から16バイト先を指しています。その結果、攻撃者が制御するデータをコピーすると、割り当て済みメモリの範囲外に書き込まれてしまいます。

攻撃者が大量のデータを送る必要はありません。悪意ある長さの値とオーバーフローさせるバイト列を含む小さなフレームだけで、メモリ破壊を引き起こせます。

攻撃は、アロケータの整形(グルーミング)とリターン指向プログラミング(ROP)を組み合わせて行われます。まず、サイズ別に整理したヒープスプレーで関連する割り当てクラスを埋めます。同時に、追加のクライアント接続を張り、被害オブジェクトの候補を作り出します。

オーバーフローは、隣接する被害オブジェクトのディスパッチ関連フィールドを破壊しようとします。ここには、実行の転送先を制御するためのデータも含まれます。

攻撃をさらに進めるため、別のスプレーでROPオブジェクトを繰り返しメモリに配置します。各オブジェクトは、return命令のスレッドの後に、攻撃者が選んだコマンドを引数にして対象バイナリのsystem()エントリを呼び出すチェーンが続く構造です。

この攻撃の成功は確率的です。被害オブジェクトが改ざんされたバッファの隣にない場合、意図したコマンドは実行されず、AnyDeskサービスがクラッシュするだけに終わる可能性があります。

研究者らは、最小限のFrida用トリガーを使えば、AnyDeskのリレー接続経由でも脆弱なプロトコルの経路にアクセスできると指摘しています。

ただし、この結果はリレー経由での完全なコマンド実行を裏付けるものではありません。公開されたエクスプロイトが実証しているのは、直接のTCP接続による完全な攻撃のみです。AnyDeskはこの脆弱性について、Linuxでの直接接続に限られるとしており、WindowsとmacOSは影響を受けないとしています。

CVEデータベースへのアクセス

管理者は、脆弱なLinux環境をAnyDesk 8.0.3以降へアップグレードするよう推奨されています。すぐにパッチを適用できない場合は、TCPポート7070へのアクセスを制限することで、確認済みの直接攻撃のリスクを下げられます。ただし、これはアップグレードの代わりにはなりません。

MTTRを21分短縮し、被害が出る前にサイバー脅威を阻止。ANYRUNのサンドボックスをSOCに導入。

翻訳元: https://gbhackers.com/anydesk-vulnerability/

本記事は gbhackers.com の記事を翻訳・要約したものです。