パスワードを忘れた? アカウント作成
190724 story
セキュリティ

GNU gzipに脆弱性、1.4リリース 38

ストーリー by hylom
チェック&アップデートを、 部門より

Elbereth 曰く、

JVNのJVNVU#188937 GNU gzip における複数の脆弱性経由で知ったが、GNU ProjectのGNU gzip — News: gzip-1.4 released (stable/security)によると、GNU gzip 1.3.14 ~1.3.3 のバージョンに複数の脆弱性があり、修正がされた1.4がリリースされたとのこと。

この記事によると、脆弱性のあるバージョンでは、細工された gzip 圧縮ファイルを処理させることで、サービス運用妨害 (DoS) 攻撃を受けたり、ユーザの権限で任意のコードを実行されたりする可能性がある。また、脆弱性の一つは、64-bitシステム上でのみ影響を受ける模様。

gzip 1.3.3のリリースは2002年3月8日で、1.3.14は2009年10月30日のリリースなので、かなり長期間のものが対象になる。

なお、2月5日の3時現在でCODEZINEの記事では「2009年10月に公開されたバージョン1.3.3以来の安定版」と書かれていますが、これは1.3.14のことと思われる。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by fcp (32783) on 2010年02月06日 11時45分 (#1714656) ホームページ 日記

    JVN の脆弱性レポート [jvn.jp]の「詳細情報」の項には、

    GNU gzip には、gzip 圧縮ファイルの処理に複数の脆弱性が存在します。

    対応された脆弱性の一つは、64-bit システム上でのみ影響を受けます。

    とあり、普通に解釈すれば 32 ビットシステムに影響する脆弱性も見つかったかのように読めるのですが、これはほぼ誤りと言って良いと思います。

    gzip 1.4 のリリース案内文 [gnu.org]によれば、 gzip 1.4 で修正されたバグは「32 ビットシステムに影響しない脆弱性」と「脆弱性ではないバグ」の二つであり、 gzip 1.4 での修正内容の中に「32 ビットシステムに影響する脆弱性」はありません。

    JVN の脆弱性レポートを読み返すと、「関連文書」の項に CVE-2009-2624 [mitre.org] と CVE-2010-0001 [mitre.org] の二つの CVE 番号が書かれています。 CVE-2010-0001 というのは gzip 1.4 のリリース案内文に書かれている脆弱性です。では CVE-2009-2624 って何?

    CVE-2009-2624 は、 gzip 1.3.13 で修正された脆弱性です。たしかにこれは 32 ビットシステムにも影響するので、

    GNU gzip (の 1.3.13 より前) には、gzip 圧縮ファイルの処理に複数の脆弱性が存在します。

    (gzip 1.4 までに) 対応された (ことのある) 脆弱性の一つは、64-bit システム上でのみ影響を受けます。

    という意味だとすれば誤りではないとも言えますが、まあこれは屁理屈の類でしょう。

    もちろん、 32 ビットシステムでも gzip を最新のものに更新するに越したことはないと思います。

    • 翻訳の誤り? (スコア:3, すばらしい洞察)

      by Technical Type (3408) on 2010年02月06日 19時54分 (#1714774)
      IPA は翻訳を入札で外注 [ipa.go.jp]してるから、JVN で英語の脆弱性情報に対する理解がアレなのは (一部、自粛) だから「あれ?」と思ったら英語を読め、JVN は参考程度に、という事ですね。
      親コメント
      • Re:翻訳の誤り? (スコア:2, すばらしい洞察)

        by Elbereth (17793) on 2010年02月06日 22時02分 (#1714803)
        まぁ、情報入手の取っ掛かりとしてはいいと思いますが、その先の元情報にあたる必要はありますね。
        その辺はスラドと一緒ですね。
        親コメント
        • Re:翻訳の誤り? (スコア:4, すばらしい洞察)

          by fcp (32783) on 2010年02月07日 0時29分 (#1714833) ホームページ 日記

          まぁ、情報入手の取っ掛かりとしてはいいと思いますが、その先の元情報にあたる必要はありますね。
          その辺はスラドと一緒ですね。

          JVN の脆弱性レポートもスラッシュドットも「情報入手の取っ掛かりとしてはいいと思いますが、その先の元情報にあたる必要は」ある、というのは同意しますが、間違った脆弱性レポートを鵜呑みにしてそのままタレコミを書いた本人が言うことではないと思います。

          親コメント
  • ちょっと補足 (スコア:2, 参考になる)

    by T.Sawamoto (4142) on 2010年02月05日 23時51分 (#1714541)

    LZWに関するバグはgzip: (64 bit) Integer underflow by decompressing LZW format files [redhat.com]のものと思われます。
    対応するパッチはgzip -d: do not clobber stack for valid input on x86_64 [gnu.org]で、ここには

    + gzip -d could segfault and/or clobber the stack, possibly leading to
    + arbitrary code execution. This affects x86_64 but not 32-bit systems.

    とありますね。つまり、LZW解凍時のバグが「64-bitシステム上でのみ影響を受ける」方のようです。
    (整数演算のアンダーフローが配列参照エラーに繋がり、任意のコードを実行されかねない危険なバグです)

    もう一つも同じく解凍時のバグですけど、こちらは

    gzip -d would fail with a CRC error for some valid inputs.(意訳:正しい入力にも拘わらず、"gzip -d"がCRCエラーで失敗する)

    とのことですから、セキュリティーホールにはならないかも。
    (DOS / OS/2 / WindowsのFATで圧縮されたもののみで発生?)

    • Re:ちょっと補足 (スコア:2, 参考になる)

      by alp (1425) on 2010年02月06日 0時23分 (#1714555) ホームページ 日記
      後者は CVE-2009-2624 [mitre.org]ですか? 普通にバッファオーバランで、多分任意コード実行可能でしょう。ただ、これは 1.3 系の途中からのバグで、1.3.3 からずっと、ってのは事実に反するはず。一度 CVE-2006-4334 [mitre.org] で、1.3.5 上で発見され直したはずのバグの再発なので。

      # この程度はちょっと調べれば分かると思うぞ。

      親コメント
      • Re:ちょっと補足 (スコア:2, 参考になる)

        by T.Sawamoto (4142) on 2010年02月06日 2時57分 (#1714584)

        んと、私の示した後者は、それではないように思うのですが……。
        タレコミのリンク先(GNU gzip — News: gzip-1.4 released (stable/security) [gnu.org])にある"gzip -d would fail with a CRC error for some valid inputs."のことで、これはgzip -d would fail with a CRC error... [gnu.org]にパッチがあります。(正式リリースとは若干内容が異なっているっぽいですが)
        memcpyでソースとデスティネーションが重複してしまっている状況への対処ですから、これ自体は脆弱性には繋がらないんじゃないかと。

        親コメント
      • by Anonymous Coward

        > 1.3.5 上で発見され直したはずのバグの再発
        gzipってregression防止のためのunit testやってないの?

    • by Anonymous Coward
      アンダーフローってそういう意味で使っていいの?と思って、"Integer underflow"でググったら相当な量が引っかかるな。
      "整数アンダーフロー"でもひっかかるし、そういう言葉があるみたいだな。
  • mod_gzipも同じコードベースからの派生?全然別?

    もし同じ脆弱性があるんだったら、wikiとか掲示板みたいに書き換え可能なコンテンツ経由でやられるおそれがあるのでおそろしいな。

    • Re: (スコア:0, 荒らし)

      by Anonymous Coward

      > 細工された gzip 圧縮ファイル

      とあるので、そもそもmod_gzipは関係ないのでは?(圧縮しかしない)

      そもそも、apacheだったりwikiの方には、もっと深刻な脆弱性がごろごろしてますから、
      そちらの方を心配された方が。。。

  • by nox_dot (11614) on 2010年02月06日 11時14分 (#1714641) 日記

    clamavなどのウイルス対策があだとなって、逆に攻撃されてしまい兼ねませんね。
    攻撃を仕込んだ圧縮ファイルを添付したメールを送るだけで攻撃できてしまうし。

    • Re:clamav (スコア:1, 興味深い)

      by Anonymous Coward on 2010年02月07日 0時00分 (#1714828)

      圧縮ファイルを利用したアンチウイルス製品攻撃なんて昔からあるような・・・
      超圧縮したnullとか送りつけるとか。

      親コメント
  • by Anonymous Coward on 2010年02月05日 22時39分 (#1714512)

    GNU gzip 1.3.14 ~1.3.3 のバージョンに複数の脆弱性があり、

    「〜」の後のほうがバージョン低いって違和感があるな。

  • by Anonymous Coward on 2010年02月05日 23時39分 (#1714532)

    ファイルの圧縮や展開がセキュリティに影響するような状況ってどういう感じなのでしょうか。
    イメージとしては、圧縮や展開は単純にデータの繰り返し部分や不合理な部分を置換する作業であって、
    不正コードの実行なんかとは無関係に思うのですが。

    • Re:不思議 (スコア:4, 参考になる)

      by tt (2867) on 2010年02月05日 23時48分 (#1714538) 日記
      とある圧縮データを開こうとして、置換後のデータを書き出す際に、書き出し先のバッファより長いデータを間違えて書き込んだりしたらどうなるでしょうか。 圧縮ツールだからセキュリティに関係ない、なんてどうして考え付くのか不思議です。

      あと圧縮ではなくアーカイブ系では展開時などにファイルのパーミッション間違えるといった危険もあります。

      --
      -- Takehiro TOMINAGA // may the source be with you!
      親コメント
      • by Anonymous Coward on 2010年02月05日 23時51分 (#1714540)
        もっと致命的な脆弱性で、
        ・絶対パス名でアーカイブされたファイルを、絶対パス名のまま展開する
        という事例がありました。

        たしか、Antiny系のトロイの感染手段として一時期猛威をふるっていたような。
        親コメント
        • by Anonymous Coward on 2010年02月06日 21時48分 (#1714799)
          相対パスしか許可しない場合でも、
          "../../../../../..・・・/tmp/hogehoge"というファイル名で絶対パスと同様になってしまうというのが過去にあったような。
          親コメント
        • by Anonymous Coward

          元コメACです。なるほど! それは危険ですね。想像力が欠如してました。
          いつもSecurity Advisoryが出るとただ無意識にアップデートしていました・・・

        • by Anonymous Coward
          ぜ、脆弱性なの?!tar は今でもその仕様のままでは?
          たまに絶対パスで固めたアーカイブをよこす人が。
          悪意でないにしても、
          クリティカルなファイルを書き換えられる可能性があるので
          内容確認してから展開しなくちゃと思ってはいるのですが…。
    • Re: (スコア:0, すばらしい洞察)

      by Anonymous Coward

      ライブラリには影響しないのかもしれないけど、httpdのdeflateに使われていたらアップロードされたモノで攻撃が成立するかもしれない。

      • Re:不思議 (スコア:2, 参考になる)

        by Anonymous Coward on 2010年02月06日 14時42分 (#1714699)

        mod_deflateは圧縮しかしないから関係ない [srad.jp]そうだよ。
        どっちもすば洞が付いてるあたり、いかにモデレータが脊髄反射しかしていないかよくわかる。
        # そしてこのコメントは脊髄反射でフレームのもとや荒らしにされる予定なのでAC

        親コメント
        • Re:不思議 (スコア:4, 興味深い)

          by uron (39597) on 2010年02月06日 16時44分 (#1714731)

          その昔、Solarisかなんかのアーカイバがワークメモリをゼロクリアせず使ってたところ、
          権限チェックをする関係上/etc/passwd(違ったかも)が直前に読み込まれてた領域で、
          中身が出力されてしまうセキュリティホールがあったとセキュアコーディングに関する書籍で
          読んだ記憶があります。

          という訳で、malloc()した領域を未初期化部分までファイル出力しただけで状況によっては
          セキュリティホールになりうるので注意が必要ですね。

          #ファイル自体は過去の遺物で実際には利用されておらず、パスワード部分もハッシュされた
          #状態で格納されていたので直接の実害はなかったとか。

          --
          スルースキル:Lv2
          Keep It Simple, Stupid!
          親コメント
          • Re:不思議 (スコア:3, 参考になる)

            by Anonymous Coward on 2010年02月06日 21時20分 (#1714793)
            ユーザが取得するメモリのクリアは通常カーネルレベルでやる仕事です。
            気にすることに越したことはありませんが、C2レベルのセキュリティ基準も守れてないことになるので
            今のOSではありえないでしょう。

            例えば、rootで動いているdaemonが/etc/shadowの内容の書かれたメモリ内容をfree()したとして
            一般ユーザが同じアドレスを確保した場合に/etc/shadowの中身が見えてると、いくらファイルで
            パーミッションを600にしても意味がないということになるのでそれはセキュリティホールになるよね。

            #今のOSで見つけたらそれは危険なセキュリティホールなので報告すべきだと思う
            親コメント
            • Re:不思議 (スコア:2, 興味深い)

              by uron (39597) on 2010年02月07日 16時29分 (#1714930)

              まさにその例通りのセキュリティホールが発生した問題で、確かにその主張は正当だと思うんですが、
              それはセキュアなOSの実装として望ましいという話であってコードの側で対策しなくてもよい(=OSの不手際)
              か、というとそれは別の話ではないかと思います。

              領域をクリアするにもコストがかかる訳で、このコストの回避を自前で対処することと引き替えに
              行いたいかもしれない。その選択肢はプログラマの手にゆだねてもいいんじゃないかと。
              実際、この問題の回避手段としては危険なメモリ領域はfree()する前にゼロクリアしておく、というの
              でも十分可能ではないでしょうか。
              OSレベルでしか対処できない、というのなら確かにOSのセキュリティホールだと思うんですけどね。

              もちろんプログラマがポカミスをすることもあると思うのでユーザの選択としてメモリクリアを行って
              くれるセキュアなOSを採用する、という手段はあると思うのですが、組み込み用OSや発展途上のOSなど
              その優先順位や状況によってセキュアでないOSが世の中から無くなることはないように思いますし、
              その選択もユーザが必要に応じて行うべきことだと思います。

              ですので、この問題はアプリプログラマ側からみると環境依存の話何じゃないかと。
              自分の書いたコードが利用される環境が完全にわかっているなら環境依存でもいいと思うのですが、
              非環境依存のセキュアコーディング、という視点で見ると今回の問題は危険な領域は開放する前に
              クリアしておくべき、ファイル出力するような領域もクリアしておくのが望ましいとかそのあたり
              なのじゃないかなと。

              #一プログラマとしては、何も気をつけなくていい楽ちん環境が当たり前になってくれるとうれしいのですけどね~。
              #何か問題起きてもOSのせいにできちゃうような。OS開発者はたまったもんじゃないと思いますけど。

              --
              スルースキル:Lv2
              Keep It Simple, Stupid!
              親コメント
            • Re:不思議 (スコア:1, 興味深い)

              by Anonymous Coward on 2010年02月08日 5時04分 (#1715000)

              malloc(初期化しない)/calloc(初期化する)に相当するような初期化するfreeが
              OSにあればそれを使うべきだし、無い以上は必要ならアプリケーション側で初期化
              する必要がある。

              OSレベルで実装されていようがいまいが(実装されていれば「それはいいOSです
              ね」というだけのこと)、結局アプリケーション側で考慮しないといけないのは同じ。

              親コメント
              • by Anonymous Coward
                そそ、たとえOSで色々対処してもアプリ側が気をつけてないと穴はすぐ生まれるからね。
          • by ohtake (3502) on 2010年02月06日 17時38分 (#1714747)

            オフトピだけど続けてみよう。
            そのバグは昔踏んだことがあって、SunOS4のtarで固めたファイルを友人に送ったら「ホームディレクトリのディレクトリエントリが見える」って言われた。
            # はずかしいファイル名が含まれていたかどうかは秘密だ。

            親コメント
        • by ruto (17678) on 2010年02月08日 8時39分 (#1715010) 日記
          HTTP 1.1だと、リクエストのボディもgzipで圧縮できるんじゃなかったっけ?
          親コメント
        • by Anonymous Coward
          サーバ側はmod_deflateを偽装して攻撃コードを送れるわけだから、
          gzip派生コードを使ったブラウザの方が深刻な気がする。
          下手すりゃマルウェアのインストールにも使われそうですよ。
    • by Anonymous Coward
      いいから。バッファオーバーフローってググってみ。
typodupeerror

一つのことを行い、またそれをうまくやるプログラムを書け -- Malcolm Douglas McIlroy

読み込み中...