NetBSD Security Advisory 2003-011 ================================= トピック: realpath(3) における「一つ違い (off-by-one)」エラー (off-by-one error in realpath(3)) バージョン: NetBSD-current: 2003 年 8 月 4 日より前のソース NetBSD 1.6.1: 影響あり NetBSD 1.6: 影響あり NetBSD-1.5.3: 影響あり NetBSD-1.5.2: 影響あり NetBSD-1.5.1: 影響あり NetBSD-1.5: 影響あり 影響範囲: リモートからのバッファーオーバーランおよび、 root 権限の不正使用の可能性 (Possible remote buffer overrun/root compromise) 修正日: NetBSD-current: 2003 年 8 月 4 日 NetBSD-1.6 branch: 2003 年 8 月 5 日 (1.6.2 は修正ずみ) NetBSD-1.5 branch: 2003 年 8 月 6 日 概要 - Abstract =============== ライブラリー関数 realpath(3) に、1 バイトのバッファーオーバーラン を引き起こす可能性のある、文字列操作の誤りが含まれていました。 realpath(3) は ftpd(8) などの重要性の高いネットワークデーモンで 使われているため、この弱点はリモートから悪用できる危険性があります。 注意: wu-ftpd サーバー (NetBSD のベースシステムには含まれていません) の 配布物にある realpath(3) に由来する関数には、同じエラーが 含まれています。この問題に関する情報は、ここ数日の間に 公開されており、wu-ftpd に対する悪用コードも公開されています。 おそらく、他のサービス用の悪用コードも存在するでしょう。 もし影響を受けるサービスを提供しているなら、至急修正パッチを 適用することをおすすめします。 技術的な詳細 - Technical Details ================================ http://www.kb.cert.org/vuls/id/743092 NetBSD ベースシステムにおいて、realpath(3) を使っているバイナリーは 次のとおりです。 /bin/systrace /usr/libexec/ftpd (*) /sbin/mount /sbin/umount /usr/sbin/mountd (*) /usr/bin/ssh /usr/sbin/sshd (*) /usr/libexec/sftp-server (*) /usr/sbin/bootpd (*) (*) という印のあるバイナリーはネットワークインターフェースを listen するため、弱点をリモートから悪用することが可能です。 回避方法と解決策 - Solutions and Workarounds ============================================ この弱点を修正するには、libc をアップグレードする必要があります。 次に示す手順は、ソースツリーを更新して libc バイナリーを再構築し、 新しいバージョンの libc をインストールすることで、libc を アップグレードする方法を説明したものです。 ただし、次にあげるような静的にリンクされたバイナリーもすべて、 再構築しなければならないことに注意してください。 - - 1.5, 1.6 ベースのシステムにおける、/sbin および /bin 以下にあるバイナリー - - NetBSD-current システムにおける、/rescue 以下にあるバイナリー - - pkgsrc を使って構築した、静的にリンクされたバイナリー また、libc をアップグレードしてからマシンを再起動しない場合は、 実行中のデーモンを再起動する必要があります。 * NetBSD-current: 2003 年 8 月 3 日より前の NetBSD-current は、 2003 年 8 月 4 日、もしくはそれ以降の NetBSD-current に アップグレードする必要があります。 CVS ブランチ netbsd-current (別名 HEAD) において 更新が必要なファイルは、次のとおりです。 lib/libc/gen/getcwd.c CVS を使ってファイルを更新し、libc と rescue を 再構築・再インストールするには、次のコマンドを実行してください。 # cd src # cvs update -d -P lib/libc/gen/getcwd.c # cd lib/libc # make USETOOLS=no cleandir dependall # make USETOOLS=no install # cd ../../rescue # make USETOOLS=no cleandir dependall # make USETOOLS=no install (この後システムを再起動するか、影響のあるデーモンを再起動する) * NetBSD 1.6, 1.6.1: NetBSD 1.6 および NetBSD 1.6.1 のバイナリー配布物には、この セキュリティー上の弱点が含まれています。 2003 年 8 月 4 日より前の NetBSD 1.6 のソースは、 2003 年 8 月 5 日、もしくはそれ以降の NetBSD 1.6 のソースに アップグレードする必要があります。 NetBSD 1.6.2 には、この弱点に対する修正が含まれる予定です。 CVS ブランチ netbsd-1-6 において更新が必要なファイルは、 次のとおりです。 lib/libc/gen/getcwd.c CVS を使ってファイルを更新し、libc と静的リンクされたバイナリーを 再構築・再インストールするには、次のコマンドを実行してください。 # cd src # cvs update -d -P -r netbsd-1-6 lib/libc/gen/getcwd.c # cd lib/libc # make USETOOLS=no cleandir dependall # make USETOOLS=no install # cd ../../sbin # make USETOOLS=no cleandir dependall # make USETOOLS=no install # cd ../bin # make USETOOLS=no cleandir dependall # make USETOOLS=no install (この後システムを再起動するか、影響のあるデーモンを再起動する) もしくは、次の修正パッチ (オフセット誤差が表示されるかも知れません) を 適用するという方法も有効です。 ftp://ftp.netbsd.org/pub/NetBSD/security/patches/SA2003-011-realpath.patch 修正パッチを適用するには、次のように libc と静的リンクされたバイナリーを 再構築・再インストールして、再起動してください。 # cd src # patch < /path/to/SA2003-011-realpath.patch # cd lib/libc # make USETOOLS=no cleandir dependall # make USETOOLS=no install # cd ../../sbin # make USETOOLS=no cleandir dependall # make USETOOLS=no install # cd ../bin # make USETOOLS=no cleandir dependall # make USETOOLS=no install (この後システムを再起動するか、影響のあるデーモンを再起動する) * バイナリーパッチ バイナリーパッチを適用するには、次の手順を行ないます。 ARCH の部分は、あなたが実行している NetBSD のアーキテクチャー (たとえば i386 など) に置き換えてください。 ftp://ftp.netbsd.org/pub/NetBSD/security/patches/SA2003-011-realpath/netbsd-1-6/ARCH-realpath.tgz cd / && tar xzvpf /path/to/ARCH-realpath.tgz この tar ファイルは、次のファイルの新しいものを展開します。 /usr/lib/libc.so.12.83.2 /usr/lib/libc.so.12 (libc.so.12.83.2 へのシンボリックリンク) /usr/lib/libc.a /usr/lib/libc_p.a /usr/lib/libc_pic.a /sbin/mount /sbin/umount この後、この新しい libc を使うようにシステムを再起動するか、 影響のあるデーモンを再起動します。その場合も、古い libc と 静的リンクされているバイナリーをすべて再構築しなければならない ことに注意してください。 * NetBSD 1.5, 1.5.1, 1.5.2, 1.5.3: NetBSD 1.5, NetBSD 1.5.1, NetBSD 1.5.2, NetBSD 1.5.3 の バイナリー配布物には、このセキュリティー上の弱点が含まれています。 2003 年 8 月 5 日より前の NetBSD 1.5 のソースは、 2003 年 8 月 6 日、もしくはそれ以降の NetBSD 1.5 のソースに アップグレードする必要があります。 CVS ブランチ netbsd-1-5 において更新が必要なファイルは、 次のとおりです。 lib/libc/gen/getcwd.c CVS を使ってファイルを更新し、libc と静的リンクされたバイナリーを 再構築・再インストールするには、次のコマンドを実行してください。 # cd src # cvs update -d -P -r netbsd-1-5 lib/libc/gen/getcwd.c # cd lib/libc # make USETOOLS=no cleandir dependall # make USETOOLS=no install # cd ../../sbin # make USETOOLS=no cleandir dependall # make USETOOLS=no install # cd ../bin # make USETOOLS=no cleandir dependall # make USETOOLS=no install (この後システムを再起動するか、影響のあるデーモンを再起動する) もしくは、次の修正パッチ (オフセット誤差が表示されるかも知れません) を 適用するという方法も有効です。 ftp://ftp.netbsd.org/pub/NetBSD/security/patches/SA2003-011-realpath.patch 修正パッチを適用するには、次のように libc と静的リンクされたバイナリーを 再構築・再インストールして、再起動してください。 # cd src # patch < /path/to/SA2003-011-realpath.patch # cd lib/libc # make USETOOLS=no cleandir dependall # make USETOOLS=no install # cd ../../sbin # make USETOOLS=no cleandir dependall # make USETOOLS=no install # cd ../bin # make USETOOLS=no cleandir dependall # make USETOOLS=no install (この後システムを再起動するか、影響のあるデーモンを再起動する) 謝辞 - Thanks To ================ CERT 改訂履歴 - Revision History =========================== 2003-08-04 初版公開 2003-08-06 バイナリーパッチの追加 2003-08-10 1.5 用の修正手順にあった誤記の訂正 2003-08-10 バイナリーパッチに含まれているのは /sbin/mountd ではなく /sbin/umount である点を訂正 詳細と参考資料 - More Information ================================= 新しい情報が判明した場合、セキュリティー勧告は更新されることがあります。 PGP 署名されたこの勧告の最新版は、次の場所から入手できます。 ftp://ftp.NetBSD.org/pub/NetBSD/security/advisories/NetBSD-SA2003-011.txt.asc NetBSD および NetBSD のセキュリティーに関する情報は、次の場所から入手できます。 http://www.NetBSD.org/ http://www.NetBSD.org/Security/ Copyright 2003, The NetBSD Foundation, Inc. All Rights Reserved. Redistribution permitted only in full, unmodified form. $NetBSD: NetBSD-SA2003-011.txt.asc,v 1.2 2003/08/11 16:23:42 yyamano Exp $ $Id: NetBSD-SA2003-011.txt.asc,v 1.2 2003/08/11 16:23:42 yyamano Exp $