Michel Ishizuka
cqw10****@nifty*****
2004年 9月 12日 (日) 18:16:42 JST
ごぶさたしてます。石塚です。 件のセキュリティホールについて大雑把に調べてみました。 調べたのは全部 CVS の HEAD 版です。 CAN-2004-0694 http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2004-0694 を見て も ** RESERVED ** とか書いてあって良くわかりません。 CAN-2004-0769 autoconf版では以下のように header.c でサイズチェックを行っていて、 dir_length + name_length が大きすぎた場合はファイル名を削るようになって ますので、たぶん大丈夫かと。 ちなみに、sizeof(hdr->name) == sizeof(dirname) です。 > if (dir_length) { > if (name_length + dir_length >= sizeof(hdr->name)) { > warning("the length of pathname \"%s%s\" is too long.", > dirname, hdr->name); > name_length = sizeof(hdr->name) - dir_length - 1; > hdr->name[name_length] = 0; > } > strcat(dirname, hdr->name); > strcpy(hdr->name, dirname); > name_length += dir_length; > } CAN-2004-0745 autoconf版では util.c に rmdir() が無くなってるので良くわかりません。 CAN-2004-0771 http://www.securityfocus.com/archive/1/363418 に buffer overflow する として例示されている部分は以下のように対策されているみたいです。引用され てませんが、strcpy() も直前のコードを読むと、 strlen(q) * sizeof(char) < sizeof(name) が成立してるはずです。 > if (extract_directory) > xsnprintf(name, sizeof(name), "%s/%s", extract_directory, q); > else > strcpy(name, q); "i bet there is more" というのは、後は自分で探せって事なんだろうか? -- //------------------------------------------------- // Michel Ishizuka ( cqw10****@nifty***** ) //------------------------------------------------- P.S. セキュリティホール memo の 「-lh2- 形式のヘッダ」に幻惑されてしまいまし た。-lh2- には -lh3- や -lh5- みたいなブロックヘッダなんかないはずだし、 パス名関係無いはずだし。良く考えると多分 -h2 の事だと思うんですが。