OpenVPN&セキュリティ情報
2012-05-08
PHP CGIの脆弱性解説
既に各所で取り上げられていますが、CGI版PHPにかなり大きな脆弱性が見つかっています。
あくまでもCGI版PHPを実行している場合にのみ発生するもので、モジュール版のPHPではこの脆弱性はありません。
この脆弱性の問題点は、クエリパラメータがCGIのコマンドライン引数として渡されることにあります。それで、PHPのコマンドラインオプションをクエリパラメータに含めると、そのコマンドがそのまま実行されてしまいます。
この脆弱性の問題点は、クエリパラメータがCGIのコマンドライン引数として渡されることにあります。それで、PHPのコマンドラインオプションをクエリパラメータに含めると、そのコマンドがそのまま実行されてしまいます。
これにより、以下のような攻撃が既に検出され始めています。
ソースコードが見えてしまう
たとえば、サーバーにphpinfo.phpというファイルが存在するとしましょう。脆弱性が存在する場合、このサーバーに「phpinfo.php?-s」というリクエストを投げると、PHPファイルのソースがそのまま表示されてしまいます。
PHPのコマンドラインオプション「-s」は、ソースコードをHTMLとしてフォーマットするというオプションです。その結果、対象となっているPHPファイルのソースコードをHTMLとしてフォーマットして表示してしまいます。
phpinfo.phpにも...
クエリパラメータ「?-s」をつければソースが丸見えに...
ソースコードの漏洩自体も問題ですが、特に暗号化処理などが含まれている場合には大きな問題となるでしょう。
サーバー上の任意のコマンドが実行できる
これはさらに重大な脆弱性ですが、クエリパラメータに2つのパラメータを指定し、リクエストにPHPのshell_execコマンドを投げると、その実行結果がそのまま受け取れてしまいます。
クエリパラメータに指定するパラメータは次の2つ。
allow_url_include=1 | includeなどの処理でURLに対応したfopenラッパーを使用可能にします。これは次のパラメータ(auto_prepend_file)を有効にするために必要なパラメータです。 |
auto_prepend_file=php://input | 対象のPHPファイルの前に自動的に付加され、処理されるファイルの名前を指定できます。ここでは「php://input」としているため、リクエストで渡されてきたコードがそのまま処理されることになります。 |
結果はこんな悲惨なことに。
この脆弱性を利用した攻撃が既にキャプチャされて始めていますが、その中にはインクルードするPHPコードをリクエストの中ではなく、外部のサーバーから読み込むものも見つかっているようです。
残念ながら、これらの脆弱性に対するPHPの対応は現時点ではまだ完了しておらず、近日中にアップデートをリリースするとのアナウンスが行われています。
コマンドの出力結果がそのまま取得できてしまいます
この脆弱性を利用した攻撃が既にキャプチャされて始めていますが、その中にはインクルードするPHPコードをリクエストの中ではなく、外部のサーバーから読み込むものも見つかっているようです。
残念ながら、これらの脆弱性に対するPHPの対応は現時点ではまだ完了しておらず、近日中にアップデートをリリースするとのアナウンスが行われています。
現在ではモジュール版のPHPが使用されているケースが多いと思いますが、一部のホスティングサーバーなどではCGI版のみしか利用できないところもあるようです。お使いの環境で一度ご確認されることをおすすめします。
登録:
コメントの投稿
(
Atom
)
Profile
- 山崎 太郎 (Taro Yamazaki)
- プラムシステムズ株式会社所属。 主にVPN(OpenVPN)やセキュリティ関連技術、Webアプリケーションを手がけています。
Page Views
Popular Posts
-
「VPNっていろいろあるけど、OpenVPNのメリットって何?」 という疑問は多くの方が持たれますよね。この点は公式サイトなどにもいろいろ書かれているのですが、実際に使ってきたユーザー側としてメリットと思う部分をまとめてみました。
-
現在ダウンロードできるOpenVPNでは、今まで認証局の構築で使用していたeasy-rsaが含まれなくなっています。 OpenVPN.netのダウンロードページ にも Note that easy-rsa is no longer bundled with OpenVPN...
-
Jan Just Keijser氏の記事「 Optimizing performance on gigabit networks 」については こちら でも概要を取り上げましたが、記事全体にいろいろなヒントが含まれていますので、全文の日本語訳を掲載しています。意訳している部分も...
-
OpenVPNでは、接続してきたクライアントのVPNアドレスは動的に割り振られます(その際に割り振られる際のアドレス範囲はOpenVPNサーバー側設定ファイルに基づきます)。特定のVPNクライアントに特定のVPNアドレスを割り振りたい場合、OpenVPNでは以下の2つの方法で設定...
-
では、いよいよiPhone構成ユーティリティでVoDの設定をしてみましょう。あ、 前の記事 での準備はきちんとやっておいてくださいね!
-
前回 は2つのワンタイムパスワードの生成方法について取り上げました。今回はいよいよ実際の生成アルゴリズムを取り上げましょう。TOTPをベースに説明します(ただ、前回も解説したように、基本的なロジックはTOTPとHOTPで同じです)。 参考としてpythonのコードも併記してみま...
-
現時点においてはマニュアルやHowToにも記載されていない(ChangeLogにちょっとだけ出てきます)あまり知られていない機能なのですが、「設定ファイルで鍵ファイルや証明書ファイルのパスを記載する」という通常の方法とは別に、「鍵ファイルや証明書ファイル内のデータをそのまま設定フ...
-
OpenVPNはLinuxをはじめとした幅広いプラットフォームで動作実績があるのが特徴の一つです。 今回は、最近の電子工作ブームでも話題のシングルボードPC 3機種をOpenVPNサーバーとしてセットアップし、OpenVPNのVPNパフォーマンスを測定してみましょう。 ...
-
前回 はワンタイムパスワードの基本的な仕組みについて説明しました。サーバー側とクライアント側で、それぞれ共通のルールに基づいてパスワードを生成させる必要があることを取り上げましたが、今回は OATH が規定しているその生成ルールについて具体的に説明します。 ワンタ...
-
OpenVPNを使用している方ならよくご存知だと思いますが、通常OpenVPNでは証明書認証を使用します。証明書認証はID/パスワード認証に比較すると安全性が高いとされます(もちろん、秘密鍵の管理方法に大きく依存します)が、証明書認証の概念を理解しにくいユーザーが秘密鍵や証明...
© yamata::memo 2013 . Powered by Bootstrap , WebLyb
0 件のコメント :
コメントを投稿