From sakai @ fan.gr.jp Sat Apr 21 19:35:48 2007 From: sakai @ fan.gr.jp (Hiroto Sakai) Date: Sat, 21 Apr 2007 19:35:48 +0900 Subject: [Lha-users] =?iso-2022-jp?b?TEhBGyRCJEtASDxlQC0bKEI=?= In-Reply-To: <5b5763d90610091959j2e67c7b2leabba962865ed9b7@mail.gmail.com> References: <10ab72810609232140u66003441j69c285aa86a7db94@mail.gmail.com> <5b5763d90609240502o4ee3a96l2e1e8a454066cf3e@mail.gmail.com> <5b5763d90610081324kb547b39w76d7d691b39413@mail.gmail.com> <5b5763d90610081416o7f06bffbu49310b3372f38e21@mail.gmail.com> <5b5763d90610091959j2e67c7b2leabba962865ed9b7@mail.gmail.com> Message-ID: <20070421193548320486.94e8bb4d@fan.gr.jp> 坂井です。ごぶさたです。 数日前、セキュリティホールmemoさんにlhaの脆弱性に関する件が出ておりました。 RedHatのパッチはxfopen()に対して修正を加えていますが 全然autoconf版にはあたりませんでした... 以上 ご連絡まで。 -- Hiroto Sakai From jca02266 @ gmail.com Sun Apr 22 13:09:51 2007 From: jca02266 @ gmail.com (Koji Arai) Date: Sun, 22 Apr 2007 13:09:51 +0900 Subject: [Lha-users] =?iso-2022-jp?b?TEhBGyRCJEtASDxlQC0bKEI=?= In-Reply-To: <20070421193548320486.94e8bb4d@fan.gr.jp> References: <10ab72810609232140u66003441j69c285aa86a7db94@mail.gmail.com> <5b5763d90609240502o4ee3a96l2e1e8a454066cf3e@mail.gmail.com> <5b5763d90610081324kb547b39w76d7d691b39413@mail.gmail.com> <5b5763d90610081416o7f06bffbu49310b3372f38e21@mail.gmail.com> <5b5763d90610091959j2e67c7b2leabba962865ed9b7@mail.gmail.com> <20070421193548320486.94e8bb4d@fan.gr.jp> Message-ID: <5b5763d90704212109m1f3481bbw249dae6fcac80d7a@mail.gmail.com> 新井です。 autoconf 版では、/tmp にファイルを作成する関数 build_temporary_file() において、xfopen() は使わず、mkstemp() (この関数があれば)を使うように 修正しています。 それではだめですかねえ? パッチは他にも何か入っているので、後日確認しますが 1.14i に対してのセキュリティの 指摘は autoconf 版にも影響があるのかはっきりとしないのでこまりものですねえ。 07/04/21 に Hiroto Sakai さんは書きました: > 坂井です。ごぶさたです。 > > 数日前、セキュリティホールmemoさんにlhaの脆弱性に関する件が出ておりました。 > > > RedHatのパッチはxfopen()に対して修正を加えていますが > 全然autoconf版にはあたりませんでした... > > > 以上 ご連絡まで。 -- Koji Arai From jca02266 @ gmail.com Mon Apr 23 12:40:31 2007 From: jca02266 @ gmail.com (Koji Arai) Date: Mon, 23 Apr 2007 12:40:31 +0900 Subject: [Lha-users] =?iso-2022-jp?b?TEhBGyRCJEtASDxlQC0bKEI=?= In-Reply-To: <5b5763d90704212109m1f3481bbw249dae6fcac80d7a@mail.gmail.com> References: <10ab72810609232140u66003441j69c285aa86a7db94@mail.gmail.com> <5b5763d90609240502o4ee3a96l2e1e8a454066cf3e@mail.gmail.com> <5b5763d90610081324kb547b39w76d7d691b39413@mail.gmail.com> <5b5763d90610081416o7f06bffbu49310b3372f38e21@mail.gmail.com> <5b5763d90610091959j2e67c7b2leabba962865ed9b7@mail.gmail.com> <20070421193548320486.94e8bb4d@fan.gr.jp> <5b5763d90704212109m1f3481bbw249dae6fcac80d7a@mail.gmail.com> Message-ID: <5b5763d90704222040r649a29ffi7b46dd2d087f50ad@mail.gmail.com> 新井です。 件のパッチについて、現状の調査状況を報告します。 > > |diff -burp FC-5/lha-114i/src/lhadd.c /home/lkundrak/lha-114i-SUSE/src/lhadd.c |--- FC-5/lha-114i/src/lhadd.c 2000-10-04 16:57:38.000000000 +0200 |+++ /home/lkundrak/lha-114i-SUSE/src/lhadd.c 2007-04-16 15:57:10.000000000 +0200 |@@ -35,6 +36,8 @@ add_one(fp, nafp, hdr) | if ((hdr->unix_mode & UNIX_FILE_SYMLINK) == UNIX_FILE_SYMLINK) { | char buf[256], *b1, *b2; | if (!quiet) { |+ /* make sure we use a zero-terminated buffer */ |+ hdr->name[255] = 0; | strcpy(buf, hdr->name); | b1 = strtok(buf, "|"); | b2 = strtok(NULL, "|"); ★autoconf版では、symlink 名の処理をヘッダ解析部に移しているので該当箇所なし。 |@@ -211,8 +214,11 @@ find_update_files(oafp) | add_sp(&sp, hdr.name, strlen(hdr.name) + 1); | } | else if ((hdr.unix_mode & UNIX_FILE_TYPEMASK) == UNIX_FILE_DIRECTORY) { |+ /* make sure we use a zero-terminated buffer */ |+ hdr.name[sizeof(hdr.name)-1] = 0; | strcpy(name, hdr.name); | len = strlen(name); |+ /* XXX thomas: what about multiple '/' or about ".." */ | if (len > 0 && name[len - 1] == '/') | name[--len] = '\0'; /* strip tail '/' */ | if (stat(name, &stbuf) >= 0) /* exist ? */ ★get_header() において、hdr.name が '\0' terminate していることを保証 しているので問題なし。まあ、str_safe_copy() に書き換えてもいいのです が。 thomas さんのコメント部分はもう少し検討した方がよいかも。このパッチでは 何もしてないのでとりあえず保留。 |@@ -237,17 +243,21 @@ delete(oafp, nafp) | | old_header_pos = ftell(oafp); | while (get_header(oafp, &ahdr)) { |+ /* make sure we use a zero-terminated buffer */ |+ ahdr.name[sizeof(ahdr.name)-1] = 0; | strcpy(lpath, ahdr.name); | b1 = strtok(lpath, "|"); | b2 = strtok(NULL, "|"); | if (need_file(b1)) { /* skip */ | fseek(oafp, ahdr.packed_size, SEEK_CUR); | if (noexec || !quiet) |+ { | if (b2 != NULL) | printf("delete %s -> %s\n", b1, b2); | else | printf("delete %s\n", b1); | } |+ } | else { /* copy */ | if (noexec) { | fseek(oafp, ahdr.packed_size, SEEK_CUR); ★autoconf版では、symlink 名の処理をヘッダ解析部に移しているので該当箇所なし。 |@@ -276,7 +286,7 @@ build_temporary_file() | signal(SIGHUP, interrupt); | | old_umask = umask(077); |- afp = xfopen(temporary_name, WRITE_BINARY); |+ afp = xfopen(temporary_name, "!" WRITE_BINARY); | remove_temporary_at_error = TRUE; | temporary_fp = afp; | umask(old_umask); ★build_temporary_file() において、xfopen() は使用しなくなっているので 問題なし。 |diff -burp FC-5/lha-114i/src/lharc.c /home/lkundrak/lha-114i-SUSE/src/lharc.c |--- FC-5/lha-114i/src/lharc.c 2007-04-16 15:20:23.000000000 +0200 |+++ /home/lkundrak/lha-114i-SUSE/src/lharc.c 2007-04-16 15:57:10.000000000 +0200 |@@ -1005,10 +1009,18 @@ FILE * | xfopen(name, mode) | char *name, *mode; | { |- FILE *fp; |+ FILE *fp = NULL; |+ |+ if (mode[0] == '!') { |+ int fd; | |+ fd = open(name, O_RDWR|O_CREAT|O_EXCL, 0600); |+ if (fd < 0 || (fp = fdopen(fd, mode + 1)) == NULL) |+ fatal_error(name); |+ } else { | if ((fp = fopen(name, mode)) == NULL) | fatal_error(name); |+ } | | return fp; | } ★build_temporary_file() において、xfopen() は使用しなくなっているので この変更も必要ない。 |@@ -1066,6 +1079,12 @@ open_old_archive() | if (open_old_archive_1(archive_name, &fp)) | return fp; | snprintf(expanded_archive_name, sizeof(expanded_archive_name), |+ "%s." ARCHIVEEXT_OLD, archive_name); |+ if (open_old_archive_1(expanded_archive_name, &fp)) { |+ archive_name = expanded_archive_name; |+ return fp; |+ } |+ snprintf(expanded_archive_name, sizeof(expanded_archive_name), | "%s.lzh", archive_name); | if (open_old_archive_1(expanded_archive_name, &fp)) { | archive_name = expanded_archive_name; ★よくわかりません。 |diff -burp FC-5/lha-114i/src/lhext.c /home/lkundrak/lha-114i-SUSE/src/lhext.c |--- FC-5/lha-114i/src/lhext.c 2007-04-16 15:20:23.000000000 +0200 |+++ /home/lkundrak/lha-114i-SUSE/src/lhext.c 2007-04-16 15:57:10.000000000 +0200 |@@ -360,7 +361,6 @@ extract_one(afp, hdr) | } | | unlink(bb1); |- make_parent_path(bb1); | l_code = symlink(bb2, bb1); | if (l_code < 0) { | if (quiet != TRUE) ★よくわかりません。 -- Koji Arai From jca02266 @ gmail.com Mon Apr 23 13:05:29 2007 From: jca02266 @ gmail.com (Koji Arai) Date: Mon, 23 Apr 2007 13:05:29 +0900 Subject: [Lha-users] =?iso-2022-jp?b?TEhBGyRCJEtASDxlQC0bKEI=?= In-Reply-To: <5b5763d90704222040r649a29ffi7b46dd2d087f50ad@mail.gmail.com> References: <10ab72810609232140u66003441j69c285aa86a7db94@mail.gmail.com> <5b5763d90609240502o4ee3a96l2e1e8a454066cf3e@mail.gmail.com> <5b5763d90610081324kb547b39w76d7d691b39413@mail.gmail.com> <5b5763d90610081416o7f06bffbu49310b3372f38e21@mail.gmail.com> <5b5763d90610091959j2e67c7b2leabba962865ed9b7@mail.gmail.com> <20070421193548320486.94e8bb4d@fan.gr.jp> <5b5763d90704212109m1f3481bbw249dae6fcac80d7a@mail.gmail.com> <5b5763d90704222040r649a29ffi7b46dd2d087f50ad@mail.gmail.com> Message-ID: <5b5763d90704222105x75d87965l4b766ebfc6862e8d@mail.gmail.com> 新井です。 セキュリティmemoの指摘に関して | 一時ファイルに関する競合状態がある模様。CVE-2007-2030 | patch と FreeBSD の ports/archivers/lha を見比べてみたら、 | xfopen() は 2000.07.31 付の patch で使わなくなってい | た (files/patch-ae)。 src/lharc.c の 1066 行目あたりの修正と | lhext.c の修正はされていないようなので追加した方がよさげか。 追加した方がっという部分の記述は先の私のメールでパッチに対するコメント に「よくわかりません」っと書いた部分です。 もう少し、時間が必要です。 | ports/archivers/lha-ac の方は xfopen() をばりばり使っているし、 | 他のところも直ってないようなので、同様に修正した方がよさげか。 ここは(つまり、/tmp race in lhaの本題については)問題ない と判断しました。 -- Koji Arai From jca02266 @ gmail.com Wed Apr 25 14:13:35 2007 From: jca02266 @ gmail.com (Koji Arai) Date: Wed, 25 Apr 2007 14:13:35 +0900 Subject: [Lha-users] =?iso-2022-jp?b?TEhBGyRCJEtASDxlQC0bKEI=?= In-Reply-To: <5b5763d90704222040r649a29ffi7b46dd2d087f50ad@mail.gmail.com> References: <10ab72810609232140u66003441j69c285aa86a7db94@mail.gmail.com> <5b5763d90609240502o4ee3a96l2e1e8a454066cf3e@mail.gmail.com> <5b5763d90610081324kb547b39w76d7d691b39413@mail.gmail.com> <5b5763d90610081416o7f06bffbu49310b3372f38e21@mail.gmail.com> <5b5763d90610091959j2e67c7b2leabba962865ed9b7@mail.gmail.com> <20070421193548320486.94e8bb4d@fan.gr.jp> <5b5763d90704212109m1f3481bbw249dae6fcac80d7a@mail.gmail.com> <5b5763d90704222040r649a29ffi7b46dd2d087f50ad@mail.gmail.com> Message-ID: <5b5763d90704242213i7081b205o39f144faf1db86c6@mail.gmail.com> 新井です。 07/04/23 に Koji Arai さんは書きました: > |@@ -1066,6 +1079,12 @@ open_old_archive() > | if (open_old_archive_1(archive_name, &fp)) > | return fp; > | snprintf(expanded_archive_name, sizeof(expanded_archive_name), > |+ "%s." ARCHIVEEXT_OLD, archive_name); > |+ if (open_old_archive_1(expanded_archive_name, &fp)) { > |+ archive_name = expanded_archive_name; > |+ return fp; > |+ } > |+ snprintf(expanded_archive_name, sizeof(expanded_archive_name), > | "%s.lzh", archive_name); > | if (open_old_archive_1(expanded_archive_name, &fp)) { > | archive_name = expanded_archive_name; > > ★よくわかりません。 ARCHIVEEXT_OLD というマクロがlha-1.14iオリジナルにも、autoconf版にも 存在しないので、どのような拡張子かまだはっきりとしないのですが、 拡張子の指定を省略可能にするためのパッチのように思えます。 このパッチはセキュリティに関連するのでしょうか? もうちょっと調べますが、このパッチは必要ないと思います。 > |diff -burp FC-5/lha-114i/src/lhext.c /home/lkundrak/lha-114i-SUSE/src/lhext.c > |--- FC-5/lha-114i/src/lhext.c 2007-04-16 15:20:23.000000000 +0200 > |+++ /home/lkundrak/lha-114i-SUSE/src/lhext.c 2007-04-16 > 15:57:10.000000000 +0200 > |@@ -360,7 +361,6 @@ extract_one(afp, hdr) > | } > | > | unlink(bb1); > |- make_parent_path(bb1); > | l_code = symlink(bb2, bb1); > | if (l_code < 0) { > | if (quiet != TRUE) > > ★よくわかりません。 このパッチを適用するとmake testが1件通らなくなることを確認しました。 具体的には、以下のようにシンボリックリンクを含むアーカイブに対して、 % touch test % ln -s test test-link % src/lha c test.lzh test-link test-link -> test - Symbolic Link test-link - Frozen(0%) 以下の通り展開先ディレクトリ(-w)を指定しての展開ができなくなります。 % src/lha xw=test-dir test.lzh LHa: Warning: Can't make Symbolic Link "test-dir/test-link" -> "test" LHa: Symbolic Link test-dir/test-link -> test このパッチはセキュリティに関連するのでしょうか? とりあえず、これ以上の情報がない場合は、必要なしと判断します。 -- Koji Arai From jca02266 @ gmail.com Thu Apr 26 13:19:44 2007 From: jca02266 @ gmail.com (Koji Arai) Date: Thu, 26 Apr 2007 13:19:44 +0900 Subject: [Lha-users] =?iso-2022-jp?b?TEhBGyRCJEtASDxlQC0bKEI=?= In-Reply-To: <5b5763d90704242213i7081b205o39f144faf1db86c6@mail.gmail.com> References: <10ab72810609232140u66003441j69c285aa86a7db94@mail.gmail.com> <5b5763d90609240502o4ee3a96l2e1e8a454066cf3e@mail.gmail.com> <5b5763d90610081324kb547b39w76d7d691b39413@mail.gmail.com> <5b5763d90610081416o7f06bffbu49310b3372f38e21@mail.gmail.com> <5b5763d90610091959j2e67c7b2leabba962865ed9b7@mail.gmail.com> <20070421193548320486.94e8bb4d@fan.gr.jp> <5b5763d90704212109m1f3481bbw249dae6fcac80d7a@mail.gmail.com> <5b5763d90704222040r649a29ffi7b46dd2d087f50ad@mail.gmail.com> <5b5763d90704242213i7081b205o39f144faf1db86c6@mail.gmail.com> Message-ID: <5b5763d90704252119v63c0572fob568184ec17dca13@mail.gmail.com> 新井です。 07/04/25 に Koji Arai さんは書きました: > 新井です。 > > 07/04/23 に Koji Arai さんは書きました: > > > |@@ -1066,6 +1079,12 @@ open_old_archive() > > | if (open_old_archive_1(archive_name, &fp)) > > | return fp; > > | snprintf(expanded_archive_name, sizeof(expanded_archive_name), > > |+ "%s." ARCHIVEEXT_OLD, archive_name); > > |+ if (open_old_archive_1(expanded_archive_name, &fp)) { > > |+ archive_name = expanded_archive_name; > > |+ return fp; > > |+ } > > |+ snprintf(expanded_archive_name, sizeof(expanded_archive_name), > > | "%s.lzh", archive_name); > > | if (open_old_archive_1(expanded_archive_name, &fp)) { > > | archive_name = expanded_archive_name; > > > > ★よくわかりません。 > > ARCHIVEEXT_OLD というマクロがlha-1.14iオリジナルにも、autoconf版にも > 存在しないので、どのような拡張子かまだはっきりとしないのですが、 > 拡張子の指定を省略可能にするためのパッチのように思えます。 > > このパッチはセキュリティに関連するのでしょうか? > もうちょっと調べますが、このパッチは必要ないと思います。 結局、FC5とSuSEの差が出ているだけのようです。 SuSE版 lha では、拡張子 ".lha" (ARCHIVEEXT_OLD) も lha アーカイブとみなすようにしているようですね。 このパッチは必要なしという結論です。 > > |diff -burp FC-5/lha-114i/src/lhext.c /home/lkundrak/lha-114i-SUSE/src/lhext.c > > |--- FC-5/lha-114i/src/lhext.c 2007-04-16 15:20:23.000000000 +0200 > > |+++ /home/lkundrak/lha-114i-SUSE/src/lhext.c 2007-04-16 > > 15:57:10.000000000 +0200 > > |@@ -360,7 +361,6 @@ extract_one(afp, hdr) > > | } > > | > > | unlink(bb1); > > |- make_parent_path(bb1); > > | l_code = symlink(bb2, bb1); > > | if (l_code < 0) { > > | if (quiet != TRUE) > > > > ★よくわかりません。 > > このパッチを適用するとmake testが1件通らなくなることを確認しました。 > 具体的には、以下のようにシンボリックリンクを含むアーカイブに対して、 > > % touch test > % ln -s test test-link > % src/lha c test.lzh test-link > test-link -> test - Symbolic Link > test-link - Frozen(0%) > > 以下の通り展開先ディレクトリ(-w)を指定しての展開ができなくなります。 > > % src/lha xw=test-dir test.lzh > LHa: Warning: Can't make Symbolic Link "test-dir/test-link" -> "test" > LHa: Symbolic Link test-dir/test-link -> test > > このパッチはセキュリティに関連するのでしょうか? > とりあえず、これ以上の情報がない場合は、必要なしと判断します。 これは逆に、FC5の以下のパッチ   lha-114i-symlink.patch で、上記不具合を解消しているものが、SuSEとの差分で リバースパッチとして作成されてしまっているだけのようです。 # つまり、FC5とSuSEの差が出ているだけ このパッチは必要なしという結論です。 -- Koji Arai