脆弱性がオークションに

脆弱性がオークションに

eBayでEXCELの脆弱性が売りにだされたそうです。eBayの基準に合わないとして削除されたそうですが、0.01ドル(1セント)から売りに出され21件の応札があり$56にまで値上がりしたそうです。
# 似たような事は前にもあったと思いますが見つけられませんでした。

qmailの脆弱性なら作者から$500、qmailのユーザグループから$1000djbdnsの脆弱性なら$500の懸賞金がもらえます。

途中で削除されたとはいえ$56は高いのか安いのか?

JNSAセキュアシステム開発ガイドライン

今の所ベータ版のようですがJNSAから「JNSAセキュアシステム開発ガイドライン」という文書が公開されています。

非常に細かい部分では追加・修正しても良いのかな?と思える部分もありますが、全体としては非常に良い文書だと思います。Webシステム開発で不十分なRFPをもらった時には利用させてもらいます。確かJNSAの文書は会員でないと自由にダウンロードできなかったので正式版になる前に非会員はダウンロードできなくなると思います。参考にされたい方はダウンロードはお早めに!?

ブログエントリを更新

もうちょっと検証してからブログエントリを公開しては?とご指摘いただいたので。

ブログの紹介にエクスキューズとして「個人的に気になったことなどを思いのままに書いています。他の方に役立つかは不明です。」とは書いていても読まれる方が増えているので、そうも言ってられません。2005/12/06のエントリには間違いがあったので修正・追記しました。既に2005/12/06のブログエントリを読まれた方は修正版も是非どうそ。

http://blog.ohgaki.net/index.php/yohgaki/2005/12/06/a_a_ia_ca_la_a_a_a_lphpa_sa_ma_oa_a_a_ua
http://blog.ohgaki.net/index.php/yohgaki/2005/12/06/e_e_a_pa_a_ca_a_a_ca_pa_o_php

ファイルが勝手にスクリプトとして実行される

また困った問題が見つかりました…(問題と言うより仕様に気が付きました)

full-disclosureで「これおかしくない?」と報告されています。Wikiがフィッシング(Phishing)に利用される問題などがあったので影響を受けるシステムは少なくなっている、とは思いますが直ぐに攻撃のまだまだ影響を受けるシステムも多いと思います。

個人的にはLinux上のApache 2.0.54上のPHP 5.0.5/PHP 5.1.1が影響を受ける事を確認しました。
(Mac OSXでも同様の動作である、と聞きました)

http://137.113.100.11/manual/ja/mod/mod_mime.html

によると

ファイルは複数の拡張子を持つことができ、拡張子の順番は通常は関係ありません。例えば、ファイル welcome.html.fr がコンテントタイプは text/html に、言語はフランス語にマップされる場合、welcome.fr.html もまったく同じ情報にマップされます。 同じメタ情報にマップされる拡張子が複数あるときには、右側にあるものが使用されます。たとえば、”.gif” が MIME タイプ image/gif にマップされ、”.html” が MIMEタイプ text/html にマップされる場合は、ファイル welcome.gif.html は MIME タイプ “text/html”に関連付けられます。

複数の拡張子のあるファイルが MIME タイプとハンドラの両方に関連付けられているときは注意する必要があります。その場合、普通はリクエストがハンドラに関連付けられた モジュールによって扱われることになります。たとえば、拡張子 .imap が(mod_imap の) “imap-file” にマップされていて、 .html が MIME タイプ “text/html”にマップされているときは、ファイル world.imap.html は “imap-file” ハンドラと “text/html” MIMEタイプに関連付けられます。ファイルが処理されるときは “imap-file” ハンドラが使用されますので、そのファイルは mod_imapのイメージマップファイルとして扱われることになります。

つまり、test.php.bakがPHPスクリプトとして実行されるのは仕様のようです。

記憶が曖昧ですが古いApacheはこんな動作ではなかったと思ったのですが、調べてみると1.3からはずっと同じのようです。

拡張子による適用されるハンドラのチェックは普通に行われているので、この仕様には十分注意が必要ですね。

■概要

アップロードされたファイルなどがスクリプトとして実行できる。

■問題

Aapche 1.3系、2.0系のSAPIとして動作(Apacheモジュールとして動作)させている場合、httpd.confのAddTypeディレクティブで登録された拡張子のファイルのみPHPスクリプトとして実行されるべきです。最近(?)のPHPのApache SAPIは登録された拡張子以外のファイルをPHPスクリプトとして実行してしまう仕様のようです。

