カテゴリー: Computer

  • 不適切なアドバイザリ(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

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

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

    福岡でのセミナー資料を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、メモリチェック、のみではなくコンデンサチェックも必要なのですね…

  • 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のリリースも近いかも。

  • 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

  • マルチブート環境の構築ページを更新

    WikiにGRUBのChainloader(別のブートプログラム呼ぶ機能)を利用したマルチブート環境構築のページがあります。デバイスIDが間違っていた部分がありました。比較的参照数も多いようなのでここでも修正した事を書きます。もし参考にされた方がいらしたら修正したのでご覧ください。

    私のデスクトップPCには3、4つのLinuxディストリビューションがインストールされているのが普通の状態なのでchainloaderを使ったマルチブート環境にしています。前にGoogleで検索してもこの手のマルチブート環境の構築手順が書いてなかったのでこのページを作りました。WindowsのNTLDRやGRUBの/bootパーティション共有を使ったマルチ・デュアルブートよりはるかに使いやすいです。興味のある方は是非どうぞ。

  • VMware Playerで新しいVMの作成

    VMware Playerで新しいVMの作成、と言う話ですがこの問題(?)はVMwareは知りつつVMware Playerをリリースしているのだと思います。VMware Playerのみでは色々使いづらいので本格的に使うにはVMware Workstationが必要になり、さらにサーバで使うにはGSX Serverなど使う、などのマーケットがあるのでそれで良い、という考え方なのでしょう。

    元になる仮想マシンのファイルさえあれば、ファイルをコピーした後に新しいOSをCD/DVDデバイスからインストールする、という単純な手順で新しい仮想マシンに新しいOSをインストールできます。

    私がVMware Playerを使ってみた感想
    http://blog.ohgaki.net/index.php/yohgaki/2005/10/22/vmwareplayer

  • register_globals=onが必要なアプリ対策

    register_globals=onで運用しなければならないアプリケーションはまだ結構あるようです。古いPHPには

    http://blog.ohgaki.net/index.php/yohgaki/2005/11/09/phpa_rc_fei_a_oa_oa_fa_sa_le_acsa_oe_afp_2

    の$GLOBALS改ざん問題がありますが、アプリの動作検証などには時間が必要です。snortを利用してIPSを作る方法もありますがPHPで対応する簡単な方法を紹介します。(注:完全な対策ではありません)

  • PHP 5.0.5の参照エラーを回避するパッチ

    PHP 5.0.5の場合、不必要なFatalエラーが多発します。

    Fatal error: Only variables can be passed by reference in
    /home/yohgaki/public_html/pukiwiki-1.4.5_1.orig/rules.ini.php on line 26

    私も最初は本気でこのような仕様にするつもりか、と思いましたが5.0.6では修正されます。

    パッチを当てることでPHP 5.0.5で発生するエラーを回避できます。

    ところでPHP 5.0.xはMMAPの利用方法にバグがある為、2MB以上のファイルを取り扱えない場合があります。この問題にはこちらのパッチをどうぞ。

  • PostgreSQL 8.1リリース

    実はリリースされていた事は知りつつスルーしていたのですが微力でも宣伝を。

    PostgreSQL 8.1は本当に速いでも紹介していたPostgreSQL8.1がリリースされています。

    速いだけでなくうれしい新機能も盛り沢山です。是非使ってみてください。

    新しい、先進的データベース機能

    ロール:PostgreSQLがデータベースロールをサポートするようになりました。ロールにより、データベース権限が複雑に関連し合うような大規模なユーザ管理が簡単に行うことができます。

    IN/OUTパラメータ:PostgreSQLの関数がIN、OUT、INOUTパラメータをサポートするようになりました。これにより、J2EEや.NETアプリケーションにおける複雑なビジネスロジックのサポートが改良されました。

    2相コミット(2PC:Two-Phase Commit):2PCはWAN環境におけるアプリケーションで長い間待ち望まれていた機能です。広域ネットワーク上に分散したサーバ間でACID特性を持つトランザクション処理を可能にします。(訳注:「ACID」とは、Atomicity(原子性)、Consistency(一貫性)、Isolation(隔離性)、Durability(耐久性)の頭文字です。)
    性能の改善

    マルチプロセッサ(SMP)環境における性能改善:バージョン8.1におけるバッファ管理機構は、8-way、16-wayシステムやデュアルコア、マルチコアCPUのサーバにおいて、プロセッサ数に対してほぼリニアにスケールします。

    ビットマップスキャン:インデックスは状況に応じて自動的にメモリ内部でビットマップに変換されます。この機能によって、大規模テーブルに対する複雑な問い合わせのインデックス検索が20倍以上高速化されます。また、複数列に対するインデックスを作成する必要性が減少し、データベース管理が簡単になります。

    テーブルパーティショニング:バージョン8.1では、制約による排他といわれる技法を用いて、問い合わせプランナが大規模なテーブル全体をスキャンしないようになりました。他のデータベース管理システムにおけるテーブルパーティショニング同様、これにより数ギガバイトのテーブルに対する性能とデータ管理が改良されました。

    共有行ロック:PostgreSQLの「行レベルロックよりも優れた方法」に、共有行ロックの機能を追加することで、より高い同時実行性をサポートできるようになりました。共有ロックにより、大量のOLTPを必要とするアプリケーションでの挿入・更新の性能が向上するはずです。

    Reliable Computer Solutionsのデータベース管理者であるMerlin Moncureは次のように述べています。「PostgreSQL 8.1によって(私たちの)Opteron デュアルプロセッサ運用用サーバで非常に大きな性能向上が実現しました。具体的にいうと、CPU負荷において20%、サーバの負荷特性においては20から40%もの性能向上が見られました。」

    この他にも120項目以上におよぶ改良が行なわれています。詳しくは8.1 プレスキットを参照してください。

    ダウンロード: http://www.postgresql.jp/PostgreSQL/download.html
    日本PostgreSQLユーザ会: http://www.postgresql.jp/
    PostgreSQL Project: http://www.postgresql.org/