PHPやPythonといったメジャーなプログラミング言語に影響する脆弱性「httpoxy」が発見されました。
とは言っても、15年も前に「libwww-perl」で発見され修正されたけれども、当時はそれ以上詳しく調査されずに今になって表面化したということです。
この脆弱性は、CGIまたは類似のコンテキストで動作しているWebアプリケーションが影響を受け、中間者攻撃(man-in-the-middle attack)を受けたり、サーバを任意のホストに接続させられたりする可能性があるそうです。
参考サイト
- httpoxy
- JVNVU#91485132: CGI ウェブサーバがヘッダ Proxy の値を環境変数 HTTP_PROXY に設定する脆弱性
- HTTPoxy – CGI “HTTP_PROXY” variable name clash
- PHPに関するHTTPOXY脆弱性の問題と対応方法 – Code Day’s Night
対策
第一に、影響を受けるソフトウェアを対処済バージョンへアップデートすることです。
ただし、現在確認されている以外にも今後、影響を受けるソフトウェアが増える可能性があるとのことです。
※アップデートできない、パッチが公開されていないなどの場合には、次の回避策を行います。
回避策
WebサーバーにてProxyヘッダーをブロックすることです。
ApacheやNginxなどの設定例が専用サイト(httpoxy)などで公開されております。
※注意:筆者の環境はCentOS(Apache)のため、RedHat社(HTTPoxy – Is my Apache mod_cgi affected?)が公開している設定を追記しました。
[root@server ~]# vi /etc/httpd/conf/httpd.conf
...
RequestHeader unset Proxy
...
Apacheの設定ファイル(httpd.conf)に上記の1行を追記すればOK。(ただし、mod_headerが必要です)
検証
専用サイト(httpoxy)がGitHubにてPoCを公開しています。
httpoxy · GitHub
検証方法
筆者はRedHat社のフォーラムにあった方法(少し調整)で検証しました。
※しっかりと検証したい場合には、上記のPoCにて検証しましょう。
1.検証したいサーバーのWebアクセスできる領域に以下の内容を記載したPHPファイル(例:httpoxy.php)を設置する。
<?php
var_dump($_SERVER['HTTP_PROXY']);
putenv('HTTP_PROXY=');
var_dump(getenv('HTTP_PROXY'));
exit;
?>
2.curlコマンドでProxyヘッダをセットして、先ほどのPHPファイル(例:httpoxy.php)に送信する。
[root@server ~]# curl -H 'Proxy: 127.0.0.1:12345' "http://example.com/httpoxy.php"
▼ 対処前の場合
string(15) "127.0.0.1:12345"
string(15) "127.0.0.1:12345"
▼ 対処後の場合
NULL
string(0) ""