gzipだけじゃない脆弱性

Bug 204676: CVE-2006-4334 gzip multiple issues (CVE-2006-4335, CVE-2006-4336, CVE-2006-4337, CVE-2006-4338) を読んでびっくり。要は私が1989年に書いたLHAの元になったC言語ソースでチェックをさぼっていたところが今になって見つかってしまったわけだ。申し訳ないがこれはgzipだけの問題ではなく,あちこちにあるLHA対応の解凍ソフトは全滅かも。あいたたたっ。

[2006-09-23追記] スラッシュドット ジャパン | gzipに複数の脆弱性~LHAにも関連あり?で取り上げていただいた。

書籍に載せたコード

書籍に載せたコードへの御大自らのpatchキボヌ

パッチ

リンクどもです。

リンクどもです。

pt_table破壊の可能性は?

 件の修正コードですが,0x2000若しくは0x4000の値で定義されるDIST_BUFSIZEで領域チェックを行っているところを見ると,c_table (d_buf)が渡された際についてのみ考慮されているようなのですが,read_pt_len()からmake_table()が呼び出された際に,pt_tableが破壊される可能性は全くないのでしょうか?
 可能性があるとなると,ush pt_table[256]; と宣言されているpt_tableに対してDIST_BUFSIZEでの領域チェックを行ったところで無意味ということになってしまいますが?

えっ;;;

すいません,あとでよく見ます。

先ほど書き忘れましたが…

 先ほど書き忘れましたが,件の修正コードのままでは多くのファイルが展開できなくなるような気がします。

nextcode = MIN(start[len] + weight[len], DIST_BUFSIZE);

と修正されていますが,少し後の

k = start[len];
p = &table[k >> jutbits];

の部分は,元々table[]のサイズ(256若しくは4096)を超えた値を想定したコードとなっているため,これをtable[]のサイズに縮小してしまったのでは正常なテーブルを作成できなくなってしまいます。

 ただ,これはLHAを前提とした話なので,gzipで同じ問題が発生するのかは確認していません。LHAへ単純に適用してみたところ,ハフマンエラーとCRCエラーの嵐となったもので…。

あれあれ

パッチは解説に書かれていること以外にも「念のため」修正したところがあるんですね。最初のpt_table破壊の可能性はないように思うんですが(そもそもこちらは != を < に直すだけで十分のような気がするのですが),こちらのnextcodeのほうは確かにこれじゃまずいですね。ちゃんとテストしているんでしょうか。Miccoさん,パッチのパッチを投稿していただけませんでしょうか(どこに投げればいいのでしょうか)。

修正したunlzh.cを置いておきました。

私のWebページに今回の脆弱性について書いたページがありますので,そこへ修正したunlzh.cを置いておきました。ただ,少々気になった箇所がありましたので,純粋な修正ファイルではなく,日本語のコメント入りになっています。

http://www2.nsknet.or.jp/~micco/notes/gzipvul.htm

どうもありがとうございます

pt_tableについても私の言うことは信じないで独立にお考えください。いずれにしても当時のコードはトリッキーでわかりにくいですね。

コメントの表示オプション

お好みの表示方法を選択し、「設定の保存」をクリックすると、表示方法を変更することができます。