AnyDesk Linux版に深刻な脆弱性、攻撃者がroot権限でリモートコードを実行可能に

AnyDesk Linux 8.0.2に存在する認証前のヒープバッファオーバーフロー脆弱性「AnyPwn」の実動エクスプロイトが新たに公開されました。この脆弱性を悪用すると、デスクトップ制御の承認が行われる前にリモートからコマンドを実行できます。

Linux版のサービスは通常root権限で動作しているため、攻撃が成功すれば、認証情報もユーザー操作も不要で特権コードを実行されてしまいます。AnyDeskはこの脆弱性をバージョン8.0.3で修正しました。

この脆弱性は、V12セキュリティチームのRick de Jager氏がV12を用いて発見しました。公開された概念実証(PoC)コードの標的は、サービスモードでAnyDeskを実行しているLinux x86_64システムで、TCPポート7070への直接接続です。

このPoCのオフセットは、検証に使われた8.0.2のバイナリに固有のものです。そのため、他のビルドで同じエクスプロイトがそのまま通用するわけではなく、調整が必要になります。

脆弱性があるのは、セッションプロトコルのmode-5ストリームパケットハンドラです。このハンドラは、リモートから渡されたペイロード長が残りのフレームに収まるかを確認する前に、その値を信用してしまいます。

続いてハンドラは、32ビット演算で16バイトのオブジェクトヘッダを加算します。この処理で整数オーバーフローが発生し、メモリ割り当てが破綻します。宣言された長さが0xfffffff0の場合、0x10を加えると0x100000000となり、32ビット値としては0に折り返されます。

その結果、0xffffffffまでの宣言長では、割り当てられるのは0〜15バイトにすぎません。一方、オブジェクトは元の巨大な論理長を保持したままで、データポインタも小さすぎる割り当て領域の外を指し続けます。

その後のコピー処理により、攻撃者が制御するパケットの内容が割り当てバッファの外側に書き込まれます。攻撃者が数ギガバイトものデータを送る必要はありません。小さな外側フレームに、悪意ある長さと、隣接するヒープオブジェクトを破壊するのに十分な本体バイトを載せれば足ります。

割り当て容量と保持された長さの不一致が、このエクスプロイトにおけるメモリ破壊のプリミティブとなります。エクスプロイトはまず、複数の割り当てサイズにまたがる永続的なmode-5オブジェクトでヒープメモリを整えます。次に、クライアント接続を追加で開き、被害対象となり得るオブジェクトを近くに配置します。

細工されたオーバーフローは、隣接する被害オブジェクトのディスパッチ関連フィールドを書き換えます。これには、スタックピボットを経由して実行を転送させるための制御データも含まれます。別のスプレー処理では、繰り返し配置したROP(Return-Oriented Programming)チェーンをメモリ上に展開します。

これらのオブジェクトには、広範なリターンガジェットの着地領域が含まれており、リダイレクトされた実行が意図したチェーンに到達する可能性を高めています。このチェーンは最終的に、標的バイナリのsystem()エントリを、攻撃者が選んだコマンドとともに呼び出します。

ただし、攻撃の成功は確率的です。ヒープの配置が不利に働けば、サービスがクラッシュするだけに終わる場合もあります。研究者らは、最小限のFrida用トリガーを使い、AnyDeskのリレー接続経由でも脆弱なプロトコル経路に到達できることを確認しました。

しかし、公開されたエクスプロイトが完全なコマンド実行を実証したのは、直接TCP接続の場合のみです。リレー経路に到達できることと、リレー経由の攻撃が実証されたことを混同してはなりません。

管理者は、影響を受けるLinux環境をバージョン8.0.3以降にアップグレードしてください。信頼できない相手からのTCPポート7070へのアクセスを制限すれば、パッチ適用までの間、直接的な露出を減らせます。ただし、これは脆弱なサービスへの速やかなパッチ適用の代わりにはなりません。

16,000以上のSOCチームがANY.RUNを活用し、脅威調査を効率化して手作業を削減しています。 自社チームでの活用を検討する

翻訳元: https://cyberpress.org/critical-anydesk-linux-flaw-lets-attackers-execute-remote-code-with-root-privileges/

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