• 不適切なアドバイザリ(was 間違ったアドバイザリ) – PHP

    SECUNIAから間違った不適切なアドバイザリがレポートされていました。アドバイザリは下記の引用を参照してください。(Web版は修正される可能性もあるので直接貼り付け)

    基本的にはメールに送信するTOをスクリプトでチェックしていない事がスクリプトの問題です。

    TO(あて先)RFC822の仕様に従いヘッダに記載される情報をCR/LFと1以上の’ ‘(スペース)かタブで区切れる事になっています。この処理に問題がありSPAMメールを送信する踏み台にされるケースがあったようです。mailは元々はsendmailコマンドを使ってメールを送信(Windowsの場合はSMTPですが)するように作られているのでTOにRFC822仕様のデータを送るのはスクリプト側に問題があると思います。

    これはPHPの脆弱性と言えない部分もあるのでそもそものアドバイザリが間違っています不適切と思います。”Moderately critical”と言うレベルも不適切です。さらに対処方法まで間違って不適切です。どちらかと言うとアプリの脆弱性としてレポートした方が良いのではないかと思います。アプリの脆弱性とレポートした方がPHP本体をバージョンアップするより、アプリのバージョンアップの方が簡単なのは明らかですから。しかし、mailと比べるとmb_send_mailの実装に不備があったのは確かなのでPHPの脆弱性である、とも言えるので微妙なアドバイザリだと思います。

    スパムメール送信の踏み台に使われたアプリがどのアプリか知りませんが、どれかのWebメールプログラムだと思います。WebメールプログラムはWebアプリの中でも安全に構築する事がかなり難しいアプリの一つです。Webメールアプリを作られる方はTOヘッダに送る情報はチェックした方が良いと思います。

    この件と似た例ではsafe_modeのアドバイザリがあります。「DBMSからファイルを読み込めばsafe_modeを回避できる」と言うアドバイザリ等、safe_mode関連ではアドバイザリが幾つかあります。PHP本体の開発者はsafe_modeチェックの不足があれば、問題として捉えるべきとは思います。しかし、DBからファイルロードしてアクセスする、となると話は別です。PHPプログラマはsafe_modeはfail_safe_modeと考えて、意図せずコードに問題があり不正にファイルにアクセスできてしまった時の防衛策、位の安全を提供する機能と考えるべきです。しかし、しばしば本当に安全で完全にファイルへのアクセスを制御できる、と思われがちです。

    PHPはプログラミング言語とは言ってもフレームワーク的な要素を持っているので、safe_modeやsafe_modeに順ずるチェック行うべきではない、とも言えません。他のスクリプト系言語でもユーザ入力についてはフレームワーク的に対処していたりしています。どこまで行うべきか悩ましい所と思います。

    PHP6ではsafe_modeは削除候補ですが、個人的にはsafe_modeは有用なのでfail_safe_modeとして残っていた方が良いと思っています。悪貨(不適切なアドバイザリ)が良貨(有用な機能)を駆逐している、という感想です。

    備考:きちんとTOアドレスを確認している方はこのアドバイザリを気にする必要はありません。きちんと確認していない場合、PHPのバージョンアップは必要ありません。自分のコードを修正しましょう。

    追記:最初にこのエントリを書いたときにcvs upの不良でmb_send_mailではチェックしている項目をmailではチェックしていない、と思っていました。しかし、PHP 5.1.1でmailではチェックされていた事をmb_send_mailでもチェックする様になった、が正しいです。komuraさん、ありがとうございました。

    <blockquote>From:Secunia Security Advisories <sec-adv@secunia.com>
    Date:28 Nov 2005 14:19:43 -0000
    Subject:[SA17763] PHP “mb_send_mail()” “To:” Header Injection Vulnerability
    ——————————

    TITLE:
    PHP “mb_send_mail()” “To:” Header Injection Vulnerability

    SECUNIA ADVISORY ID:
    SA17763

    VERIFY ADVISORY:
    http://secunia.com/advisories/17763/

    CRITICAL:
    Moderately critical

    IMPACT:
    Security Bypass, Manipulation of data

    WHERE:
    >From remote

    SOFTWARE:
    PHP 4.4.x
    http://secunia.com/product/5768/
    PHP 5.0.x
    http://secunia.com/product/3919/

    DESCRIPTION:
    s.masugata has reported a vulnerability in PHP, which potentially can
    be exploited by malicious people to use it as an open mail relay.

    The vulnerability is caused due to an input validation error in the
    “mb_send_mail()” function. This can be exploited to inject arbitrary
    headers in a mail sent via a script calling the “mb_send_mail()”
    function where the “To” parameter can be controlled by the attacker.

    SOLUTION:
    Update to version 5.1.0.
    http://www.php.net/downloads.php

    Do not call the “mb_send_mail()” function in scripts where input
    passed to the “To” parameter originates from untrusted sources.

    PROVIDED AND/OR DISCOVERED BY:
    s.masugata

    ORIGINAL ADVISORY:
    The PHP Group:
    http://www.php.net/release_5_1_0.php

    s.masugata:
    http://bugs.php.net/bug.php?id=35307

    ———————————————————————-

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

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

    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スクリプトとして実行可能です。イメージ形式を識別しているからと言って安心することは出来ません。

    ■まとめ

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

  • 福岡でのセミナー資料のダウンロード

    福岡でのセミナー資料をWikiからダウンロードできるようにしました。

    会場でもご案内しましたが高橋メソッドで行ったプレゼン分のアップロード予定はありません。

    今気が付きましたが、高橋メソッドが本になったんですね! 名前も「でかいプレゼン」しかも今のAmazonのランキングは4000位くらい!すごい :)

  • PHPセキュリティホール対策緊急セミナー福岡

    日付が変わってしまい、今日ですがまだプレゼンファイルを作成中です…

    私は状況がよく分かっていないのですが、どうも席にあまりがでそうな状況だそうです。実験というのも変ですが、試しに明日「このブログエントリを見て来ました」と言われた方にこのブログでも宣伝させていただいている「改訂版PHPポケットリファレンス」を2名様にプレゼントします。私は2枠あるので各セミナーの終わりに「ブログを見ていらした方は?」とお聞きします。その際に手をあげてください。

    次がセミナーの概要です。近くでお時間がある方は是非どうぞ。

    「PHPセキュリティホール対策緊急セミナー福岡」

    2005年10月31日、PHPの最悪とも言えるセキュリティホールが見
    つかりました。福岡の多くの企業は、Webの運用には次のようなシ
    ステムを多く使われています。
    LAMP(Linux + Apache + MySQL + php)
    LAPP(Linux + Apache + PostgreSQL + php)
    そこで、今回この脆弱性の緊急対策を中心にphpの新しい話題のご紹
    介を行います。このphpにたいする緊急パッチを作成した大垣さんな
    どコアな方から直接詳細を聞く事が出来ます。またphpはJavaのよう
    にフレームワークがまだ一般的ではなく作成者によってかなり作りが
    違うのが現状です。そこで大規模なシステム開発に向けてのヒントを
    共有しphp技術者の向上に役立てばと考えています。

    年月日:2005年12月2日(金)
    時間:13:00から17:10
    場所: 福岡市博多区博多駅東2-3-1 NTT博多ビル東館1階
    電話:092-473-4330
    http://www.itplaza.net/itplaza/fukuoka/fukuoka.htm
    受講費用:1,000円
    人数:50名(先着順)
    講師:
    大垣靖男
    内田 圭亮(エヌビーエス株式会社)
    案浦浩二(株式会社アニーズ・クラフト)

    主催:ライジングサン株式会社
    協力:
    株式会社アニーズ・クラフト
    日本オラクル株式会社 西部支社
    NTT西日本(西日本電信電話株式会社)
    エヌビーエス株式会社
    ゼンド・ジャパン株式会社
    日本PHPユーザ会
    日本PostgreSQLユーザ会

    プログラム
    13:00 受付
    13:30~13:40 「あいさつ」
    13:40~14:30 「php脆弱性とバージョンアップ」大垣さん
    14:40~15:40 「php脆弱性をIPSで回避」エヌビーエス
    15:50~16:30 「エンタープライズでphpを使う時のTips」大垣さん
    16:40~17:10 「Zend Core for Oracle 日本語版」

    懇親会
    18:00~20:00、費用は、2,500円程度?

  • 廣川さんのPHPウォッチ

    廣川さんのPHPウォッチにも書いてありますが、PHP 4.4で壊れてしまったmbstringの関数が修正されています。廣川さんが枡形さんのパッチやその他のパッチをコミットされていたのでこれらの問題に困っていた方はCVS版(PHP 4.4.2RC)などを試されるとと良いと思います。ざっと見た感じではPHP 5.1.1にはPHP 4.4.2に含まれている修正が全て入っています。

    この記事にはPHP6の概要も記載されています。まだまだ気が早いとは思いますがPHP6でも動くコードを書くためのヒントになると思います。

  • PHP 5.1.1がリリースされました

    標準でDateクラスはまずいでしょう、と思っていたのですがやはりクレームが沢山ありました。Dateクラス問題解消のために5.1.1がリリースされた、と言っても良いと思います。safe_modeがデフォルトOnになったにも関わらずcURLのsafe_mode時の動作がまずい、HTTPダイジェスト認証の動作が異なる、という問題も速いアップデート版リリースの一因です。

    備考1:標準でDateクラスが定義されるようになった、と言うことは自前でDateクラスを持つコードは5.1では動作しない事を意味します。

    備考2:普通はDIGEST認証は使いません。クライアント任せの部分があり互換性に問題があるからです。とは言ってもイントラネットなどでクライアント決め打ちでDIGEST認証を使っている環境では動作の違いは致命的です。

    追記:
    getenvでエラーが出たのは–enable-safe-modeを指定していたのと同じ状態だったようですね。わざわざこのオプションを付けた記憶はないのですが(というより指定してコンパイルした事がない)ちょっと条件は分からなくなってしまいましたが–with-apxs2を指定しているのにlibphp5.soが生成されなくてmake installでlibphp5.soが所定の場所にインストールされず、ハマリそうになりました。生成された./configureスクリプトが変だったのかな?

  • 不良コンデンサ問題

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

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

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

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

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

  • Google Analytics – 試してみようと思ったら

    最近発表されたGoogle Analyticsを試してみようと思ったらニーズが多すぎて利用制限をしていました。

    internet.com
    によるとGoogle Analyticsには高機能なアクセス分析機能が提供されているらしいですが暫らく待たなければならないようです。気づくのが遅すぎました…

  • RubyForgeのプロジェクトが1000を越える

    2003年6月からスタートしていた http://rubyforge.org/ の登録プロジェクトが1000を越えたそうです。

  • 実践!セキュリティシステム!の会

    住基カード用電子署名ライブラリ などを開発するオープンソースプロジェクトだそうです。
    出来上がったら色々応用できますね。楽しみです。

  • PHP 5.1.0がリリースされました

    PHP 5.1.0がリリースされました。

    アップグレードガイド(必読)
    http://www.php.net/README_UPGRADE_51.php

    変更箇所
    http://www.php.net/README_UPGRADE_51.php

    追記:5.1.0がリリースされたばかりですが、5.1.1のリリースも近いかも。

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

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

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

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

  • b2evolutionのコメントスパム削除

    このブログ(b2evolution)にコメントやトラックバックがあった場合、メールで通知されます。しかし、通知されたメールに記載されている削除/編集用URLをクリックしても必要なデータが表示されません。コードを詳しく追いかけていないので根本的な対処ではありませんが、以下の変更でメール記載されたURLでコメント/トラックバックを表示し編集できるようになります。これでスパマーのキーワード登録も簡単になります。(b2evolutionは結構前からスパムデータベースを共有できるようになっています)

    admin/_edit_showposts.phpの変更箇所(行頭の数字は行番号)

    59 //$MainList = & new ItemList( $blog, $show_statuses, $p, $m, $w, $cat, $catsel, $author, $order, $orderby, $posts, $paged, $poststart, $poste nd, $s, $sentence, $exact, $preview, '', '', $timestamp_min, $timestamp_max );
    60 $MainList = & new ItemList( $blog, $show_statuses, $p, $m, $w, $cat, $catsel, $author, $order, $orderby, $posts, $paged, 0, $postend, $s, $se ntence, $exact, $preview, '', '', $timestamp_min, $timestamp_max );

    私はあまり使わないのですが「編集」のページで以前に書いたエントリを表示出来なくなるようです。他にも副作用があるかも知れません。取り合えず溜ったコメント/トラックバックスパムの削除が面倒だったので上記の変更をしました。

    ところで0.9.1からrel=”nofollow”が付く、とb2evolutionのサイトに記載されているのですがrel=”nofollow”はメンバーのコメント等にのみ付いているようです :(

  • 構造計算書偽造とインターネットに接続されたシステムの類似点

    マンション等の構造計算書を偽造した事件が大きな話題となっています。偽造した構造計算書を作成した設計事務所の設計士が「コストを安くしないと仕事をもらえないと思った」、建築業者が「施行主の指示の問題の建築事務所を利用した」等を発言していると聞きインターネットに接続されたシステムに類似点があることが気になりました。

    本来Webサイトは「安全」である事に重点をおいて構築されなければならないですが現実はそうではありません。インターネットのシステムの場合、他人の生命に影響するようなシステムはほぼないこと、財産に大きく影響するシステムもネットバンキングやネット証券のようなごく一部のシステムしかないことから「安全」に対してそれほど大きな注意が払われていない事がよくあるようです。実際、比較的有名なサイトのセキュリティ管理が、ごく基本的なセキュリティ管理さえ行わず、非常に悪い状態にあった事例が多くあります。少し古い話になりますが、日本の著作権関連会社の代表者が、安全なWebサイトでなければサイトを公開できなければ中小の企業はWebサイトを公開できないではないか、といった旨の発言をしたという記事もありました。”組織として中小なんだからセキュリティ対策が出来ていなくても当然”と開き直ってよい物ではありません。建物が倒壊すると建築主以外にも被害が発生するように、インターネットシステムの安全性が確保できていないと他人を攻撃する踏台にされ他人に大きな迷惑をかける事になる場合もあります。

    安全なシステムを構築するには、安全性を考慮しないシステム構築より多くの費用が必要となるのは明らかです。しかし、Webシステム開発の場面でも「コストを安くしないと仕事をもらえないと思った」や「発注者の指示で必要なセキュリティ対策が施せない(施さない)」ケースは非常に多いのではないかと感じます。システム構築は建物の建築とは違い安全性が十分であるか確認する仕組みが無いため、より状況が悪い事はこの業界の方でなくても分かると思います。

    プロによって作られた物が「安全」であることが当り前ではないという類似点が構造計算書偽造事件とインターネットのシステムにあります。安全性に問題が発生する背景にも類似点があります。この状況を変えるには発注者と受注者、”両方”の意識を変えなければなりません。

    # プロが作っている物でも驚くような仕様になっている場合
    # があります。インターネットとは関係の無い古い例で
    # すが、1985年以前に作られた銀行のキャッシュカードには
    # 磁気テープにカードの暗証番号が保存されていた物がある
    # そうです。
    # インターネットのシステムでこれに類するような事例は多
    # くあります…

  • Web 2.0

    メモとして。Tim O’ReillyのWeb 2.0論文の邦訳がCNet Japanに掲載されている。

    元はこちら
    http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html

    リンク:
    http://www.oreillynet.com/pub/a/network/2005/10/27/distributing-the-future.html
    http://www.onjava.com/pub/a/onjava/2005/11/02/community-of-web-20.html