
Canonical の snapd デーモン(Ubuntu Linux のデフォルトサービス)の REST API における「Dirty_Sock」(CVE-2019-7304)と呼ばれる脆弱性を悪用して、root アクセスを取得します。
Ramil Mustafayev のガイド: https://kryptohaker.medium.com/linux-privilege-escalation-via-snapd-using-dirty-sock-exploit-and-demonstration-of-cve-2019-7304-892716cf99ca
この脆弱性は、snapd 2.37 より前のバージョンで、UNIX ソケットに対するアクセス制御を実行する際に、リモートソケットアドレスが誤って検証・解析されていたために悪用されました。これは当時、一部の Unix および Linux ディストリビューション(例:Ubuntu 16.04)にも影響しました。したがって、この悪用を実装するには、snapd 2.32 と Ubuntu 16.04 が必要です。
snapd 2.32 の Debian パッケージを https://launchpad.net/ubuntu/+source/snapd から入手しました。

まず、Ubuntu マシンが悪用可能かどうかを確認するために、cat /etc/lsb-release(Ubuntu のバージョンとその説明を表示します)と uname -a(現在のコンピュータとオペレーティングシステムの情報を確認します)というコマンドを使用します。これにより、このマシンが悪用可能であることを確認できます。

次のステップは、systemctl start snapd コマンドを使用して snapd サービスを開始することです(実際には、攻撃者がこの欠陥を悪用する際、snapd サービスは管理者によって開始されている必要があります。そうでないと、攻撃者は正常に起動できません)。次に、snapd のバージョンを確認して、脆弱であることを確認できます。

次に、id(ユーザーとグループの情報を表示)および tail /etc/passwd(/etc/passwd ファイルは、登録されたすべてのユーザーを追跡するために使用されます)というコマンドを使用して、ユーザーの権限を確認します。以下の結果は、「coby」というユーザー名の攻撃者が、システムへの最低限のアクセス権しか持たない通常のユーザーであることを示しています。

この攻撃を開始するには、2 つのバージョンを持つ dirty_sock スクリプトを利用します。これは https://github.com/initstring/dirty_sock から取得できます。バージョン 1 はアウトバウンドのインターネット接続と SSH サービスの実行を必要としますが、バージョン 2 は要件なしで直接実行できます。
この悪用で使用される dirty_sockv2.py には、注目すべき重要なコンポーネントがいくつかあります。このスクリプトの最初の重要なコンポーネントは、インストール可能な snap パッケージを表す base64 エンコード文字列である変数 TROJAN_SNAP です。このパッケージは、インストールフックに bash スクリプトが含まれた空の「devmode」snap であり、新しいユーザーを作成します(「devmode」(開発者モード)は、開発およびデバッグの目的で snap が厳密な制限を回避できるようにする特別なインストールモードです)。

このスクリプトのもう 1 つの重要なコンポーネントは、create_sockfile() 関数です。この関数は、「snapd の ucrednet.go」ファイルの安全でない解析を悪用して、ランダムなソケットファイルを生成し、;uid=0; というダーティソックを滑り込ませることで、UID 変数を上書きできるようにします。

この悪用を実装するには、ターミナルで dirty_sockv2.py を実行するだけです。dirty_sock エクスプロイトを正常に実行すると、同じパスワードを持つ dirty_sock アカウントがスクリプトによって自動的に作成されたことがわかります。

次に、/etc/passwd を確認して登録済みユーザーのリストを確認すると、「dirty_sock」という新しいユーザーが作成されたことがわかります。

su コマンドを使用して、見つけた認証情報を使って「dirty_sock」アカウントにログインできます。ログインが成功したら、このユーザーの権限を確認でき、sudo グループに属していることがわかります。これは、攻撃者がすでにシステムの完全な制御を取得しており、最高権限で何でもできることを意味します。

この脆弱性の CVSS スコアは 8.8(重大度:高)であり、悪用された場合、システムに大きな影響を与える可能性があります。この脆弱性は、悪用に高い権限を必要としないため、重大度が高くなっています。攻撃者がすでにシステム上に何らかの足場(例:低権限のユーザー)を持っている場合、root への権限昇格が可能になるため、この脆弱性は、特にマルチユーザー環境やクラウド環境において、深刻なローカルセキュリティ上の脅威となります。