見出し画像

Capで学ぶ特権昇格

HackTheBoxのCapというマシンをやりました。
そこで出てきたlinPEAS.shでPythonの脆弱性についてみていきたいと思います。

Capabilitiesとは

日本語に直訳すると「能力」ですね。
ここではLinux上で実行される各プロセスにどんな権限が付与されているのか?
もっとストレートな表現だと、rootユーザにならなくても一般ユーザがそのプロセスを使ってrootユーザのように色々なことしたいな。

詳細はHackTricksに記載があります。
ただ勉強初めて1ヶ月目の自分が理解しようとするには敷居が高いように感じたので今はCapabilitiesの概要を理解出来ればと思ってます。

問題の箇所

linPEASの結果をスクロールしながら見てみるとCapabilitiesの結果が載っています。



今回はpython3.8でroot権限を取得できそうです。

python3.8のCapabilities

実行結果にはcap_setuid、が記載されてますがこれがどんな意味なのか調べていきたいと思います。

setuidとはそのプロセス(python)の中でユーザIDを変更できることです。
pythonでは下記のようにプログラムを組むと指定したIDのユーザになれます。
UID=0 はrootユーザになります。

import os
os.setuid(0)

つまり、上記プログラムを実行するとrootユーザに慣れます。

それって危険では?

python3.8ってそんな危険なの?
もちろんそんなわけはないんですが、setuidが許可されている状態がどのようにして起こるのかを理解する必要があります。

python3.8をインストールすると漏れなくsetuidでroot権限になれます、
ということはもちろんなく、結論としては、
管理者の手により、setuidのCapabilityが付与されたということになります。

下記がcap_setuidを付与するコマンド

$ sudo setcap cap_setuid /usr/bin/python3.8

今回はCapabilitiesの勉強のため付与されていますが、現実でも必要性とリスクを評価した上で付与されることはあるようです。
そして、もし付与したあとに不要になった場合は、下記コマンドで削除できます。

$ sudo setcap -r /usr/bin/python3.8

チートシートへの追加

linPEAS.shを実行するというのが効率的で良いのですがOSCPでは利用を制限されてますので、Capabilitiesを調べる下記コマンドをチートシートに追加しておこうと思います。

$ getcap -r / 2>/dev/null | grep cap_setuid

参考

今回の記事を書くに当たり参考にさせていただいた情報

UbuntuのCapabilitiesの説明


Linux Capabilitiesについて書かれた記事

2021年にOSCPがlinPEASの利用について発信したものを取り上げた記事

いいなと思ったら応援しよう!