NetBSD Security Advisory 2004-010 ================================= トピック: compat コードにおける不十分な引数検証問題 (Insufficient argument validation in compat code) バージョン: NetBSD-current: 2004 年 10 月 27 日より前のソース NetBSD 2.0: 影響なし NetBSD 1.6.2: 影響あり NetBSD 1.6.1: 影響あり NetBSD 1.6: 影響あり NetBSD 1.5.3: 影響あり NetBSD 1.5.2: 影響あり NetBSD 1.5.1: 影響あり NetBSD 1.5: 影響あり 影響範囲: ローカルからのサービス妨害 (Local Denial of Service) ローカルからの高い権限の不正獲得 (possible Local Privilege Escalation) 修正日: NetBSD-current: 2004 年 10 月 28 日 NetBSD-2.0 branch: 2004 年 11 月 13 日 (2.0 は修正ずみ) NetBSD-1.6 branch: 2004 年 12 月 17 日 (1.6.3 には修正が含まれる予定) 概要 - Abstract =============== カーネルシステムコールは、ユーザーランドから渡されるデータが正常か どうかの検証を、適切におこなうように実装されていなければなりません。 NetBSD のネイティブシステムコールでは、このようなチェックがおこなわれます。 しかし、/usr/src/sys/compat/* にある、(Linux, FreeBSD, IRIX, OSF1, SVR4, HPUX, ULTRIX などの) 他の OS 用のバイナリーを実行するための 関数群には、カーネルのシステムコールを呼び出す前に、安全でない方法で 引数データを扱っているものがあります。 この問題は Evgeny Demidov 氏によって報告されたものです。 技術的な詳細 - Technical Details ================================ /usr/src/sys/compat/* にある compat サブシステムは、 NetBSD とは異なる OS 向けにコンパイルされたバイナリーを、 それと同じ CPU アーキテクチャーの NetBSD ホストマシンで 実行可能にするためのものです。 NetBSD のネイティブシステムコールセットと、その他の OS の 持っているシステムコールセットは、多くの場合非常に良く似ていますが、 まったく同じではありません。したがって、CPU のネイティブ命令を 変換する必要はありませんが、その他の OS を呼び出すシステムコールは 変換しなければなりません。 そのバイナリーのネイティブな OS、というのは、exec() が実行された時点で 判明します。そこでカーネルは、そのネイティブシステム用の システムコールテーブルをそのバイナリーに割り当てて、バイナリーから システムコールが発行された時、必要ならば「その他の OS → NetBSD」という 変換をおこなう関数が呼び出されるようにします。 これらの変換関数は、引数を並べ変えて形式を合わせ、(signal(3) ID のような) 定数の変換をおこなって、適切な NetBSD ネイティブシステムコールを 呼び出すことで、アプリケーションが要求するサービスを提供します。 一方、このような変換関数の中には、システムコールの引数を使って 安全でない操作をおこなっていたり、カーネルトラップを発生させる目的で 悪用可能なものが存在します。この欠陥には、高い権限を不正に 獲得するために利用することができるものがあるかも知れません。 これらの攻撃はすべて、対象システムへのローカルアクセスを 必要とします。信用できるユーザーのアカウントしかないシステムであれば、 緊急性が高い危険というわけではありません。 'options COMPAT_' をすべてコメントアウトしたカスタムカーネルを 使っているシステムは、この問題の影響はありません。 Evgeny Demidov 氏の勧告もご覧ください。 http://gleg.net/advisory_netbsd2.shtml 回避方法と解決策 - Solutions and Workarounds ============================================ NetBSD 2.0 リリースには、この問題に対する修正がすでに含まれています。 NetBSD 1-5 ブランチは保守が終了しているため、NetBSD-1-6 もしくは NetBSD-2-0 へのアップグレードをおすすめします。 netbsd-1-6, netbsd-2-0 (リリース以前), netbsd-current の場合: *** ソースを使って修正パッチを適用するには: この問題に対する修正には、以下のディレクトリーにあるファイルへの変更が 含まれています。 sys/compat 次の手順は、ソースツリーを更新して新しいバージョンのカーネルを 再構築・インストールすることで、カーネルバイナリーを アップグレードする方法を説明したものです。この手順のうち、 以下の部分は適宜読み変えてください。 BRANCH 対応する CVS ブランチ (netbsd-1-6, netbsd-2-0, HEAD) ARCH (uname -m で表示される) アーキテクチャー KERNCONF カーネル設定ファイルのファイル名 CVS を使ってファイルを更新し、カーネルを 再構築・再インストールするには、次のコマンドを実行します。 # cd src # cvs update -d -P -r BRANCH sys/compat # cd sys/arch/ARCH/conf # config KERNCONF # cd ../compile/KERNCONF # make depend; make # mv /netbsd /netbsd.old # cp netbsd / # shutdown -fr now 謝辞 - Thanks To ================ Evgeny Demidov 氏: 情報提供、修正パッチのレビュー、長期にわたる根気強い協力 Christos Zoulas 氏, David Maxwell 氏, Simon Burge 氏: 修正パッチ作成とレビュー 改訂履歴 - Revision History =========================== 2004-12-16 初版公開 詳細と参考資料 - More Information ================================= 新しい情報が判明した場合、セキュリティー勧告は更新されることがあります。 PGP 署名されたこの勧告の最新版は、次の場所から入手できます。 ftp://ftp.NetBSD.org/pub/NetBSD/security/advisories/NetBSD-SA2004-010.txt.asc NetBSD および NetBSD のセキュリティーに関する情報は、次の場所から入手できます。 http://www.NetBSD.org/ http://www.NetBSD.org/Security/ Copyright 2004, The NetBSD Foundation, Inc. All Rights Reserved. Redistribution permitted only in full, unmodified form. $NetBSD: NetBSD-SA2004-010.txt,v 1.3 2004/12/16 16:12:27 david Exp $ $Id$