FreeBSD セキュリティ勧告 日本語版 ============================================================================= FreeBSD-SA-02:23.stdio (2002-04-22) * insecure handling of stdio file descriptors ============================================================================= このメールは、announce-jp に流れた Subject: ANNOUNCE: FreeBSD Security Advisory FreeBSD-SA-02:23.stdio [REVISED] From: FreeBSD Security Advisories Date: Tue, 30 Jul 2002 11:21:04 -0700 (PDT) Message-Id: <200207301821.g6UIL4Mg034029@freefall.freebsd.org> X-Sequence: announce-jp 1016 を日本語訳したものです。 原文は PGP 署名されていますが、この日本語訳は PGP 署名されていません。 修正パッチ等の内容が改ざんされていないことを確認するために PGP 署名の チェックを行なうには、原文を参照してください。 日本語訳およびミラーサイト利用の詳細については、文末の「A. FreeBSD セキュリティ勧告 日本語版について」をご覧ください。 [翻訳者: 倉品 英行 ] --(ここから) ============================================================================= FreeBSD-SA-02:23.stdio Security Advisory The FreeBSD Project トピック: stdio ファイル記述子におけるセキュリティ的に不適切な処理問題 (insecure handling of stdio file descriptors) 分類: core モジュール: kernel 告知日: 2002-04-22 クレジット: Joost Pol , Georgi Guninski 影響範囲: 4.6-RELEASE を含む、これまでのすべての FreeBSD リリース 修正日より前の 4.6-STABLE 修正日: 2002-07-30 15:40:46 UTC (RELENG_4) 2002-07-30 15:42:11 UTC (RELENG_4_6) 2002-07-30 15:42:46 UTC (RELENG_4_5) 2002-07-30 15:43:17 UTC (RELENG_4_4) FreeBSD に固有か: NO 0. 改訂履歴 - Revision History v1.0 2002-04-22 初版公開 v1.1 2002-04-23 パッチとリビジョンナンバーの更新 v1.2 2002-07-29 procfs の問題、パッチの更新 I. 背景 - Background POSIX システムでは古くから、ファイル記述子 0, 1, 2 をそれぞれ 標準入力、標準出力、標準エラー出力に割り当てています。ほぼすべての アプリケーションは、これらの stdio ファイル記述子を、たとえば エラーメッセージを標準エラー出力 (ファイル記述子 2) に書き出すなど、 特別な意味を持つものとして扱っています。 新しいプロセスにおけるファイル記述子はすべて、親プロセスから 複製されたものです。これらのファイル記述子は「exec 時にクローズする (close-on-exec)」とマークされていない限り、exec 中も存在し続けます。 すべての POSIX システムではファイル記述子を、使用していない最も小さい数値から 順番に割り当てます。たとえば、新しく exec されたプロセスにおいて、 ファイル記述子 0 と 1 がオープンされていて、ファイル記述子 2 が クローズされている場合、そのプロセスがファイルをオープンすると、 その新しいファイル記述子は 2 (標準エラー出力) になることが保証されています。 II. 問題の詳細 - Problem Description set-user-id, set-group-id されているプログラムは高い権限で動作します。 そのようなプログラムが stdio ファイル記述子のいくつかがクローズされた 状態で実行された場合、そのプログラムがファイルをオープンすると、 そのファイルが標準入力や標準出力、あるいは標準エラー出力に意図せずに 結びついてしまう可能性があります。そうなると、そのプログラムは不適切に そのファイルからデータを読み込んだり、データをファイルに書き込んだり するかもしれません。仮にそのファイルが通常一般ユーザの権限では オープンできないファイルであったとすると、これは高い権限を 得るために利用できる可能性があります。 この問題の (勧告の最初の改訂にあたる) 前の修正には誤りがありました。 procfs または linprocfs を利用しているシステムは以前として脆弱性が 残っています。先の不完全な修正は以下の日時に行われました。 修正日: 2002-04-21 13:06:45 UTC (RELENG_4) 2002-04-21 13:08:57 UTC (RELENG_4_5) 2002-04-21 13:10:51 UTC (RELENG_4_4) III. 影響範囲 - Impact ローカルユーザはスーパユーザ権限を得ることができる可能性があります。 `keyinit' という set-user-id されたプログラムは、この手法で悪用可能なことが 判明しています。おそらく、他のプログラムにも同様に悪用が可能なものが 存在すると思われます。 IV. 回避方法 - Workaround [FreeBSD 4.5-RELEASE-p4 と 4.4-RELEASE-p11 より前のシステム] ありません。次のコマンドを実行することで `keyinit' から set-user-id ビットを 取り除くことが可能ですが、おそらく他にも悪用可能なプログラムは存在するでしょう。 # chmod 0555 /usr/bin/keyinit [FreeBSD 4.5-RELEASE-p4 以降、4.4-RELEASE-p11 以降、4.6-RELEASE、 修正日以前の 4.6-STABLE のシステム] umount(8) を用いて procfs、linprocfs ファイルシステムのマウントを はずしてください。 # umount -f -a -t procfs # umount -f -a -t linprocfs V. 解決策 - Solution kernel は、set-user-ID や set-group-ID された実行ファイルを起動する時、 ファイル記述子 0、1、2 を検査するようになりました。これらのうちの いずれかが使われていない場合、/dev/null へリダイレクトされます。 1) 弱点を持った FreeBSD システムを最新の 4.6-STABLE にアップグレード するか、修正日以降の RELENG_4_6 (4.6.1-RELEASE-p1)、RELENG_4_5 (4.5-RELEASE-p10)、RELENG_4_4 (4.4-RELEASE-p17) セキュリティ ブランチのいずれかにアップグレードする。 2) 現在のシステムにパッチを適用する。 a) 以下の場所から修正パッチをダウンロードし、PGP ユーティリティを使って PGP 署名を確認します。 [FreeBSD 4.5-RELEASE-p4 と 4.4-RELEASE-p11 より前のシステム] # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-02:23/stdio.patch.v1.2 # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-02:23/stdio.patch.v1.2.asc [FreeBSD 4.5-RELEASE-p4 以降、4.4-RELEASE-p11 以降、4.6-RELEASE、 修正日以前の 4.6-STABLE のシステム] # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-02:23/stdio2.patch.v1.2 # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-02:23/stdio2.patch.v1.2.asc b) root で以下のコマンドを実行します。 # cd /usr/src # patch < /path/to/patch c) http://www.freebsd.org/handbook/kernelconfig.html に記述されているように、 kernel を再コンパイルし、システムを再起動します。 VI. 修正の詳細 - Correction details FreeBSD において今回修正された各ファイルのリビジョン番号を以下に示します。 パス名 リビジョン ブランチ - ------------------------------------------------------------------------- sys/sys/filedesc.h RELENG_4 1.19.2.4 RELENG_4_6 1.19.2.4 RELENG_4_5 1.19.2.3.6.1 RELENG_4_4 1.19.2.3.4.1 sys/kern/kern_exec.c RELENG_4 1.107.2.15 RELENG_4_6 1.107.2.14.2.1 RELENG_4_5 1.107.2.13.2.2 RELENG_4_4 1.107.2.8.2.3 sys/kern/kern_descrip.c RELENG_4 1.81.2.12 RELENG_4_6 1.81.2.14 RELENG_4_5 1.81.2.9.2.2 RELENG_4_4 1.81.2.8.2.2 sys/conf/newvers.sh RELENG_4_6 1.44.2.23.2.6 RELENG_4_5 1.44.2.20.2.11 RELENG_4_4 1.44.2.17.2.16 - ------------------------------------------------------------------------- VII. 参考資料 - References PINE-CERT-20020401 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:23,v 1.7 2002/08/06 11:02:33 hrs Exp $