FreeBSD セキュリティ勧告 日本語版 ============================================================================= FreeBSD-SA-03:12 (2003-09-16) * OpenSSH buffer management error ============================================================================= このメールは, announce-jp に流れた Subject: ANNOUNCE: [FreeBSD-Announce] FreeBSD Security Advisory FreeBSD-SA-03:12.openssh [REVISED] From: FreeBSD Security Advisories Date: Wed, 17 Sep 2003 15:37:56 -0700 (PDT) Message-Id: <200309172237.h8HMbuvK078935@freefall.freebsd.org> X-Sequence: announce-jp 1177 を日本語訳したものです。 原文は PGP 署名されていますが、この日本語訳は PGP 署名されていません。 修正パッチ等の内容が改ざんされていないことを確認するために PGP 署名の チェックをおこなうには、原文を参照してください。 日本語訳およびミラーサイト利用の詳細については、文末の「A. FreeBSD セキュリティ勧告 日本語版について」をご覧ください。 [翻訳者: 佐藤 広生 ] --(ここから) ============================================================================= FreeBSD-SA-03:12 Security Advisory FreeBSD, Inc. トピック: OpenSSH におけるバッファ管理のエラー (OpenSSH buffer management error) 分類: core, ports モジュール: openssh, ports_openssh, openssh-portable 告知日: 2003-09-16 クレジット: The OpenSSH Project 影響範囲: 4.0-RELEASE を含む、それ以降のすべての FreeBSD リリース 修正日より前の FreeBSD 4-STABLE openssh-3.6.1_3 より前の openssh の port openssh-portable-3.6.1p2_3 より前の openssh-portable の port 修正日: 2003-09-17 16:24:02 UTC (RELENG_4, 4.9-PRERELEASE) 2003-09-17 14:46:58 UTC (RELENG_5_1, 5.1-RELEASE-p4) 2003-09-17 14:50:14 UTC (RELENG_5_0, 5.0-RELEASE-p13) 2003-09-17 14:51:09 UTC (RELENG_4_8, 4.8-RELEASE-p6) 2003-09-17 14:51:37 UTC (RELENG_4_7, 4.7-RELEASE-p16) 2003-09-17 14:52:08 UTC (RELENG_4_6, 4.6-RELEASE-p19) 2003-09-17 14:52:42 UTC (RELENG_4_5, 4.5-RELEASE-p31) 2003-09-17 14:57:32 UTC (RELENG_4_4, 4.4-RELEASE-p41) 2003-09-17 14:58:56 UTC (RELENG_4_3, 4.3-RELEASE-p37) 2003-09-17 16:07:48 UTC (ports/security/openssh) 2003-09-17 16:07:48 UTC (ports/security/openssh-portable) CVE: CAN-2003-0693, CAN-2003-0695, CAN-2003-0682 FreeBSD に固有か: NO 0. 改訂履歴 - Revision History v1.0 2003-09-16 初版公開 v1.1 2003-09-17 sshd の再起動手順にあった誤記の修正 バッファ管理のエラーをさらに 1 個修正 I. 背景 - Background OpenSSH is a free version of the SSH protocol suite of network connectivity tools. OpenSSH encrypts all traffic (including passwords) to effectively eliminate eavesdropping, connection hijacking, and other network-level attacks. Additionally, OpenSSH provides a myriad of secure tunneling capabilities, as well as a variety of authentication methods. `ssh' is the client application, while `sshd' is the server. OpenSSH は SSH プロトコル群を使った、フリーで利用できる ネットワーク接続用ツールです。OpenSSH は (パスワードを含む) すべてのトラフィックを暗号化することで、盗聴や接続の乗っ取り、 その他のネットワークレベルの攻撃を効果的に無力化します。 また OpenSSH には、数多くのセキュアなトンネルを作成する機能、 豊富な認証方法への対応といった特徴があります。 `ssh' がクライアントアプリケーションで、`sshd' がサーバです。 II. 問題の詳細 - Problem Description Several operations within OpenSSH require dynamic memory allocation or reallocation. Examples are: the receipt of a packet larger than available space in a currently allocated buffer; creation of additional channels beyond the currently allocated maximum; and allocation of new sockets beyond the currently allocated maximum. Many of these operations can fail either due to `out of memory' or due to explicit checks for ridiculously sized requests. However, the failure occurs after the allocation size has already been updated, so that the bookkeeping data structures are in an inconsistent state (the recorded size is larger than the actual allocation). Furthermore, the detection of these failures causes OpenSSH to invoke several `fatal_cleanup' handlers, some of which may then attempt to use these inconsistent data structures. For example, a handler may zero and free a buffer in this state, and as a result memory outside of the allocated area will be overwritten with NUL bytes. OpenSSH の内部でおこなわれる処理には、メモリの動的な割り当てや 再割り当てが必要になるものが複数あります。これはたとえば、 割り当てられているバッファの空き領域よりも大きいパケットを 受信した時、割り当てられている最大チャネル数よりも多くのチャネルを さらに生成する時、割り当てられている最大ソケット数よりも 多くのソケットを新規に割り当てる時などです。 これらの処理の多くは、メモリ不足、もしくは異常なほど大きい割り当て要求に 対するチェックが原因で、処理が成功しない場合があります。 しかし、この処理の失敗は割り当てサイズが更新された後に発生するため、 割り当て管理用のデータ構造体は、整合のとれていない (記録されている サイズが、実際の割り当てサイズよりも大きい) 状態になります。 さらに、このような処理の失敗は OpenSSH によって検出され `fatal_cleanup' という ハンドラが呼び出されるのですが、このハンドラの中には、その整合の とれていないデータ構造体を利用しようとするものがあります。 たとえばあるハンドラは、そのような状況になるとそのバッファを 0 で 上書きして、バッファを開放します。これは結果として、割り当られた メモリ領域の外側を NUL バイトで上書きすることになります。 III. 影響範囲 - Impact A remote attacker can cause OpenSSH to crash. The bug is not believed to be exploitable for code execution on FreeBSD. リモートの攻撃者は、OpenSSH をクラッシュさせることができる可能性が あります。ただしこのバグは、FreeBSD 上で任意のコードを実行する目的で 悪用できるものではないと考えられています。 IV. 回避方法 - Workaround Do one of the following: 次のいずれかひとつに従ってください。 1) Disable the base system sshd by executing the following command as root: root 権限で次のコマンドを実行し、ベースシステムに含まれる sshd を無効にする。 # kill `cat /var/run/sshd.pid` Be sure that sshd is not restarted when the system is restarted by adding the following line to the end of /etc/rc.conf: システムが再起動した時に sshd が再起動しないように、 /etc/rc.conf に次の行を追加する。 sshd_enable="NO" AND そして、 Deinstall the openssh or openssh-portable ports if you have one of them installed. openssh もしくは openssh-portable の port がインストールされていれば、 それらをアンインストールする。 V. 解決策 - Solution Do one of the following: 次のいずれかひとつに従ってください。 [For OpenSSH included in the base system] [ベースシステムに含まれる OpenSSH の場合] 1) Upgrade your vulnerable system to 4-STABLE or to the RELENG_5_1, RELENG_4_8, or RELENG_4_7 security branch dated after the correction date (5.1-RELEASE-p3, 4.8-RELEASE-p5, or 4.7-RELEASE-p15, respectively). 1) 弱点を持った FreeBSD システムを 最新の 4-STABLE、 もしくは修正日以降の RELENG_5_1 (5.1-RELEASE-p3)、 RELENG_4_8 (4.8-RELEASE-p5)、RELENG_4_7 (4.7-RELEASE-p15) セキュリティブランチのいずれかにアップグレードする。 2) FreeBSD systems prior to the correction date: 2) 修正日より前の FreeBSD システムの場合: The following patches have been verified to apply to FreeBSD 4.x and FreeBSD 5.x systems prior to the correction date. 以下の修正パッチは、修正日より前の FreeBSD 5.x、FreeBSD 4.x システムに 適用可能なことが確認されているものです。 Download the appropriate patch and detached PGP signature from the following locations, and verify the signature using your PGP utility. 以下の場所から対応する修正パッチをダウンロードし、PGP ユーティリティを使って PGP 署名を検証します。 [FreeBSD 4.3 and 4.4] [FreeBSD 4.3 および 4.4] # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-03:12/buffer44.patch # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-03:12/buffer44.patch.asc [FreeBSD 4.5] # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-03:12/buffer45.patch # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-03:12/buffer45.patch.asc [FreeBSD 4.6 and later, FreeBSD 5.0 and later] [FreeBSD 4.6 とそれ以降、および FreeBSD 5.0 とそれ以降] # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-03:12/buffer46.patch # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-03:12/buffer46.patch.asc Execute the following commands as root: root 権限で次のコマンドを実行します。 # cd /usr/src # patch < /path/to/sshd.patch # cd /usr/src/secure/lib/libssh # make depend && make all install # cd /usr/src/secure/usr.sbin/sshd # make depend && make all install # cd /usr/src/secure/usr.bin/ssh # make depend && make all install (訳注: /path/to/sshd.patch の部分は修正パッチのパス名に置き換えてください) Be sure to restart `sshd' after updating. 更新後には、必ず sshd を再起動してください。 # kill `cat /var/run/sshd.pid` # /usr/sbin/sshd [For the OpenSSH ports] [OpenSSH の port の場合] 次のいずれかひとつに従ってください。 1) Upgrade your entire ports collection and rebuild the OpenSSH port. 1) Ports Collection 全体をアップグレードし OpenSSH の port を再構築する。 2) Deinstall the old package and install a new package obtained from the following directory: 2) 古い (訳注: OpenSSH の) package をシステムから削除し、 修正日以降に作成された新しい package を以下の場所から 取得してインストールする。 [i386] ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-4-stable/security/ [other platforms] Packages are not automatically generated for other platforms at this time due to lack of build resources. [その他のプラットフォーム] 現時点ではその他のアーキテクチャ用の package は自動生成されていません。 これは、構築のためのマシンリソースが不足しているためです。 3) Download a new port skeleton for the openssh or openssh-portable port from: 3) openssh あるいは openssh-portable の新しい port スケルトンを 以下の場所からダウンロードし、それを使って port を再構築する。 http://www.freebsd.org/ports/ and use it to rebuild the port. 4) Use the portcheckout utility to automate option (3) above. The portcheckout port is available in /usr/ports/devel/portcheckout or the package can be obtained from: 4) 上記 (3) の操作を自動的におこなう portcheckout ユーティリティを使う。 portcheckout の port は /usr/ports/devel/portcheckout にあります。 また、portcheckout の package が以下の場所から入手可能です。 ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-4-stable/Latest/portcheckout.tgz ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-5-current/Latest/portcheckout.tgz Be sure to restart `sshd' after updating. 更新後には、必ず sshd を再起動してください。 # kill `cat /var/run/sshd.pid` # test -x /usr/local/etc/rc.d/sshd.sh && sh /usr/local/etc/rc.d/sshd.sh start VI. 修正の詳細 - Correction details The following list contains the revision numbers of each file that was corrected in the FreeBSD base system and ports collection. FreeBSD ベースシステムおよび FreeBSD Ports Collection において、 今回修正された各ファイルのリビジョン番号は以下のとおりです。 Branch Revision ブランチ リビジョン Path パス名 - ------------------------------------------------------------------------- [Base system] [ベースシステム] RELENG_4 src/crypto/openssh/buffer.c 1.1.1.1.2.7 src/crypto/openssh/channels.c 1.1.1.1.2.10 src/crypto/openssh/deattack.c 1.1.1.1.2.5 src/crypto/openssh/misc.c 1.1.1.1.2.3 src/crypto/openssh/session.c 1.4.2.18 src/crypto/openssh/ssh-agent.c 1.2.2.11 src/crypto/openssh/version.h 1.1.1.1.2.12 RELENG_5_1 src/UPDATING 1.251.2.5 src/crypto/openssh/buffer.c 1.1.1.6.4.2 src/crypto/openssh/channels.c 1.15.2.1 src/crypto/openssh/deattack.c 1.1.1.5.4.1 src/crypto/openssh/misc.c 1.1.1.4.2.1 src/crypto/openssh/session.c 1.40.2.1 src/crypto/openssh/ssh-agent.c 1.18.2.1 src/crypto/openssh/version.h 1.20.2.2 src/sys/conf/newvers.sh 1.50.2.6 RELENG_5_0 src/UPDATING 1.229.2.19 src/crypto/openssh/buffer.c 1.1.1.6.2.2 src/crypto/openssh/channels.c 1.13.2.1 src/crypto/openssh/deattack.c 1.1.1.5.2.1 src/crypto/openssh/misc.c 1.1.1.3.2.1 src/crypto/openssh/session.c 1.38.2.1 src/crypto/openssh/ssh-agent.c 1.16.2.1 src/crypto/openssh/version.h 1.18.2.2 src/sys/conf/newvers.sh 1.48.2.14 RELENG_4_8 src/UPDATING 1.73.2.80.2.8 src/crypto/openssh/buffer.c 1.1.1.1.2.4.4.2 src/crypto/openssh/channels.c 1.1.1.1.2.8.2.1 src/crypto/openssh/deattack.c 1.1.1.1.2.4.4.1 src/crypto/openssh/misc.c 1.1.1.1.2.2.4.1 src/crypto/openssh/session.c 1.4.2.17.2.1 src/crypto/openssh/ssh-agent.c 1.2.2.10.2.1 src/crypto/openssh/version.h 1.1.1.1.2.10.2.2 src/sys/conf/newvers.sh 1.44.2.29.2.7 RELENG_4_7 src/UPDATING 1.73.2.74.2.19 src/crypto/openssh/buffer.c 1.1.1.1.2.4.2.2 src/crypto/openssh/channels.c 1.1.1.1.2.7.2.1 src/crypto/openssh/deattack.c 1.1.1.1.2.4.2.1 src/crypto/openssh/misc.c 1.1.1.1.2.2.2.1 src/crypto/openssh/session.c 1.4.2.16.2.1 src/crypto/openssh/ssh-agent.c 1.2.2.8.2.1 src/crypto/openssh/version.h 1.1.1.1.2.9.2.2 src/sys/conf/newvers.sh 1.44.2.26.2.18 RELENG_4_6 src/UPDATING 1.73.2.68.2.47 src/crypto/openssh/buffer.c 1.1.1.1.2.3.4.3 src/crypto/openssh/channels.c 1.1.1.1.2.6.2.2 src/crypto/openssh/deattack.c 1.1.1.1.2.3.4.2 src/crypto/openssh/misc.c 1.1.1.1.2.1.4.2 src/crypto/openssh/session.c 1.4.2.12.2.2 src/crypto/openssh/ssh-agent.c 1.2.2.7.4.2 src/crypto/openssh/version.h 1.1.1.1.2.8.2.3 src/sys/conf/newvers.sh 1.44.2.23.2.36 RELENG_4_5 src/UPDATING 1.73.2.50.2.48 src/crypto/openssh/buffer.c 1.1.1.1.2.3.2.2 src/crypto/openssh/channels.c 1.1.1.1.2.5.2.2 src/crypto/openssh/deattack.c 1.1.1.1.2.3.2.1 src/crypto/openssh/scp.c 1.1.1.1.2.4.2.1 src/crypto/openssh/session.c 1.4.2.11.2.1 src/crypto/openssh/ssh-agent.c 1.2.2.7.2.1 src/crypto/openssh/version.h 1.1.1.1.2.7.2.3 src/sys/conf/newvers.sh 1.44.2.20.2.32 RELENG_4_4 src/UPDATING 1.73.2.43.2.49 src/crypto/openssh/buffer.c 1.1.1.1.2.2.4.2 src/crypto/openssh/channels.c 1.1.1.1.2.4.4.2 src/crypto/openssh/deattack.c 1.1.1.1.2.2.4.1 src/crypto/openssh/scp.c 1.1.1.1.2.3.4.1 src/crypto/openssh/session.c 1.4.2.8.4.2 src/crypto/openssh/ssh-agent.c 1.2.2.6.4.1 src/crypto/openssh/version.h 1.1.1.1.2.5.2.4 src/sys/conf/newvers.sh 1.44.2.17.2.40 RELENG_4_3 src/UPDATING 1.73.2.28.2.36 src/crypto/openssh/buffer.c 1.1.1.1.2.2.2.2 src/crypto/openssh/channels.c 1.1.1.1.2.4.2.2 src/crypto/openssh/deattack.c 1.1.1.1.2.2.2.1 src/crypto/openssh/scp.c 1.1.1.1.2.3.2.1 src/crypto/openssh/session.c 1.4.2.8.2.2 src/crypto/openssh/ssh-agent.c 1.2.2.6.2.1 src/crypto/openssh/version.h 1.1.1.1.2.4.2.4 src/sys/conf/newvers.sh 1.44.2.14.2.26 [Ports] ports/security/openssh-portable/Makefile 1.75 ports/security/openssh-portable/files/patch-buffer.c 1.2 ports/security/openssh-portable/files/patch-deattack.c 1.1 ports/security/openssh-portable/files/patch-misc.c 1.3 ports/security/openssh-portable/files/patch-session.c 1.16 ports/security/openssh-portable/files/patch-ssh-agent.c 1.1 ports/security/openssh/Makefile 1.122 ports/security/openssh/files/patch-buffer.c 1.2 ports/security/openssh/files/patch-deattack.c 1.1 ports/security/openssh/files/patch-misc.c 1.3 ports/security/openssh/files/patch-session.c 1.15 ports/security/openssh/files/patch-ssh-agent.c 1.1 - ------------------------------------------------------------------------- Branch Version string ブランチ バージョン文字列 - ------------------------------------------------------------------------- HEAD OpenSSH_3.6.1p1 FreeBSD-20030917 RELENG_4 OpenSSH_3.5p1 FreeBSD-20030917 RELENG_5_1 OpenSSH_3.6.1p1 FreeBSD-20030917 RELENG_4_8 OpenSSH_3.5p1 FreeBSD-20030917 RELENG_4_7 OpenSSH_3.4p1 FreeBSD-20030917 RELENG_4_6 OpenSSH_3.4p1 FreeBSD-20030917 RELENG_4_5 OpenSSH_2.9 FreeBSD localisations 20030917 RELENG_4_4 OpenSSH_2.3.0 FreeBSD localisations 20030917 RELENG_4_3 OpenSSH_2.3.0 green@FreeBSD.org 20030917 - ------------------------------------------------------------------------- To view the version string of the OpenSSH server, execute the following command: sshd サーバのバージョン文字列を表示するには、次のコマンドを実行します。 % /usr/sbin/sshd -\? The version string is also displayed when a client connects to the server. バージョン文字列は、クライアントがサーバに接続した時にも表示されます。 To view the version string of the OpenSSH client, execute the following command: OpenSSH クライアントのバージョン文字列を表示するには、 次のコマンドを実行します。 % /usr/bin/ssh -V VII. 参考資料 - References 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/doc/en_US.ISO8859-1/books/handbook/mirrors.html (英文) http://www.FreeBSD.org/doc/ja_JP.eucJP/books/handbook/mirrors.html (日本語訳) にまとめられています。 $hrs: announce-jp/FreeBSD-SA/03:12,v 1.5 2003/09/23 13:13:40 hrs Exp $