ld.so privesc exploit example
環境の準備
次のセクションでは、環境を準備するために使用するファイルのコードを見つけることができます。
同じフォルダーにそのファイルを作成します
ライブラリをコンパイルします:
gcc -shared -o libcustom.so -fPIC libcustom.c
libcustom.so
を/usr/lib
にコピーします:sudo cp libcustom.so /usr/lib
(root権限)実行可能ファイルをコンパイルします:
gcc sharedvuln.c -o sharedvuln -lcustom
環境を確認する
libcustom.so が /usr/lib から読み込まれていることと、バイナリを実行できることを確認します。
Exploit
このシナリオでは、誰かが_/etc/ld.so.conf/_内に脆弱なエントリを作成したと仮定します:
The vulnerable folder is /home/ubuntu/lib (where we have writable access). 次のコードをそのパス内でダウンロードしてコンパイルします:
今、誤って設定されたパス内に悪意のあるlibcustomライブラリを作成したので、再起動を待つか、rootユーザーが**ldconfig
を実行するのを待つ必要があります(_このバイナリをsudoとして実行できる場合、またはsuidビット**が設定されている場合は、自分で実行できます_)。
これが発生したら、再確認してください。sharevuln
実行可能ファイルがlibcustom.so
ライブラリをどこから読み込んでいるかを確認します:
ご覧のとおり、/home/ubuntu/lib
から読み込んでいます。もしユーザーがこれを実行すると、シェルが実行されます:
この例では特権を昇格させていないことに注意してくださいが、実行されるコマンドを変更し、rootまたは他の特権ユーザーが脆弱なバイナリを実行するのを待つことで特権を昇格させることができます。
その他の誤設定 - 同じ脆弱性
前の例では、管理者が**/etc/ld.so.conf.d/
内の設定ファイルに非特権フォルダーを設定したという誤設定を偽装しました。
しかし、同じ脆弱性を引き起こす他の誤設定もあります。もしあなたが/etc/ld.so.conf.d
内のいくつかの設定ファイル**、/etc/ld.so.conf.d
フォルダー内、または/etc/ld.so.conf
ファイル内に書き込み権限を持っている場合、同じ脆弱性を設定して悪用することができます。
エクスプロイト 2
ldconfig
に対してsudo権限を持っていると仮定します。
ldconfig
に設定ファイルをどこから読み込むかを指示することができます。これを利用してldconfig
に任意のフォルダーを読み込ませることができます。
それでは、"/tmp"を読み込むために必要なファイルとフォルダーを作成しましょう:
今、前のエクスプロイトで示されたように、/tmp
内に悪意のあるライブラリを作成します。
最後に、パスをロードして、バイナリがライブラリをどこからロードしているかを確認しましょう:
ご覧のとおり、ldconfig
に対するsudo権限を持っていると、同じ脆弱性を悪用できます。
Last updated