php-cgi における脆弱性 CVE-2012-1823 の再現環境を準備する

php-cgiCGIPHP)における脆弱性 CVE-2012-1823 の再現環境を準備する必要があったため、過去にまとめたメモを見直していました。このような再現環境を準備するとき、該当バージョンのソフトウェアを探したり意外と時間が掛かってしまいます。そこでメモをもとに、改めてこの日記をまとめました。
なお、この日記では CVE-2012-1823 には触れません。この脆弱性を知りたい方は参考情報をご参照ください。

再現環境

この日記では、Windows 8 で下表のソフトウェアを使い、再現環境を構築しました。

ソフトウェア バージョン
Ubuntu Server 12.04
Kali Linux 1.0.6
VMware Player 6.0.1
php-cgi 5.3.10-1ubuntu3
nmap 6.40

再現環境の構築手順

次の 1 から 4 の順に、CVE-2012-1823 の再現環境を構築しました。この日記では 2 から 4 の手順の要点を中心に説明します。

  1. VMware Player をインストールする。
  2. 仮想マシンUbuntu 12.04 Server」を作る。
  3. インストールメディアから「php-cgi」をインストールする。
  4. nmap を使って、CVE-2012-1823 があることを確認する。
仮想マシンUbuntu 12.04 Server」を作る

まず、UbuntuOld Ubuntu Releases から 64 bit 向け/32 bit 向けの Ubuntu 12.04 Server の ISO イメージをダウンロードします。この日記では、32 bit 向け Ubuntu 12.04 Server(ubuntu-12.04-server-i386.iso) を使いました。

VMware Player を起動して、[Player]メニュー - [ファイル] - [新しい仮想マシン]から仮想マシンを作ります。「新しい仮想マシン ウィザード」では、「後で OS をインストール」を選択します。[ゲスト OS の選択] にて、ゲストOS に Linux、バージョンに Ubuntu を選択した後は、初期値のままで構いません。

作成した仮想マシンの CD/DVD ドライブにダウンロードした ISO イメージを指定して起動します。そして、インストーラに沿って、「Ubuntu 12.04 Server」をインストールします。この「Ubuntu 12.04 Server」のインストールでは、[ソフトウェアの選択] で「LAMP server」と「OpenSSH server」を選択する以外は、初期値のまま(または好みの値)で構いません。

インストールが完了して無事に起動すれば、仮想マシンUbuntu 12.04 Server」の準備は終わりです。

インストールメディアから「php-cgi」をインストールする

仮想マシンUbuntu 12.04 Server」にて、次のコマンドを実行します(この日記では、Tera Termssh 接続して実行しました)。なお、コマンドの実行結果については一部のみ掲載しています。

$ sudo apt-cdrom add
$ sudo sed -i -r -e's/^(deb.+)/#\1/g' -e's/#(deb cdrom.+)/\1/g' /etc/apt/sources.list
$ sudo apt-get update
$ sudo apt-get install php5-cgi
$ sudo a2dismod php5
$ sudo a2enmod actions
$ sudo vi /etc/apache2/conf.d/php5-cgi.conf
$ cat /etc/apache2/conf.d/php5-cgi.conf
<IfModule mod_actions.c>
  Action application/x-httpd-php /cgi-bin/php5
</IfModule>

$ sudo service apache2 restart
$ sudo vi /var/www/phpinfo.php
$ cat /var/www/phpinfo.php
<?php phpinfo(); ?>


前述のコマンドを実行したら、仮想マシンUbuntu 12.04 Server」の phpinfo.php にブラウザでアクセスします。この日記では、http://192.168.30.128/phpinfo.php となります(意図的に h をhと記述していますのでご注意ください)。このブラウザの出力結果で [Server API] が「CGI/FastCGI」となっていれば、php-cgiCGIPHP)が動作していると判断します*1

nmap を使って、CVE-2012-1823 があることを確認する

最後に、nmap の Nmap Scripting Engine(NSE) スクリプトhttp-vuln-cve2012-1823」を実行して、CVE-2012-1823 があることを確認します。この日記では、別の仮想マシンで Kali Linux 1.0.6 を起動して、Kali Linux 上で nmap を実行しました。nmap の実行結果が VULNERABLE であることから、CVE-2012-1823 があることを確認できました。参考までに、nmap 実行時のパケットキャプチャデータを CloudShark にアップロードしておきます。

# nmap -n -sS -p80 --script http-vuln-cve2012-1823 --script-args http-vuln-cve2012-1823.uri=/phpinfo.php 192.168.30.128

Starting Nmap 6.40 ( http://nmap.org ) at 2014-02-06 01:49 UTC
Nmap scan report for 192.168.30.128
Host is up (0.0013s latency).
PORT   STATE SERVICE
80/tcp open  http
| http-vuln-cve2012-1823:
|   VULNERABLE:
|   PHP-CGI Remote code execution and source code disclosure
|     State: VULNERABLE (Exploitable)
|     IDs:  CVE:2012-1823
|     Description:
|       According to PHP's website, "PHP is a widely-used general-purpose
|       scripting language that is especially suited for Web development and
|       can be embedded into HTML." When PHP is used in a CGI-based setup
|       (such as Apache's mod_cgid), the php-cgi receives a processed query
|       string parameter as command line arguments which allows command-line
|       switches, such as -s, -d or -c to be passed to the php-cgi binary,
|       which can be exploited to disclose source code and obtain arbitrary
|       code execution.
|     Disclosure date: 2012-05-3
|     Extra information:
|       Proof of Concept:/phpinfo.php?-s
|   <code><span style="color: #000000">
|   <span style="color: #0000BB">&lt;?php&nbsp;phpinfo</span><span style="color: #007700">();&nbsp;</span><span style="color: #0000BB">?&gt;<br /></span><br /></span>
|   </code>
|     References:
|       http://ompldr.org/vZGxxaQ
|       http://eindbazen.net/2012/05/php-cgi-advisory-cve-2012-1823/
|_      http://cve.mitre.org/cgi-bin/cvename.cgi?name=2012-1823
MAC Address: 00:0C:29:80:CF:64 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.33 seconds

再現環境を準備できたら

あとは、CVE-2012-1823 の Exploit コードを実行するだけです。この日記では Exploit コードに言及していませんが、この再現環境にはいわゆる Apache Magica 攻撃も成功するはずです(元々この再現環境を準備するキッカケは Apache Magica 攻撃でした)。

*1:この情報を参考にさせていただきました。