[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freewnn:00699] Re: Fw: Re: security bug report
- To: freewnn@tomo.gr.jp
- Subject: [freewnn:00699] Re: Fw: Re: security bug report
- From: ISHIKAWA Mutsumi <ishikawa@XXXX>
- Date: Fri, 17 Aug 2001 02:30:11 +0900
- Cc: ukai@XXXX, maehara@XXXX
- In-Reply-To: <20010814221629P.hiroo@oikumene.gcd.org>
- Organization: Yendot.org: unstable guy
- References: <20010814221629P.hiroo@oikumene.gcd.org>
- Reply-To: freewnn@tomo.gr.jp
- User-Agent: Wanderlust/2.7.1 (Too Funky) SEMI/1.14.3 (Ushinoya) FLIM/1.14.2(Yagi-Nishiguchi) APEL/10.3 Emacs/21.0.104 (i386-debian-linux-gnu)MULE/5.0 (SAKAKI)
むつみ@Debian Projectです。
>>>>> In [freewnn : No.00688]
>>>>> Hiroo ONO (小野寛生) <hiroo@oikumene.gcd.org> wrote:
>> 田畑さんからの返事がきました。
>> Cc: yusuke@kmc.kyoto-u.ac.jp
>> Subject: Re: security bug report
>> From: yusuke@kmc.kyoto-u.ac.jp (TABATA yusuke)
>> Date: Tue, 14 Aug 2001 21:44:48 +0900 (JST)
>> 田畑です
>> 対策としては
>> *辞書のディレクトリの外にはファイル操作をできないようにする
とりあえず、Debian のは影響範囲がでかそう(jserver が root で動いてい
た...) ので、早急に対策を施す必要があったので、うかいさん
(ukai@debian.org)が書いた 以下のパッチを適用したものを 配布することに
しました。
以下 パッチです。jserver_dir 以外の場所には ファイルを書き込めない
ようにしています。
diff -Nru freewnn-1.1.0+1.1.1-a017-6/Xsi/Wnn/jserver/dispatch.c freewnn-1.1.0+1.1.1-a017/Xsi/Wnn/jserver/dispatch.c
--- freewnn-1.1.0+1.1.1-a017-6/Xsi/Wnn/jserver/dispatch.c Tue Mar 21 01:31:44 2000
+++ freewnn-1.1.0+1.1.1-a017/Xsi/Wnn/jserver/dispatch.c Wed Aug 15 23:28:55 2001
@@ -260,7 +260,13 @@
{
char *q;
+#ifdef WNN_ALLOW_UNSAFE_PATH
if (*buffer != '/')
+#else
+ /* XXX: path under jserver_dir only */
+ if (*buffer != '/'
+ || strncmp(buffer, jserver_dir, strlen(jserver_dir)) != 0)
+#endif
{
char *path;
size_t path_len;
@@ -275,6 +281,9 @@
strcpy (path, jserver_dir);
/* strcat(path,c_c->user_name); */
+#ifndef WNN_ALLOW_UNSAFE_PATH
+ if (path[strlen(path)-1] != '/' && *buffer != '/')
+#endif
strcat (path, "/");
strcat (path, buffer);
strcpy (buffer, path);
@@ -282,6 +291,32 @@
free (path);
}
+#ifndef WNN_ALLOW_UNSAFE_PATH
+ {
+ char *p, *pp, *p0;
+ p = pp = p0 = malloc(strlen(buffer)+1);
+ for (q = buffer; *q; p++, q++) {
+ if (*q == '/') {
+ while (*(q+1) == '/')
+ q++;
+ if (strncmp(q, "/..", 3) == 0 && (*(q+3) == '/' || (*(q+3) == '\0'))) {
+ q += 2;
+ p = pp-1;
+ continue;
+ }
+ pp = p;
+ }
+ *p = *q;
+ }
+ *p = '\0';
+ strcpy(buffer, p0);
+ free(p0);
+ }
+ if (strncmp(buffer, jserver_dir, strlen(jserver_dir)) != 0) {
+ /* unsafe path */
+ return NULL; /* XXX */
+ }
+#endif
for (q = buffer; *q++;)
;
q -= 2;
diff -Nru freewnn-1.1.0+1.1.1-a017-6/Xsi/Wnn/jserver/do_filecom.c freewnn-1.1.0+1.1.1-a017/Xsi/Wnn/jserver/do_filecom.c
--- freewnn-1.1.0+1.1.1-a017-6/Xsi/Wnn/jserver/do_filecom.c Tue Mar 21 01:21:12 2000
+++ freewnn-1.1.0+1.1.1-a017/Xsi/Wnn/jserver/do_filecom.c Wed Aug 15 17:58:12 2001
@@ -65,9 +65,10 @@
/* mkdir */
-#define MODE (0000000 | 0000777)
+/* #define MODE (0000000 | 0000777) */
/* #define MODE (0040000 | 0000731) */
/* #define MODE (0000000 | 0000733) */
+#define MODE (0000000 | 0000755)
void
js_mkdir ()
--
いしかわ むつみ
<ishikawa@linux.or.jp>, <ishikawa@debian.org>, <ishikawa@redhat.com>