NFS no_root_squash/no_all_squash misconfiguration PE
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
_ /etc/exports _ ファイルを読み、no_root_squashとして設定されているディレクトリが見つかった場合、クライアントとしてそれにアクセスし、そのディレクトリの中にローカルのマシンのrootのように書き込むことができます。
no_root_squash: このオプションは基本的に、クライアントのrootユーザーにNFSサーバー上のファイルにrootとしてアクセスする権限を与えます。これにより、深刻なセキュリティ上の問題が生じる可能性があります。
no_all_squash: これはno_root_squashオプションに似ていますが、非rootユーザーに適用されます。例えば、nobodyユーザーとしてシェルを持ち、/etc/exportsファイルを確認し、no_all_squashオプションが存在し、/etc/passwdファイルを確認し、非rootユーザーをエミュレートし、そのユーザーとしてsuidファイルを作成(nfsを使用してマウント)します。その後、nobodyユーザーとしてsuidを実行し、異なるユーザーになります。
この脆弱性を見つけた場合、次のように悪用できます:
そのディレクトリをクライアントマシンにマウントし、rootとしてマウントされたフォルダ内に**/bin/bash**バイナリをコピーし、SUID権限を与え、被害者マシンからそのbashバイナリを実行します。
クライアントマシンでそのディレクトリをマウントし、 マウントされたフォルダ内に rootとして SUID権限を悪用するコンパイル済みペイロードをコピーし、それに SUID 権限を与え、被害者 マシンからそのバイナリを 実行 します(ここにいくつかのC SUIDペイロードがあります)。
注意してください、もしあなたがあなたのマシンから被害者のマシンへのトンネルを作成できるなら、必要なポートをトンネリングしてこの特権昇格を悪用するためにリモートバージョンを使用することができます。
次のトリックは、ファイル/etc/exports
がIPを示している場合です。この場合、リモートエクスプロイトを使用することはできず、このトリックを悪用する必要があります。
エクスプロイトが機能するためのもう一つの必要条件は、/etc/export
内のエクスポートがinsecure
フラグを使用していることです。
--もし/etc/export
がIPアドレスを示している場合、このトリックが機能するかどうかはわかりません--
このシナリオは、ローカルマシン上のマウントされたNFS共有を悪用し、クライアントが自分のuid/gidを指定できるNFSv3仕様の欠陥を利用して、無許可のアクセスを可能にします。悪用には、NFS RPCコールの偽造を可能にするライブラリlibnfsを使用します。
ライブラリのコンパイル手順は、カーネルバージョンに基づいて調整が必要な場合があります。この特定のケースでは、fallocateシステムコールがコメントアウトされていました。コンパイルプロセスには、次のコマンドが含まれます:
この攻撃は、特権をルートに昇格させ、シェルを実行するシンプルなCプログラム(pwn.c
)を作成することを含みます。プログラムはコンパイルされ、結果として得られたバイナリ(a.out
)は、RPC呼び出しでuidを偽装するためにld_nfs.so
を使用して、suid rootで共有に配置されます。
攻撃コードをコンパイルする:
攻撃を共有に配置し、uidを偽装してその権限を変更する:
攻撃を実行してルート権限を取得する:
ルートアクセスを取得した後、所有権を変更せずにNFS共有と対話するために(痕跡を残さないために)、Pythonスクリプト(nfsh.py)が使用されます。このスクリプトは、アクセスされるファイルのuidに一致するようにuidを調整し、権限の問題なしに共有上のファイルと対話できるようにします:
実行するには:
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)