
CVE-2026-31431 を使用して root パスワードを一時的に削除します。
[!WARNING] 所有している、またはテストする許可を得ているシステムでのみ使用してください。
rootパスワードを一時的に削除し、CVE-2026-31431を使用して、現在のユーザーのパスワードを知らなくてもアーキテクチャに依存せずにrootへ昇格できるようにします。
責任を持って、テストを許可されたシステムでのみ使用してください。この方法がお使いのシステムでサポートされているかどうかは異なりますが、私がテストしたすべてのDebian派生ディストリビューションで動作しています。
このPoCは、基本的に/etc/passwd内の自分のUIDをすべて0に置き換え、事実上root権限を与えるものです。このアプローチは代わりにrootのパスワードを削除するため、su を実行すると即座にrootになれます。これにより、ユーザーをそのまま維持して安定性を保ちますが、クリーンアップまでの間、マシン上の任意のユーザーが昇格できるという制約があります。バイナリ改変ではないため、すべてのアーキテクチャでも動作するはずです(Aarch64とx64でテスト済み)。
python exploit.py [ --shell | --clean | --noclean ]
引数なしで実行すると、プログラムは実行され、/etc/passwd を変更した後、元に戻します。
--noclean は、終了後に変更が元に戻されるのを防ぎます。--clean は以前の実行からのクリーンアップのみを行い、エクスプロイトは実行しません。--shell はクリーンアップを行いませんが、エクスプロイト実行後に su でrootシェルを起動します。
変更後
パスワードが /etc/shadow に保存されていることを示す 'x' を削除すると、そのユーザーにはパスワードがないものとして扱われ、簡単にログインできるようになります。
私がこれを書いた時点では、CopyFailのよく知られたPoCは2つしかありませんでした。1つはSUID実行ファイルを上書きするもの、もう1つは自分のユーザーのUIDをゼロに置き換えるものでした。システムに対してテストを実行する場合、これら2つはかなり異なるユースケースを持っています。SUIDの上書きにはシステムのアーキテクチャに合わせたシェルコードが必要であり、UIDの変更には現在のユーザーのパスワードで再認証する必要がありますが、そのパスワードを知らない可能性があります。RootRemoverは、それらの要件が障害になる場合によく使用できます。
これは、www-data のようなnologinユーザーでシェルを取得した場合のために設計されており、既知のパスワードがある、またはシェルコードを準備できるほどアーキテクチャをよく知っているマシン向けではありません。
*LK*' または '*NP*' を使用していてはならない(チェーン書き込みで修正できる可能性があるが、まだ実装する時間がない)su のコマンドラインから昇格を識別されやすい(引数がない場合は常にrootを意味する。UIDパッチPoCはログ上では自分のユーザーへの切り替えのように見えるだけ)実際のエクスプロイトコードは rootsecdev のリポジトリからのもので、私は主に上記の理由で書き込まれるバイトを変更しています。