特権のないユーザーがchroot(2)
を使用できないのはなぜですか?
私はインターネット上の既存の答えを理解していません。たとえば、これは https://lists.freebsd.org/pipermail/freebsd-security/2003-April/000123.html です。
_/etc/sudoers
_と_/etc
_がrootによって所有されていない場合、Sudo
は実際に機能しますか?特権のないユーザーは、chroot内にroot所有のsetuidバイナリを作成することはできませんか?
特権のないユーザーがchroot環境を破壊するにはどうすればよいでしょうか。
私はそのようなことしか考えられません
_ln /mnt/backup/XYZ/etc/sudoers $CHROOT/etc/sudoers
ln /usr/bin/Sudo $CHROOT/usr/bin/Sudo
_
ここで、XYZ
は、管理者が実際に失敗し、ユーザーに危険な何かを許可したバックアップインスタンスを示します。しかし、これはちょっと特別です。特権のないユーザーが利用できる場合、chroot(2)
を悪用するもっと簡単な方法はありますか?
https://forums.grsecurity.net/viewtopic.php?f=7&t=2522 のBrad Spenglerによると、_CAP_SYS_CHROOT
_( chroot(2)
を使用する機能:
CAP_SYS_CHROOT:generic:Julien Tinnes/Chris Evansから:suidルートバイナリと同じファイルシステムへの書き込みアクセス権がある場合は、バックドアされたlibcを使用してchroot環境をセットアップし、chroot内でハードリンクされたsuidルートバイナリを実行してフルルートを取得しますバックドアを介した特権
通常のユーザーはsetuidバイナリを作成できませんが、既存のsetuidバイナリへのハードリンクを作成することを妨げるものは何もありません。したがって、彼が/usr/bin
と同じファイルシステム上のディレクトリへの書き込み権限を持っている場合、彼はこのディレクトリに刑務所を置き、その中にsu
またはSudo
へのハードリンクを作成できます。カスタムの/etc/passwd
と/etc/sudoers
を刑務所に入れます。
/etc/sudoers
がrootによって所有されていることを確認する可能性があるため、Sudo
では機能しない可能性があります。しかし、su
は/etc/passwd
の所有権をチェックしないに違いありません。
chroot(2)
は作業ディレクトリを変更しないため、呼び出し後、.
は/
をルートとするツリーの外部にある可能性があります。その後、相対パスを使用して、chroot内から任意のsetuidバイナリを実行できます。これを悪用する方法はおそらくたくさんあります。たとえば、chrootディレクトリ内の/etc/ld.so.preload
を変更することにより、root権限で任意のコードを実行できます。 例 を見ることができます。