Apache Range Header Denial of Service Vulnerability

しばらく前に,会社の品質保証部のセキュリティ情報で Apache Web サーバの DoS 脆弱性が話題になり,現場に対し担当システムを確認するよう指示がまわっていた。担当顧客システムの調査/対応が一段落したので,自宅の Web サーバもチェックしてみることにした。

この脆弱性のアドヴァイザリは『JVNTR-2011-05 Apache HTTPD サーバにサービス運用妨害 (DoS) の脆弱性 (CVE-2011-3192, JVNVU#405811)』。Apache 2.x 系すべてが対象とのこと。Range ヘッダ処理で Web サーバのみならずシステム全体のサービス不能を引き起こす問題である。

自宅の FreeBSD 8.2-RELEASE 公開 Web サーバを確認すると,インストールした Apache22 の CHANGES(修正履歴ファイル)には Fix a regression introduced by the CVE-2011-3192 byterange fix in 2.2.20. とあるので,すでに対策済みの版だとわかった。OS を組込んだ 9 月には,FreeBSD Apache22 ports は対策版に更新されていたわけである。この問題を検証できる Perl コード Apache Killer - killapache.pl が公開されている。検証のため,公開サーバをこのプログラムで攻撃してみた。

isolde:/Users/i-yasuda/var/ % perl killapache.pl beatrice
Host does not seem vulnerable

となって,確かに対策済みだとわかった。killapache.pl 攻撃コードは Perl IO::Socket 及び Parallel::ForkManager モジュールを必要とするのであらかじめ組込んでおく必要がある。ためしに,メインで使っている書斎の Mac OS X Tiger マシンを攻撃してみると,みるみるうちに CPU 利用率が 100% に跳ね上がってそれが延々と続き,操作がずしんと重くなった。

この脆弱性は有名だし,攻撃コードが公開されているくらいだから,ご自分で Web サーバを運用されている方はぜひチェックして,未対応なら Apache を最新版に更新していただきたい。インストールした Apache のドキュメントを見て,CVE-2011-3192 アドヴァイザリが対策されていればよい。