パスワードを忘れた? アカウント作成
6775 story

モジュールの脆弱性を修正したApache 2.0.48/1.3.29リリース 73

ストーリー by yourCat
セキュアのためにたゆまぬ努力 部門より

k3c 曰く、 "Apache Foundationのアナウンスによると、Apache HTTPサーバのモジュールmod_aliasとmod_rewriteに、正規表現で9つ以上のcaptureを使うとバッファオーバーフローが発生するというバグが発見されたとのこと。また、バージョン2系列ではMPM使用時にmod_cgidの出力が間違ったクライアントにリダイレクトされるというバグも発見されている。これらを修正した新しいバージョン2.0.48および1.3.29が既にリリースされている。
どのバージョンからこのバグが含まれていたかという記述は…ないみたいですね…。"

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • mod_alias.c の場合 (スコア:3, 参考になる)

    by cooper (4658) on 2003年10月30日 0時14分 (#423565) 日記
    「9 個」というあたりが臭いなぁと思って ViewCVS で 1.3.28 と HEAD の diff [apache.org] を見てみました。配列のサイズが 10 と埋め込みで定義されていて、関数に渡す時にはこの最大値が使われなかったということのようですね。

    # そのまま引用しようとしたら、投稿フィルタに引っかかった...

    この手のバグ(というかプログラマの怠慢といっていいかも)は実際のプロジェクトでも結構ありがちだと思うんですが、個人の意識向上といったもの以外に、有効な対策はないものでしょうか。
    --

    -- cooper

    • by Anonymous Coward on 2003年10月30日 2時42分 (#423639)
      mod_alias.c 1.17 [apache.org]
      Revision: 1.17, Tue Jul 8 03:45:28 1997 UTC (6 years, 3 months ago) by akosut

      ここで問題のバグが入って6年3ヶ月に渡って気付かれなかった模様。
      今現役で動いてるApacheは1.xも2.xも全部影響受ける気がする。
      親コメント
      • by Anonymous Coward
        >今現役で動いてるApacheは1.xも2.xも全部影響受ける気がする。

        てか、未だに1.3.27以前を結構見るよ。
        もちろんパッチ当てた形跡無し。

        #他人様のサーバーにゃ手を出しちゃいけねぇよ。
        • 実際にセキュリティホール突いてみたんですか?

          debianみたいにバージョン上げずにバックポートしてる場合もあると思うんですが、それって普通にブラウザ等でアクセスする範囲内で判別つきます?。

          • > それって普通にブラウザ等でアクセスする範囲内で判別つきます?

             判別できないでしょうね。しかし1.3.9に1.3.28とか1.3.29までバックポートするって結構大変かも。

            # 何で1.3.9か、って?
            # 1.3.9を使い続けている所があって。
            # サーバのお守りを受託している会社が無気力、無能力で。
            # 勿論、単にアップデートしていないだけですが。
            親コメント
          • ブラウザー等といっても幅広い。
            w3mのように "v" キー1発でhtmlをplain textとして閲覧できたり、
            "=" キー1発でresponce headerや文字コードなどの情報を参照ができたり、
            framesetの構造を簡単に把握(?)できるものもあります。
            それらが困難なウェブブラウザーもあります。
            open sourceのブラウザーを改造してみたり、
            自分でブラウザーを新規
            • で、w3m を使えば、web サーバが単にバージョンアップしていない
              だけなのか、バージョン表記はそのままでパッチあててあるのかを
              区別できるんですか?
              • で、w3m を使えば、web サーバが単にバージョンアップしていない だけなのか、バージョン表記はそのままでパッチあててあるのかを 区別できるんですか?

                「『w3mのようにソースやヘッダーを簡単に参照できるブラウザーもあれば そうでないブラウザーもある』という例を示すことによって、 『ブラウザーといってもその機能はブラウザーの種類によ

              • telnetのプロンプトに書かれるissueメッセージのバージョン番号と
                実際のOSのバージョン番号が異なっていることを
                パケットヘッダーを観察することによって判断できることと同じです。
                httpdがレスポンスヘッダーによって返すバージョン番号と
                実際のバージョン番号が違っていることを判断するための観察機能を
                持ち合わせるブラウザーを用意してもいいし、
              • つまり#423887はコミュニケーション能力不全、と。
              • コミュニケーション不成立とか以前のお話で、

                > debianみたいにバージョン上げずにバックポートしてる場合も
                > あると思うんですが、それって普通にブラウザ等でアクセス
                > する範囲内で判別つきます?

                に対してw3mとかのネタを出してゴネたお前が頓珍漢。
              • Server: Apache/1.3.9 (Unix) Debian GNU/Linux ...
                とかのお尻の "Debian" のことを言っているのかな?
                でもやっぱりこれだけじゃパッケージをアップグレードしているのかどうか判らないけど。
                親コメント
              • 元の発言で
                「普通にブラウザ等」
                という意味不明な未定義俺様用語が出た時点でアウトです。
                それに対する発言が元に噛み合っていなくても
                元の発言の責任の範囲内です。
              • > 「普通にブラウザ等」
                > という意味不明な未定義俺様用語が出た時点でアウトです。

                あなたの脳みそがアウトなだけでは。

                こういうのがいるから技術者は頭が固いとか言われるんだよね。
              • やれやれ。

                > httpdがレスポンスヘッダーによって返すバージョン番号と
                > 実際のバージョン番号が違っていることを判断するための観察機能を
                > 持ち合わせるブラウザーを用意してもいいし、

                そんなブ
    • by Anonymous Coward on 2003年10月30日 0時40分 (#423579)
      swd_rgvさんも書いてますが、まずレビューの仕組みを設ける
      あるいは現状よりも強化するってのが必要なんじゃないかと。

      ずっと以前に聞いた話では apache httpd のチームはその
      コード変更を取り込むかどうかはコアメンバで投票しあって
      決定するとかそんな感じだったような気がするのですが、
      現状はそのあたりの仕組みはどーなっているのでしょうか。
      親コメント
    • バグを防ぐのって結局いろんなものの組み合わせで防ぐもの
      と感じています。

      日頃の意識(長さチェックは厳密にとか)
      コーディング規則のチェックシート
      レビュー
      などなど

      バグ発生後も
      なぜなぜシート
      を作ったりして個々の意識を高めていくと。

      そして結局はCASEなどには勝てないと思いますし。
      バグ統計を聞いて愕然としました。
      親コメント
      • by cooper (4658) on 2003年10月30日 22時11分 (#424098) 日記
        いきなり結論が出てしまいましたが、確かに、これといった決め手はないんですよね。

        日頃の意識という意味では、プライオリティの高い順に、以下のような点に注意して進めています。
        • 仕様を満たしていること
        • メンテナンス性が確保されていること
        • そこそこの移植性を確保していること
        • そこそこのパフォーマンスを確保していること
        パフォーマンスに関しては、まずほとんど問題になることはないですね。多少効率が悪くても、メンテナンス性や移植性に優れるなら OK というスタンスです。もちろん、仕様に記述された最低限のパフォーマンスは確保されます。

        レビュー時には過去の経験をもとにいろいろな角度からチェックしますが、C なら lint にパスしたコードを対象にしてます。あまりにも泣きたくなるような警告については、無視することもありますが...
        --

        -- cooper

        親コメント
    • by tt (2867) on 2003年10月30日 1時11分 (#423600) 日記
      普通にセキュリティ問題をチェックするコードスキャナとかつかえばこの程度なら自動で見つかるような。

      まあ、チェックが自動で出来たとしても、結局個人の意識が無いとダメなんでしょうけど。CVSコミットごとにチェックを自動で書けて、常にメールが流れる、とかやっても無視する人は無視しちゃうでしょうし。

      --
      -- Takehiro TOMINAGA // may the source be with you!
      親コメント
      • > 普通にセキュリティ問題をチェックするコードスキャナとかつかえばこの程度なら自動で見つかるような。

        すばらしいツールをお持ちでしたら
        是非、まだ発見されていない apache の潜在的な問題を見つけて
        apache にフィードバックしてください。
        親コメント
        • by tt (2867) on 2003年10月30日 23時33分 (#424145) 日記
          やだ。他人のコードのでバグより、自分のコードを書くのを楽しみたい。

          ってのは冗談ですが。

          ちょっと参考URLとか出せないのが弱いんですが、ツールによるチェックが元で見つかったapacheとかLinuxの脆弱性ってのは結構あると聞いています。bugtraq とか見てるとそれなりの頻度で「このバグはXXを使って自動チェックの結果を確認することで発見した」みたいなメールがきてます。

          なので、この手のツールはそれなりに有効だと思います。が、問題は「誤認識」「誤警告」が多いうえ、(特に実行時チェックを行う系のelectricfenceとかは)異常に遅いという点だと思います。

          また、大量に出る警告の中から、問題を拾い出すだけでもかなり大変です。自分が担当している一万行程度のコードが相手ならともかく、第三者の書いた何十万とあるコードのバグ発見てのはかなり辛いんですよね。

          まあ、世の中の(スクリプトキディーでない)「本当のクラッカー」さんはそのへんをやってるんでしょうけど。

          正直、他人のコードのデバグよりは自分の好きでコードを書くほうが楽しい、というのは事実だし…

          --
          -- Takehiro TOMINAGA // may the source be with you!
          親コメント
      • by Anonymous Coward
        チェッカーによる警告を無視する人がいてもいいのです。
        その警告を多くの人に流す、もしくは誰でも見れる位置に置くことによって
        無視しない人が一人でも現れれば、誰かがそのバグの存在を認識できるので、
        誰もそのバグの存在に気づいていなかった状況から比べれば雲泥の差です。
    • by naruaki (2658) on 2003年10月30日 4時41分 (#423660) 日記
      個人の意識向上以外に、と言われても、ソースコードの製作が個人に完結してしまっている状況下では、その個人に頑張ってもらうしかないよなぁ。
      現状では、他人(第三者)が介在しにくい状況だろうし、とすると道具に頼るしかないか。
      ヘンなコードだと保存できないエディタとか(保存する際には、矯正してしまうとか)、ヘンなコードだと、こんなんコンパイルできるか!ボケっ!!とかいってオブジェクト吐かないヤツとか。
      親コメント
      • by Anonymous Coward
        道具を使っても修正するかどうかは人間次第なので、結局人間が
        頑張る必要はあると思いますよ。

        道具が検出しても「悪用できそうにない」と判断して修正しない
        人がいるかもしれません。で、半年後に思わぬ方法で悪用され
        ちゃうとか。

      • by Anonymous Coward
        >ソースコードの製作が個人に完結してしまっている状況下では

        その状況に問題があるのでしょう。

        XPをしろとは言わないけれども、丹念なコードレビューをすれば、
        「個人で完結する」状況とはならないと思います。

        やはりapacheの開発体制に問題があるのでしょう。
    • by Anonymous Coward on 2003年10月30日 10時13分 (#423751)
      どこにつなげようか迷ったけどここで
      えーーと。まったく別問題だったりするのですが Apache ネタ
      という事でここに書かせてもらいます。

      ab(Apache Bench)にも同様なバグがずいぶん前から付いています。
      具体的には URL を格納するバッファが 1024Byte 固定になっているので
      長いURLを ab に処理させようとすると ab が落ちます。

      問題のコードの 1.3.29 のものを見てみましたが、相変わらず
      strcpy で 1024Byte の配列にコピーしているなぁ...

      # 報告の仕方がわかってないのでACで
      親コメント
      • by Anonymous Coward on 2003年10月30日 13時51分 (#423858)
        > 問題のコードの 1.3.29 のものを見てみましたが、相変わらず
        > strcpy で 1024Byte の配列にコピーしているなぁ...

        grepすればまだまだアヤシゲなstrcpyを目にすることができるのですが
        それに関しては次回のお楽しみかな?

        char buffer[300];
        if (DosSearchPath(SEARCH_ENVIRONMENT, "PATH",
        interpreter+2,buffer, sizeof(buffer)) == 0) {
        strcpy(interpreter+2, buffer);

        環境変数から得られた文字列を300 byteのauto変数にstrcpyしてみるテストとか。

        Apacheは全体的に
        char buffer[300];
        のようなマジックナンバーによる確保が多いです。
        strcpyやsprintfといった関数の使用が多くてその前後が無頓着です。
        脆弱性ネタの宝庫なのでこれからも小出しにバージョンアップする予定?
        # こんなものをサーバーとして使っているのが不思議
        親コメント
        • by cassandro (6035) on 2003年10月30日 15時50分 (#423917)
          > grepすればまだまだアヤシゲなstrcpyを目にすることができるので
          > すがそれに関しては次回のお楽しみかな?

           この文が続くコード中のstrcpy()が怪しいという意味なら、それは違うんじゃないか、と。DosSearchPath()で事前の縛りを入れてるでしょう。

          > のようなマジックナンバーによる確保が多いです。
          > strcpyやsprintfといった関数の使用が多くてその前後が無頓着です。

           一概に無頓着とは言えないと思いますよ。釈迦に説法とは思いますけど、一応。Cでデータの移し替えをやる場合、元データと同じサイズの領域を確保する方法と、適当な大きさの領域を確保しておいて事前にバッファ溢れをチェックを行う方法とがありますね。
           元コメント(#423858)にあったコードは後者の方法。レビューの際には「妥当」とされるコーディングです。もしもこれに「不適当」と言ったら、「Cを勉強して来い!」と言われかねないです。
           sprintf()は、無頓着は良くないですね。明らかにOKな場合(intを文字列化したテキストを得る、とか)を除いてやはり事前チェックは必要でしょう。それは結構面倒臭いので、自前ライブラリに動的確保を行いつつsprintfする関数を入れて置いたりしますけど。
          親コメント
          • by Anonymous Coward
            >  元コメント(#423858)にあったコードは後者の方法。
            > レビューの際には「妥当」とされるコーディングです。
            > もしもこれに「不適当」と言ったら、「Cを勉強して来い!」
            > と言われかねないです。

            apacheのようなソフトウェアは以下の特徴があります
            ・世界中の大勢の人が利用する(apacheを設置する)
            ・そのユーザー(apacheを設置する人)の多くはソフトウェアに対して強い安全性を求める
            ・二次的なユーザー(apacheにアクセスする人)の中には
                攻撃の意思と十分な技術を持つ者が多く存在している。
                なおかつ彼らは攻撃
            • by cassandro (6035) on 2003年10月30日 16時58分 (#423956)
               レビューでの意見の質とプロジェクトの重大性とは、あまり関係ないでしょう。それよりも、レビューをどれだけ真剣にやるか、レビューの参加者にどれだけのスキルがあるか、の方が。それを経由すれば質と重大性に全く関係ないとは言いませんが。

               #423858のコードは、クリティカルな用途のソフトでも「妥当」とされると思いますよ。問題はそこでしょう?レビューがどうのは直接関係ありません。
               なら、「不適当」である理由を述べたらどうでしょう。どんなレベルのレビューにしても、説明もせずに「不適当」と言い放つのは、まともなエンジニア、マネージャのする事ではありませんから(実際には多いですけどね)。
              親コメント
              • by Anonymous Coward
                真剣にやろうがスキルがあろうが、方向性が違っていれば違った結果が導かれてもしょうがないでしょう。
                それとも、レビュワーはプログラムの用途なぞ考慮する必要がないとでも?
                  #それすらスキルの内ということであれば、それはそれでレビューの意義をいくつか捨
              • by Anonymous Coward
                > なら、「不適当」である理由を述べたらどうでしょう

                誰が「不適当」だと言ったのですか?
                理由だけ存在されても怖い
              • by Anonymous Coward
                > レビューでの意見の質とプロジェクトの重大性とは、あまり関係ないでしょう。

                官僚のコメントのように解釈に悩む表現ですね。
                これは結局のところ「関係がある」という意味になる?

                > それよりも、レビューをどれだけ真剣にやるか、レビューの参加者にどれだけの
                スキルがあるか、の方が。それを経由すれば質と重大性に全く関係ないとは言いませんが。

                これもいろんな解釈が可能。

                > #423858のコードは、クリティカルな用途のソフトでも「妥当」とされると思います
                > よ。問題はそこでしょう?レ
            • by Anonymous Coward
              > ・世界中の大勢の人が利用する(apacheを設置する)
              > ・そのユーザー(apacheを設置する人)の多くはソフトウェアに対して強い安全性を求める
              > ・二次的なユーザー(apacheにアクセスする人)の中には
              > 攻撃の意思と十分な技術を持つ者が多く存在している。
              > なおかつ彼らは攻撃に特化したクラ
        • > 脆弱性ネタの宝庫なのでこれからも小出しにバージョンアップする予定?

          もともとA Patch というくらいだし、これからもどんどんパッチを当ててくのではないでしょうか。
          親コメント
        • by Anonymous Coward
          その辺のコードはOS2でしか使われないからイイよべつに。
  • 修正点を読む限り,問題となる正規表現を「設定ファイルにかく」と
    Buffer Overflowをおこすように読めるんですが。「外部から」の
    入力によって落ちたり乗っ取られたりするのが「脆弱性」であって,
    設定とかの「内部から」の入力で落ちるのは,単なるバグというのでは
    ないでしょうか。

    # 正規表現の「キャプチャー」を,いまいち理解していないから
    # 変なこといってるんだろうか。括弧を使わなければいい,
    # というわけじゃないのか?
  • modules (スコア:1, 興味深い)

    by Anonymous Coward on 2003年10月30日 13時33分 (#423852)
    phpやgzipやsslといった
    オプションのモジュールも一緒に使用している人もいると思いますが、
    その場合、本家apacheのバージョンが上がっても
    すぐにはついていけないとか、手間がかかるとかあると思いますが、
    それに悩むみなさんどのようにお過ごしですか?
    できましたらアイデアや技を自慢してください。
  • by daemontools (1932) on 2003年11月02日 15時09分 (#425563)
    でたみたい. [modssl.org]

    # さーて、入れ替えだヽ( ´ー`)ノ
    --
    -- daemontools.
  • by Anonymous Coward on 2003年10月30日 3時38分 (#423652)
    Apache 2.0.48/1.3.29のWin32 binaryが/dist/httpd/binaries/win32/ [apache.org]に無いのは
    Build環境が(用意出来)無いからとかでしょうか?
typodupeerror

物事のやり方は一つではない -- Perlな人

読み込み中...