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$