Return-Path: owner-bugtraq-jp@SECURITYFOCUS.COM X-Mailer: Mew version 1.94.2pre3 on Emacs 19.34 / Mule 2.3 (SUETSUMUHANA) Mime-Version: 1.0 Content-Type: Text/Plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit X-Dispatcher: imput version 991025(IM133) Lines: 132 Message-ID: <19991117043123W.uematsu@winfx.kgz.com> Date: Wed, 17 Nov 1999 04:31:23 +0900 Reply-To: BUGTRAQ-JP@SECURITYFOCUS.COM Sender: BUGTRAQ-JP List From: "Fuminori Uematsu (=?iso-2022-jp?B?GyRCPyI+Pko4RkEbKEI=?=)" Subject: Re: Kana-Kanji FEP "uum" overflow exploit X-To: BUGTRAQ-JP@SECURITYFOCUS.COM To: BUGTRAQ-JP@SECURITYFOCUS.COM In-Reply-To: <37EAC2453C.DB38SHADOWPENGUIN@fox.nightland.net> 植松@KGZと申します。 From: UNYUN Subject: Kana-Kanji FEP "uum" overflow exploit Date: Fri, 24 Sep 1999 09:13:57 +0900 >かな漢字変換フロントエンドプロセッサ uum にオーバーフローによるセキュリティ >ホールがあるようです。 wnn-users MLに、大阪教育大の青野さんによるパッチが投稿されました ので、こちらにもお送りします。詳しくは、該当メッセージから始まる ツリーを御覧ください。 パッチに関する御意見は、私や青野さん宛ではなく、wnn-users ML宛で お願いします。 From: aono@cc.osaka-kyoiku.ac.jp (Tomoki AONO) Subject: [wnn-users 839] uum-exploit patch (experimental) Date: Tue, 9 Nov 1999 13:30:59 +0900 (JST) >(パッチに関するご注意) > >・無保証です。 >・Xsi/ ディレクトリでpatchコマンドを適用する形になっていま >す。 >・今回のセキュリティホールのサンプルソフトが通らなくなる程 >度のチェックしかしていないので、他に残っている(と思われる) >buffer overrunを利用したセキュリティホールには対応できませ >ん。 >・Public Domainとしますので、どのような形態ででも配布・改 >良・組み込み可です。 -- 植松 文徳 --- Wnn/uum/jhlp.c.orig Sat Aug 14 02:56:44 1999 +++ Wnn/uum/jhlp.c Wed Oct 6 13:21:32 1999 @@ -169,12 +169,14 @@ strcpy(username, getpwuid(getuid())->pw_name); if((name = getenv(WNN_USERNAME_ENV)) != NULL){ - strcpy(username, name); + strncpy(username, name, PATHNAMELEN-1); + username[PATHNAMELEN-1] = '\0'; } for (i = 1; i < argc;) { if (!strcmp(argv[i++], "-L")) { if (i >= argc || argv[i][0] == '-') default_usage(); - strcpy(lang_dir, argv[i++]); + strncpy(lang_dir, argv[i++], 31); + lang_dir[31] = '\0'; for (;i < argc; i++) { argv[i - 2] = argv[i]; } @@ -234,8 +236,9 @@ server_env = WNN_DEF_SERVER_ENV; } if(name = getenv(server_env)) { - strcpy(def_servername, name); - strcpy(def_reverse_servername, name); + strncpy(def_servername, name, PATHNAMELEN-1); + def_servername[PATHNAMELEN-1] = '\0'; + strcpy(def_reverse_servername, def_servername); } } @@ -495,7 +498,8 @@ static int do_k_opt() { - strcpy(uumkey_name_in_uumrc, optarg); + strncpy(uumkey_name_in_uumrc, optarg, PATHNAMELEN-1); + uumkey_name_in_uumrc[PATHNAMELEN-1] = '\0'; if (*uumkey_name_in_uumrc == '\0') { return -1; } @@ -505,7 +509,8 @@ static int do_c_opt() { - strcpy(convkey_name_in_uumrc, optarg); + strncpy(convkey_name_in_uumrc, optarg, PATHNAMELEN-1); + convkey_name_in_uumrc[PATHNAMELEN-1] = '\0'; if (*convkey_name_in_uumrc == '\0') { return -1; } @@ -515,7 +520,8 @@ static int do_r_opt() { - strcpy(rkfile_name_in_uumrc, optarg); + strncpy(rkfile_name_in_uumrc, optarg, PATHNAMELEN-1); + rkfile_name_in_uumrc[PATHNAMELEN-1] = '\0'; if (*rkfile_name_in_uumrc == '\0') { return -1; } @@ -531,8 +537,9 @@ static int do_D_opt() { - strcpy(def_servername, optarg); - strcpy(def_reverse_servername, optarg); + strncpy(def_servername, optarg, PATHNAMELEN-1); + def_servername[PATHNAMELEN-1] = '\0'; + strcpy(def_reverse_servername, def_servername); if (*def_servername == '\0') { return -1; } @@ -541,7 +548,8 @@ static int do_n_opt() { - strcpy(username, optarg); + strncpy(username, optarg, PATHNAMELEN-1); + username[PATHNAMELEN-1] = '\0'; if (*username == '\0') { return -1; } --- Wnn/jlib/js.c.orig Wed Sep 29 14:43:22 1999 +++ Wnn/jlib/js.c Thu Nov 11 11:03:51 1999 @@ -334,7 +334,10 @@ char *pserver; { register char *p; - strcpy(pserver, server); + /* Workaround for pserver buffer overrun : Nov 11,1999 by T.Aono */ + /* assumes pserver[64]. variable length string is not supported. */ + strncpy(pserver, server, 64-1); + pserver[64-1] = '\0'; p = pserver; for( ; *p && *p != ':'; p++) ; if (!*p) return(0); /* does not have a colon */