
TeamViewer のユーザーからカーネルへの権限昇格のPoC。CVE-2024-7479 および CVE-2024-7481。ZDI-24-1289 および ZDI-24-1290。TV-2024-1006。
このリポジトリには、TeamViewer の脆弱性のエクスプロイト Proof of Concept が含まれており、非特権ユーザーが任意のカーネルドライバをシステムにロードできるようになります。脆弱性の報告と責任ある開示に協力していただいた Zero Day Initiative に感謝します。

これらの脆弱性に至った研究の詳細は、私のブログの以下の3部構成のブログシリーズで見ることができます。これらの脆弱性についてより詳しく説明し、プロセス中に私が失敗した箇所も示しています。パート3が楽しいやつです :P。
エクスプロイトの動画はこちらにあります:
有効な TeamViewer クライアントを スプーフィング(ブログで詳述されている単純な認証)できるようになった後、SYSTEM サービス IPC に接続すると、任意のドライバインストールをトリガーすることが可能でした。TeamViewer はインストールされるドライバの署名を検証していませんでした。
したがって、TeamViewer により USER から KERNEL への権限昇格が可能になりました。
最も優れたアプローチの1つは、よく知られた手法である BYOD(Bring Your Own Vulnerable Driver) を使用して、有効な署名済みドライバを Windows カーネルにロードし、それを悪用してユーザーレベルから特権アクション(任意のプロセスのトークンを特権トークンに変更するなど)を実行することです。
TeamViewer がシステムにインストールされると、SYSTEM として実行されるサービス TeamViewer_service.exe が作成されます。
このサービスは、クライアントがいくつかのタスクを実行するためのヘルパーです。したがって、クライアントは昇格された権限で実行されず、一部のタスクはサービスに委任されます。
サービスとの通信(IPC)は、ソケットを介して実装されています(Overlapped I/O および IoCompletionPort を使用)。デフォルトでは、TeamViewer SYSTEM サービスは localhost の 5939/tcp でリッスンしています。
TeamViewer は、ドライバのインストールや署名チェックなどを要求するためにクライアントから送信されるパラメータをフィルタリングしていません。
そこで、アイデアとしては、TV クライアントをスプーフィングし、VPN ドライバのインストールを要求するが、別の INF を指定します。元の TeamViewer の INF を再利用しましたが、別の(非特権)パスに配置し、「悪い」ドライバを teamviewervpn.sys にリネームしました。これは、元の INF が対象としているドライバ名だからです。
これは、TeamViewer のオプション このコンピュータに対する変更には管理者権限が必要 も回避します。
このチェックは GUI 経由でのみ有効であり、非特権ユーザーがボタンをクリックすると TeamViewer オプション が無効になります。しかし、ソケットに接続して任意のドライバロードを実行することは可能です。
エクスプロイトはバージョンに依存します。IPC メッセージ内でクライアントが自身の PID やバージョンなどのデータを指定するためです。クライアントのバージョンは SYSTEM サービスのバージョンと一致している必要があります。エクスプロイトは Main.cpp の 140 行目から 143 行目を、対象となる TeamViewer_service.exe のバージョンに変更する必要があります。
つまり、基本的には、SYSTEM サービスに接続する TeamViewer クライアントをスプーフィングし、任意のドライバのインストールを要求します。TeamViewer サービスはそれをカーネルに親切にロードします。
TeamViewer には、最初に発見したもの(VPN ドライバのインストールをクリックしたときに送信される)と非常によく似た別の IPC メッセージがあります。このもう一つのメッセージは、プリンタドライバをインストールするためのものです。
つまり、本質的には CVE-2024-7479 と CVE-2024-7481 は同じですが、TeamViewer は同じエラーを2回犯しました。メッセージは異なるものの、非常によく似ています。それらは異なる IPC Method Id を持っています。
結果は同じで、任意のドライバをロードできます。