web-dev-qa-db-ja.com

このエクスプロイトが機能しない原因は何ですか(UNIX SUID)?

私が新しいファイルの作成を許可されているUNIXシステムのユーザーがいる場合、別のシステムのルートに既にSUIDされている実行可能ファイルをそのシステムにダウンロードできないのはなぜですか?

シナリオ:

  • ユーザーKarrax(box1)でシェルにログインしています
  • すでにルートになっている別のシステム(box2)では、実行可能ファイルにSUIDルートを設定します
  • 次に、ファイルをbox1に転送/コピーします

ログインした最初のシェルでこのファイルがrootとして実行されないようにするにはどうすればよいですか?

10
Chris Dale

ファイルを別のファイルシステムにコピーする場合、内部で行われているのは、新しいファイルを作成して内容をコピーすることです。ファイルを別のファイルシステムに移動するには、ソースをコピーしてから削除します。そのため、ファイルをコピーするときは、ファイルを作成するとき以外の特権はありません。

ファイルを作成すると、それはあなたに属します。多くのUNIXバリアントは、所有者(chown)のルートへの変更を制限しています。ファイルの所有者がファイルを渡すことを許可するものでさえ、そうするときにsetuidビットとsetgidビットをクリアします。グループの所有権の変更(chgrp)も、root権限で呼び出されない限り、setxidビットをクリアします。そして、そのパーミッションを変更するには、ファイルを所有するかrootになる必要があります。したがって、プログラムを実行する権限がないユーザーまたはグループのsetxidファイルを作成することはできません。

Setxidファイルインジェクションの別の方法は、ファイルシステムのマウントです。ほとんどの構成では、ルートによって直接マウントされたファイルシステムでsetxidビットのみが許可されます(Linux、Samba、Fuseなどのuserオプションを使用した/etc/fstabエントリとは対照的)。場合によっては、たとえばNFSマウントの場合、nosuidオプションを使用してファイルシステムを確実にマウントするのはシステム管理者次第です。

更新:誤解を招く以前の回答は無視してください。混乱を避けるためにここで編集しました。 Gillesの方がはるかに優れた答えを持っています。これをここに組み込んだり、言い換えたりすることができますが、彼は信用に値します。

私が以前持っていたものを本当に見たいなら、編集の時間をクリックすることで、いつものように編集履歴でそれを見つけることができます。

3
nealmcb

誰かのtarballをダウンロードして抽出すると、この動作に近づきます。uidが7544の場合、「所有権/アクセス権を保持」します。rootの場合は、解凍したファイルのuidが表示されます。非特権ユーザーの場合は、おそらくエラーです。

3
hpavc