例えば、test.php.bak, test.php.rar などhttpd.confにAddTypeでPHPスクリプトとして登録されていないファイルの場合でも勝手にPHPスクリプトして実行されます。PHP以外の言語ハンドラでも同様です。

サンプルスクリプト

<?php echo “This file is executed as PHP script” ?>

このスクリプトをtest.php.bakとしてドキュメントルート以下のディレクトリに保存し、PHPがインストールされている場合、PHPスクリプトとして実行する事が可能です。

Apacheに登録されていない特殊な画像ファイル(psd等)、圧縮ファイル(rar等)、マイナーな文書形式(.jwt等)、etcを取り扱っているサイトは注意が必要です。

私の環境では.html, .txt, .gif, .png等Apacheに登録済みの拡張子はスクリプトとして実行されませんでした。

未検証ですがPHPのみでは無くCGIでもAddHandlerで登録されたハンドラでも同じだそうです。

/cgi-bin/test.cgi.bak

でも同じ様にスクリプトが実行されるそうです。

■影響

主にこの問題の影響を受けるアプリケーションはファイルをアップロード可能なシステムです。アップロードされたファイルがドキュメントルートに配置されている場合、簡単に任意スクリプトをローカルホスト上で実行される可能性があります。

例えば、PHPの

bad.php.bak

等のファイルアップロードされ、ブラウザから参照できるディレクトリに置いてあるとリモートから任意のスクリプトを実行される場合があります。

■対処策

対処策にはいくつかの方法があります。

1.ユーザからアップロードされたファイル等、信頼できないファイルをドキュメントルート以下に配置しない。(そもそも、アップロードされたデータ全てはドキュメントルート以下に配置するべきではありません)
2. Apacheで明示的にTypeが指定されていないファイルはアップロードさせない。(1の対処をするべきです。直ぐには不可能な場合のみ。非推奨)
3.アップロードされる可能性のある拡張子はhttp.confで別のTypeとして登録する(1の対処をするべきです。直ぐには不可能な場合のみ。非推奨)

備考:PHPに限らずイメージ識別関数はファイルのヘッダ部分のみチェックしています。PHPの場合、スクリプトタグ以外の部分単純にecho出力されるためイメージ形式識別関数で形式をチェックしていても普通にエラーの無いPHPスクリプトとして実行可能です。イメージ形式を識別しているからと言って安心することは出来ません。

■まとめ

ファイルアップロードをサポートしている場合、ファイルはドキュメントルート以下に配置しない(基本)を守らないと色々ありますね…

不良コンデンサ問題

CNet Japanによると不良コンデンサが大きな問題になっているようです。

今回問題になったのは、色が黒と金の2色で、長さ約2.5センチの低ESR(等価直列抵抗)アルミニウム電解シリンダというキャパシタで、側面に HN(M)およびHM(M)のマークがあり、上部には「X」の文字が刻印されている。このキャパシタは一部のマザーボードやビデオカード、さらにPC、モニタ、ビデオデッキ、テレビなどの電源にも採用されている。

7年くらい持つはずが3,4年で不良になるそうです。気になる方は問題のコンデンサの写真も載っています。iMac G5, Dell OptiPlex, HP wx等で問題のコンデンサが使用されている事が分かってるそうです。

これらの不良キャパシタには、膨張、突出、流出、硬化などの現象が発生し、その結果画面の表示がおかしくなったり、断続的にシステムが停止してしまうことが明らかになっている。

調子が悪くなったらHDD、メモリチェック、のみではなくコンデンサチェックも必要なのですね…

カレンダーナビゲーションリンクの作り方

人が作ったシステムを見ていると色々気付かされることがあります。b2evolutionのカレンダーなどのナビゲーションリンクはエントリが無い未来・過去の日付もだどれる様になっています。私は、特定の場合を除き、通常表示できるデータがある範囲だけリンクが表示されるように作ります。

このb2evolutionのナビゲーションの仕様はデータベースには優しい仕様ですが、検索エンジンのインデックス作成robot等には優しい仕様ではありません。例えば、あるロボットは3000年のエントリくらいまで検索していってくれます。当然役立つ情報はなく「申し訳ありません。表示する投稿がありません…」と表示されるだけです。アクセス統計情報、SEO的にも問題ではないかと思います。

データベースと連動したサイトを構築する場合にはロボットによる無限検索のリスクを考えないとならないです。データベースにも検索エンジンにも優しいカレンダーナビゲーションにするにはデータベースに新たなエントリ追加があった場合にナビゲーション用データをキャッシュする仕組みにすると良いと思います。