FreeBSD セキュリティ勧告 日本語版 ============================================================================= FreeBSD-SA-02:18 (2002-03-18) * zlib double-free [REVISED] ============================================================================= このメールは, announce-jp に流れた Subject: ANNOUNCE: FreeBSD Ports Security Advisory FreeBSD-SA-02:18.zlib [REVISED] From: FreeBSD Security Advisories Date: Thu, 18 Apr 2002 11:25:22 -0700 (PDT) Message-Id: <200204181825.g3IIPMY78977@freefall.freebsd.org> X-Sequence: announce-jp 967 を日本語訳したものです。 原文は PGP 署名されていますが、この日本語訳は PGP 署名されていません。 修正パッチ等の内容が改ざんされていないことを確認するために PGP 署名の チェックを行なうには、原文を参照してください。 日本語訳およミラーサイト利用の詳細については、文末の「A. FreeBSD セキュリティ勧告 日本語版について」をご覧ください。 [翻訳者: 佐藤 広生 ] --(ここから) ============================================================================= FreeBSD-SA-02:18 Security Advisory FreeBSD, Inc. トピック: zlib における二重 free 問題 (zlib double-free) 分類: core, ports モジュール: zlib 告知日: 2002-03-18 クレジット: Matthias Clasen Owen Taylor 影響範囲: FreeBSD のすべてのリリース 修正日より前の FreeBSD 4.5-STABLE zlib を使用、もしくは含んでいるさまざまな ports 修正日: 2002-02-24 23:12:48 UTC (RELENG_4) 2002-02-24 23:22:57 UTC (RELENG_4_5) 2002-02-24 23:23:58 UTC (RELENG_4_4) 2002-02-24 23:24:46 UTC (RELENG_4_3) CVE: CAN-2002-0059 FreeBSD に固有か: NO 0. 改訂履歴 - Revision History v1.0 2002-04-20 初版公開 v1.1 2002-04-25 カーネルパッチにおける ZFREE の位置を修正 deflate ウィンドウサイズチェックの修正 I. 背景 - Background zlib は、多くのアプリケーションで使用されている、データ圧縮/復元ルーチンを 提供するための圧縮ライブラリの一つです。 II. 問題の詳細 - Problem Description zlib にはプログラムに誤りがあり、動的に確保したメモリセグメントを (2 重に free することで) 2 回以上解放しようとする可能性があります。 もし攻撃者が zlib を利用しているプログラムに対して特殊な 細工を施した不正な圧縮済みデータブロックを渡すことができる場合、 そのプログラムが細工されたデータを復元しようとした時に、zlib ルーチンが メモリを複数回解放しようとするように仕向けることが可能です。 FreeBSD が採用している malloc(3) と free(3) の実装 (Poul-Henning Kamp 氏によって書かれたもので、phkmalloc とも 呼ばれています) は、他の malloc(3)/free(3) の実装とは異なり、 この種のバグによるセキュリティ上の弱点はありません。 Poul-Henning Kamp 氏は次のように述べています。 malloc の多くは管理用データを確保したメモリのすぐ隣に置いている。 こうすると 2 回 free(3) するとか、変更したポインタを free(3) する というように、確保したメモリの外をプログラムがアクセスしてしまう ような場合に好ましくない状況をつくり出す可能性が高い。 phkmalloc(3) の場合は管理用の情報を確保したメモリの隣に置いていない。 また、これには 2 重 free のような操作を確実に検出・報告するための 特別なコードが含まれている。 メモリ領域を 2 重に free しようとした場合、phkmalloc は次のような 警告メッセージ progname in free(): error: chunk is already free を出力します。また malloc フラグ 'A' が使われていれば、abort(3) を 呼び出します。 III. 影響範囲 - Impact 攻撃者が zlib を利用しているアプリケーションに特殊な細工を施した 不正な圧縮済みデータブロックを渡すことができる場合、アプリケーションが データを復元しようとする時にそのアプリケーションをクラッシュさせるような 不正な動作を行なわせることが可能です。また、FreeBSD の malloc 実装は その時に警告メッセージを表示し、`A' malloc オプションが使われていれば アプリケーションは abort(3) を呼び出します。つまり、攻撃者は zlib を 利用しているアプリケーションに対してサービス妨害を行なうことが可能です。 IV. 回避方法 - Workaround 影響を受けるプログラムが abort しないように、malloc フラグから 'A' を 削除します。使用している malloc フラグを確認するには、次のコマンドを 実行してください。 # ls -l /etc/malloc.conf # echo $MALLOC_OPTIONS /etc/malloc.conf や MALLOC_OPTIONS 環境変数が存在していなければ、 malloc フラグは設定されていません。詳しくは malloc(3) のマニュアルページを 参照してください。 V. 解決策 - Solution [FreeBSD 4.x ベースシステムの場合] 1) 弱点を持ったシステムを 4.5-STABLE, あるいは修正日以降の RELENG_4_4 もしくは RELENG_4_5 セキュリティブランチに更新する。 2) 現在のシステムに修正パッチを適用する。以下の場所から対応する修正パッチを ダウンロードし、root 権限で次のコマンドを実行します。 前回のセキュリティ勧告で公開された zlib 修正パッチを適用した FreeBSD 4.x システムでは # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-02:18/zlib.v1.1.corrected.patch # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-02:18/zlib.v1.1.corrected.patch.asc を、前回の zlib 修正パッチを適用していない FreeBSD 4.x システムでは # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-02:18/zlib.v1.1.patch # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-02:18/zlib.v1.1.patch.asc を利用してください。 PGP ユーティリティを使って PGP 署名を確認します。 この修正パッチはすべての FreeBSD 4.x に適用可能なことが 確認されているものです。 # cd /usr/src # patch -p < /path/to/patch # cd lib/libz # make depend && make all install その後 http://www.freebsd.org/handbook/kernelconfig.html に 記載されている手順にしたがってカーネルを再構築・再インストールし、 変更を有効化するためにシステムを再起動してください。 [ports] さまざまな port が zlib を静的にリンクしていたり、独自のバージョンの zlib を使っていますが、これらは FreeBSD の libz を更新しても セキュリティ上の問題が修正されることはありません。現在、そのような port を特定・修正する作業が行なわれています。 VI. 修正の詳細 - Correction details 次の表は、今回修正された FreeBSD に含まれる各ファイルのリビジョン番号です。 パス名 リビジョン ブランチ - ------------------------------------------------------------------------- src/lib/libz/deflate.c RELENG_4 1.5.2.1 RELENG_4_5 1.5.8.1 RELENG_4_4 1.5.6.1 RELENG_4_3 1.5.4.1 src/lib/libz/infblock.c RELENG_4 1.1.1.4.6.1 RELENG_4_5 1.1.1.4.12.1 RELENG_4_4 1.1.1.4.10.1 RELENG_4_3 1.1.1.4.8.1 src/sys/net/zlib.c RELENG_4 1.10.2.3 RELENG_4_5 1.10.8.2 RELENG_4_4 1.10.6.2 RELENG_4_3 1.10.4.2 - ------------------------------------------------------------------------- VII. 参考資料 - References Common Vulnerabilities and Exposures プロジェクト (cve.mitre.org) は、 この問題に CAN-2002-0059 という名前を割り当てています。 A. FreeBSD セキュリティ勧告 日本語版について 日本語訳は FreeBSD 日本語ドキュメンテーションプロジェクト (doc-jp) が 参考のために提供するものです。過去の日本語版セキュリティ勧告は http://www.FreeBSD.org/ja/security/ にまとめられています。 ただし翻訳者および doc-jp は、その内容についていかなる保証も いたしませんのでご注意ください。日本語訳についてのご意見、ご要望、 お問い合わせ等は doc-jp@jp.FreeBSD.org までお願いします。 この勧告の中で紹介されている WWW サイト http://www.FreeBSD.org/ および FTP サイト ftp://ftp.FreeBSD.org/ には, 日本のミラーサイトが存在します。 ネットワークの混雑を緩和するため、まずはミラーサイトの利用を 考慮するようお願いします。 日本のミラーサイトを利用するには、 http://www.FreeBSD.org/ を http://www.jp.FreeBSD.org/www.freebsd.org/ に、 ftp://ftp.FreeBSD.org/ を ftp://ftp.jp.FreeBSD.org/ に、 それぞれ置き換えてください。 他の地域を含むミラーサイトに関する詳細は http://www.FreeBSD.org/handbook/mirror.html (英文) http://www.FreeBSD.org/ja/handbook/mirror.html (日本語訳) にまとめられています。 $hrs: announce-jp/FreeBSD-SA/02:18,v 1.7 2002/05/15 21:27:34 hrs Exp $