• PHP 5.2.3のchunk_split()は未修整だった…

    http://blog.php-security.org/archives/84-PHP-5.2.3-released….html にも書いてあるのですが、PHP 5.2.3ではchunk_split()が直っているハズだったのですが直っていませんでした。

    Fixed an integer overflow inside chunk_split() (by Gerhard Wagner, CVE-2007-2872)

    直したつもりが整数オーバーフローが発生するコードになっており、ヒープオーバーフローが発生します…

    CVSには修正コードがコミットされています。

    http://cvs.php.net/viewvc.cgi/php-src/ext/standard/string.c?r1=1.445.2.14.2.60&r2=1.445.2.14.2.61

    Fix chunk_split fix – avoid using floats
    Fix money_format – don’t give strfmon more arguments then supplied
    Fix str[c]spn integer overflow

    他のセキュリティFIXもあるのでPHP 5.2.4のリリースは近い(?)かな…

    Cのコードを読める方なら気が付くと思いますが、整数オーバーフローによりdestバッファに十分なメモリが割り当てられない問題に対してint型の変数とINT_MAXを比較、符号のチェックをしても意味がないのは明白です。(負の値になった時しかチェックしていないので対策になっていない)

    この指摘に対してBogusだとかFUDだとか言われるのは非常に心外だと思います。セキュリティ問題に対して正しい姿勢や理解を持っていない開発者と話をするのはかなりの疲労を伴う作業だ、という事がStefanさんのブログからは分かります… 文面からも最近フラストレーションが溜まっているような気もします。コードをチェックするStefanさんがいるPHPといないPHPでは安全性に大きな違いが発生すると思います。Hardened-PHPやMOPBをサポートするにはPayPalによる寄付もありますが応援メールも有効です。(こういうメールは英語が下手でも問題はないです)

  • PHP 5.2.3リリース

    日本語環境でMySQLを利用している方には、リリースノートに記載されているmysql_set_charset()の追加に重要な意味がある方も多いと思います。

    Added mysql_set_charset() to allow runtime altering of connection encoding.

    PHP4にはまだ追加されていませんがかなり重要なセキュリティフィックスだと思います。mysql_set_charset()はlibmysqlのmysql_set_character_set()の簡単なラッパー関数です。

    http://dev.mysql.com/doc/refman/4.1/en/mysql-real-escape-string.html

    “If you need to change the character set of the connection, you should use the mysql_set_character_set() function rather than executing a SET NAMES (or SET CHARACTER SET) statement. mysql_set_character_set() works like SET NAMES but also affects the character set used by mysql_real_escape_string(), which SET NAMES does not”

    つまりSET NEMESだと文字エンコーディングを利用したSQLインジェクションに脆弱となる可能性があります。共有型サービスを利用されている場合、SET NAMESを使用している方も多いと思います。

    ググってみると2005年11月には日本のMySQLユーザ会MLでは問題が認識されていたようです。

  • PostgreSQLカンファレンス2007

    明日開催されるPostgreSQL2007は会場費等の為に2000円でローソンチケットでチケットを販売していました。ローソンチケット分は完売で現在購入できないそうです。しかし、当日券を会場にて販売(当日券は3000円だそうです)するそうです。もしチケットを入手できなかった方は現金で購入できるそうです。領収書も発行できるので仕事の都合がつく方は是非お越しください。

  • PostgreSQLカンファレンス2007

    最近忙しすぎてブログの更新が全くできない状態がつづいていますが、PostgreSQLカンファレンス2007が2007/6/5(火)に秋葉原UDXにて開催されます。私もRoom C(定員60名: 16:00~16:55)で講師を務めさせていただきます。私がメールを読んでいなかった為、私の資料は印刷物には入っていません… この為当日自分で持って行くことになってしました…
    # 関係者の皆様、ご迷惑をおけしました。

    Room C(60名)16:00~16:55
    WEB+DBアプリケーションのセキュリティ(仮)
    PHPユーザ会/日本PostgreSQLユーザ会
    大垣靖男 様

    セキュリティ対策はまず基礎知識から、ということでPostgreSQLを安全に利用するための基礎知識を解説させていただきます。今回は初めてデモを予定しています。SQLインジェクションに脆弱だといかに簡単に不正にデータを取得したり、データベース設計を解析できるかをデモンストレーションする予定です。SQLインジェクションに再確認されたい方、SQLインジェクションは知っているがどの程度の攻撃が可能か詳しく知らない方であれば、PostgreSQLユーザのみでなく、全てのSQLデータベースを利用されている開発者に有用な講演になると思います。

    ローソンチケットによるとまだチケット(2000円です。会場費などに利用されます)は買えるようです。いろいろ有用なセミナーがそろっています。都合が良い方は是非お越しください。

  • CAPTCHAをお金で…

    SPAMはお金になる、ということでCAPTCHAを解読して売っているそうです。

    1000のCAPTCHAを解読して7~15$だそうです。一時間に数百くらいしか解読できないと思われるので、日本なら普通のバイトの方がよっぽど儲かります。しかし途上国では特別なスキルなしに収入になるのでこのような低報酬でも十分です。

    CAPTCHAも使い物にならなくなるとSPAM対策は非常に難しくなります…

  • VMWare上のUbuntu 7.0、CentOS5

    VMWare上にUbuntu 7.0をインストール(正確には6.xから7.04にアップグレード)してみました。6.xのときからvmwareのマウスドライバがインストールされないため、ホスト・ゲストOS上でマウスカーソールが移動できませんでした。

    あまり気にしていなかったのですがCentOS5をゲストOSとしてインストールしても同じようにマウスポインタが移動できません。さすがに2つのゲストOSでマウスポインタが思ったように動作しないのは面倒なので調べてみることにしました。

    CentOS5の/etc/X11/xorg.confをvmwareのマウスドライバを使用するようにすると動作するようになりました。

    Section "InputDevice"
    Identifier "Mouse0"
    Driver "vmmouse"
    Option "CorePointer"
    Option "Device" "/dev/input/mice"
    Option "Protocol" "IMPS/2"
    Option "ZAxisMapping" "4 5"
    EndSection

    Ubuntuの方はvmmouseドライバを指定するとドライバファイルが見付からないためXが起動しなくなりました。

    ln -s /usr/lib/vmware-tools/configurator/XOrg/7.0/vmmouse_drv.so /usr/lib/xorg/modules/input/vmmouse_drv.so

    とするとドライバをロードしマウスが期待どおり動作するようになりました。Ubuntu 7.0のXorgは7.2ですが7.0のドライバでも問題なく動作するようです。

  • MOBPを訳し終えて

    もう何年か前になりますがStefanさんがPHPプロジェクトへの貢献を始めたころ「整数オーバーフローの修正はセキュリティ脆弱性なのでそのことを明記すべき」と指摘した事がありました。信じがたいかもしれませんが「攻撃可能かどうか分からないし脆弱性でなく普通のバグ修正だ」と主張する開発者がいたためPHPのこの手のヒープオーバーフローセキュリティ修正は「fixed crash」とCVSログに書いてあるだけの場合が多く、NEWSファイルにも記載されない事が当たり前になっていました。

    (さらに…)

  • .xxxドメイン却下

    ここ数年間、議論されていた.xxxドメインが却下されたそうです。当然です。ほとんどフィッシングくらいにしか使われていない!? .infoや.bizよりも悪いドメインになりそうだった.xxxドメインが却下されて何よりです。

    新しいTLDはほとんど必要ないし、作って利益があるのはインターネットを利用するユーザでも、サービスの提供者でも無く、フィッシングをする悪人、屋号・商標などを登録して悪用(たとえば恐喝まがいのドメインセールス)する悪人またはレジストラだけです。

    IDNも至極迷惑なのですべてのブラウザがデフォルトで無効にしてほしいくらいです。標準に準拠しなくなる!という議論もあると思いますが、今のブラウザは標準準拠していない機能ばかりです。どうせ標準に準拠していないのでIDNに準拠しない方が問題が少なくなる、と考えている人も少なくないと思います。

    ha.ckers.orgに載っていたのですがSSLをURLに含めたフィッシング、たとえば

    http://evil.example.com/www.target.com/ssl/foo/bar/

    も一定の効果があるようです。何故なら、「Look for correct domain」(正しいドメイン名か確認せよ)、「Look for SSL」(SSLであることを確認せよ)と言われているからです。一般のユーザにとってSSLは何の意味もないことが多く、httpsがURLの先頭にあるとSSLになる事も知らない場合が多いのです。フィッシングを成功させるには一部のユーザをだますだけでも十分です。

    エンドユーザが安全にインターネットを利用するためにIDNが役に立つとは到底思えません。IDNが一般化すれば先ほどの馬鹿げた例よりもっと効率的にフィッシングできます。往々にしてコンピュータに詳しくないユーザがフィッシングに騙されやすく、新しいTLDやIDNでフィッシング被害に合う確率が高くなる、と予想できます。コンピュータに詳しくないユーザは、怪しいIDNリンクをクリックした後にxnで始まる名前に変換されても意味をなさない場合も多くあると予想できます。

    さらに日本語のIDNドメインは安全性の問題は重大だと思います。たとえば、

    http://テレビなら○○.com/
    http://DVDなら○○.com/
    http://○○のテレビ.com/
    http://○○のDVD.com/
    http://パソコンの○○.com/
    http://家電のことなら○○.com/
    http://安心の○○.com/
    http://○○のユーザサポートコーナー.com/
    http://○○のサポートサイト.com/
    http://聞いて安心○○サポート.com/

    複数の単語を使ったそれらしいフィッシング向きのドメイン名はいくらでも作れます。日本語ドメイン名にすることにより長いドメイン名でも違和感が少なくなります。適当に有名メーカ・ブランドの名前を○○に入れると騙されてしまうユーザはいくらでもいると思われます。匿名組合に投資して「パンフレットに有名企業の企業名とロゴがあったので信用したのに… 損失はその企業に補てんもらわねば」というお国柄です。マーケティングの事しか考えてない日本語ドメイン名が溢れ出すとどうしようもなくなります。

    もしIDNの利用が増えるようであれば、有名企業はIDNを使わないことを宣言してユーザに注意を喚起しなければならないと思います。IDN以外のドメインも、サービスを提供しているドメインはメインサイトで一覧にするなどの処置をし「リスト以外のサイトはフィッシングサイトの可能性があるのでご連絡ください」などと協力をお願いする方が良いと思います。

    とにかく、またTLDが増えなくて何よりです。IDNも無くなればよいのですが…

  • MOPB-44-2007:PHP 5.2.0 Memory Manager Signed Comparison Vulnerability

    Stefanさんの承諾を得て日本語訳を公開しています。このブログの「the Month of PHP Bugs」カテゴリでMOPBの翻訳ページを一覧できます。分かりやすいように意訳できる部分は意訳します。厳密に原文の通り訳していないので正確性を重視される方は原文をご覧ください。

    (さらに…)

  • MOPB-43-2007:PHP msg_receive() Memory Allocation Integer Overflow Vulnerabilty

    Stefanさんの承諾を得て日本語訳を公開しています。このブログの「the Month of PHP Bugs」カテゴリでMOPBの翻訳ページを一覧できます。分かりやすいように意訳できる部分は意訳します。厳密に原文の通り訳していないので正確性を重視される方は原文をご覧ください。

    (さらに…)

  • MOPB-42-2007:PHP 5 php_stream_filter_create() Off By One Vulnerablity

    Stefanさんの承諾を得て日本語訳を公開しています。このブログの「the Month of PHP Bugs」カテゴリでMOPBの翻訳ページを一覧できます。分かりやすいように意訳できる部分は意訳します。厳密に原文の通り訳していないので正確性を重視される方は原文をご覧ください。

    (さらに…)

  • MOPB-41-2007:PHP 5 sqlite_udf_decode_binary() Buffer Overflow Vulnerability

    Stefanさんの承諾を得て日本語訳を公開しています。このブログの「the Month of PHP Bugs」カテゴリでMOPBの翻訳ページを一覧できます。分かりやすいように意訳できる部分は意訳します。厳密に原文の通り訳していないので正確性を重視される方は原文をご覧ください。

    (さらに…)

  • MOPB-40-2007:PHP imap_mail_compose() Boundary Stack Buffer Overflow Vulnerability

    Stefanさんの承諾を得て日本語訳を公開しています。このブログの「the Month of PHP Bugs」カテゴリでMOPBの翻訳ページを一覧できます。分かりやすいように意訳できる部分は意訳します。厳密に原文の通り訳していないので正確性を重視される方は原文をご覧ください。

    (さらに…)

  • MOPB-39-2007:PHP str_replace() Memory Allocation Integer Overflow Vulnerability

    Stefanさんの承諾を得て日本語訳を公開しています。このブログの「the Month of PHP Bugs」カテゴリでMOPBの翻訳ページを一覧できます。分かりやすいように意訳できる部分は意訳します。厳密に原文の通り訳していないので正確性を重視される方は原文をご覧ください。

    (さらに…)

  • MOPB-38-2007:PHP printf() Family 64 Bit Casting Vulnerabilities

    Stefanさんの承諾を得て日本語訳を公開しています。このブログの「the Month of PHP Bugs」カテゴリでMOPBの翻訳ページを一覧できます。分かりやすいように意訳できる部分は意訳します。厳密に原文の通り訳していないので正確性を重視される方は原文をご覧ください。

    (さらに…)