5.3.7のcrypt関数に重大なセキュリティ上の問題が発見されました。この問題は大きく報道されているのでご存知の方も多いと思います。同時にPHP本体のセキュリティ状態についても不安に思った方も多いと思います。5.3.7のcrypt関数のバグは,攻撃が成功した場合のダメージは非常に大きく,攻撃が可能な場合は必ず成功します。攻撃経路があるシステムは限定的でしょう。crypt関数のバグ最近のPHPで行われたcrypt関数のバグ修正は3つあります。5.3.7ではcrypt_blowfishを利用した場合,8ビット文字(マルチバイト文字エンコーディングなど)を利用した場合に脆弱になってしまう問題を修正しました。この脆弱性は2011/6/20にレポートされており,crypt_blowfishのコードを含む製品に影響がありました。5.3.0からcrypt_blowfishのコードをバンドルしており,5.3.6未満に影響がありました。脆弱性があるcrypt_blowfishは8番目のビットがセットされた一文字に続く1から3文字を無視していました。問題の原因は符号あり・符合なし文字列の取り扱いでした。レポートによると調査したパスワードのうち3/16は8番目のビットがセットされた文字を利用しているとしています。パスワード中の文字を最大3文字無視するので,極端なケースですが4文字のパスワードなら1文字のパスワードを利用しているのと変わらなくなる場合がありました。5.3.7RC1がリリースされている頃にPHPプロジェクトに連絡されたと思われます。何らかの方法でパスワードデータベースを取得し,総当たり攻撃でパスワードを検出する。5.3.7では長すぎるsaltによるスタックオーバーフローが修正されています。'\0';とmemcpyでコピーしたsaltパラメータの文字列の終端位置の指定に利用されています。5.3.6で試したところ,単純に長いsaltではクラッシュしませんでした。PHPスクリプトを実行し,任意のコードを実行させる。5.3.7に混入したバグセキュリティ強化の一環として,strcatやstrcpyといった安全ではないとされる関数をより安全であるとされるstrlcat,strlcpyに書き換える作業の際にバグが埋め込まれました。このバグにより,crypt_md5を利用している場合,どのようなパスワードを設定していても無効になってしまう重大なセキュリティ上の問題が発生しました。https://bugs.php.net/bug.php?id=55439このバグレポートを見ると分かりますが,肝心のパスワードハッシュが出力されないのでどんなパスワードを入力しても認証できてしまうことになります。&ctx);strlcatは第三パラメータでバッファ「全体」の大きさを指定しますが,問題のコードでは第三パラメータが「連結する文字列の長さ」を指定するstrncatを利用している場合に指定すべき“⁠1⁠”が指定されています。関数の使い方がまったく間違っていたことがこのバグの原因です。仕様の違いを十分考慮しなかったためsaltの部分で文字列がNULL文字(C言語の文字列終端文字)で切れてしまい,肝心のパスワードハッシュが無効になってしまいました。この連載を読んでいる方はC言語に慣れていない方も多いと思うので補足します。修正済みstrcatはpasswdバッファーの「最後」に“⁠$⁠”を追加しています。修正前のstrlcatはpasswdバッファーの「先頭」にNULL文字を挿入しています。strlcatはバッファの長さが1以上の時,文字列がNULL文字で終了することを保証しています。passwdバッファの大きさを1と指定しているので,NULL文字がバッファの先頭に挿入され,結果的にpasswdは空文字列になっています。脆弱なcrypt関数でCRYPT_MD5を利用しているシステムにログインする。パスワードは何でもログインできる。同校にてコンピュータサイエンスとビジネスを学ぶ。株式会社シーエーシーを経て,エレクトロニック・サービス・イニシアチブ有限会社を設立。オープンソース製品は比較的古くから利用し,Linuxは0.9xのころから利用している。オープンソースシステム開発への参加はエレクトロニック・サービス・イニシアチブ設立後から。PHPプロジェクトでは,PostgreSQLモジュールのメンテナンスを担当している。URL:http://blog.ohgaki.net/著書Webアプリセキュリティ対策入門〜あなたのサイトは大丈夫?Amazon楽天ブックスhontoヨドバシ.com[改訂版]PHPポケットリファレンスAmazon楽天ブックスhontoヨドバシ.comこの記事に関連する書籍Webアプリセキュリティ対策入門〜あなたのサイトは大丈夫?本書は,Webサイトのセキュリティ確保のために必要な基礎知識と,安全なコードを書くために必要な基礎知識を解説しています。Webアプリケーションは比較的簡単に作成で...はじめてのPHP言語プログラミング入門Webアプリケーション構築ツールとしてPHPを取り上げた書籍は数多くありますが,言語の解説・入門書としての書籍はあまりありません。『PHPライブラリ&サンプル実践活用[厳選100]』,Kindleストア・楽天Koboにて販売開始。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。