なぜかIE6SP1に残っている、未チェックのバッファーのセキュリティーホール

MSNのサイトを見ているとIEがクラッシュするという報告を頂いたので、調べてみたところ、IE6SP3では直っている、未チェックのバッファーのセキュリティーホールがIE6SP1では直ってないことがわかりました。

問題になってるのはこのコード

          call    SUB_L63720B25
          mov    ecx,[esp+04h]
          mov    edx,[ecx+04h]
          and    edx,0000001Fh
          movzx    edx,[edx+L63588780]
          shl    edx,02h
          sub    ecx,edx
          mov    ecx,[ecx]
          shl    ecx,05h
          add    ecx,[eax+08h]
          mov    eax,[esp+08h]
          mov    edx,[ecx+0Ch]
          mov    [eax],edx
          mov    edx,[ecx+10h]
          add    edx,[ecx+04h]
          mov    [eax+04h],edx
          retn    0008h

L63720B25からのかえり値が 0だった場合の処理や shl ecx,5でオーバーフローしたときの処理がないのだ。(赤字がオーバーフローが起こる可能性がある場所)

参考までに、これがIE6SP3のコード

 SUB_L7E5A9EFB:
          mov    edi,edi
          push    ebp
          mov    ebp,esp
          push    esi
          push    edi
          call    SUB_L7E5A9CDA
          mov    edx,[ebp+08h]
          mov    esi,[edx+04h]
          mov    ecx,esi
          and    ecx,0000001Fh
          movzx    ecx,[ecx+L7E391C10]
          shl    ecx,02h
          mov    edi,edx
          sub    edi,ecx
          test    eax,eax
          mov    ecx,[edi]
          jz     L7E5A9F62
          test    esi,00100000h
          mov    esi,[edx+24h]
          jz     L7E5A9F34
          mov    esi,[esi+04h]
 L7E5A9F34:
          cmp    eax,esi
          jnz    L7E5A9F62
          test    ecx,ecx
          jl     L7E5A9F62
          mov    esi,[eax+04h]
          shr    esi,02h
          cmp    ecx,esi
          jge    L7E5A9F62
          shl    ecx,05h
          add    ecx,[eax+08h]
          cmp    [ecx+18h],edx
          jnz    L7E5A9F62
          mov    edx,[ecx+0Ch]
          mov    eax,[ebp+0Ch]
          mov    [eax],edx
          mov    edx,[ecx+10h]
          add    edx,[ecx+04h]
          mov    [eax+04h],edx
 L7E5A9F62:
          pop    edi
          pop    esi
          pop    ebp
          retn    0008h

青字が、追加されてるチェックコードの個所

というわけで。MS11-003v4には修正済みコードを適用してみたよ
WLUからのダウンロードでどうぞ。

おすすめ

11件のフィードバック

  1. vpointx より:

    更新ファイルアップありがとうございました。
    早速インストールしようとしたところ
    Setup cannot update your Windows 2000 files
    because the language installed on your system is different from the update language.
    KB2482017 Setup Errorというダイアログがでて
    インストールできませんでした。

  2. blackwingcat より:

    英語版と日本語版2つアップしてるんですが、英語版ダウンロードしていませんか?

  3. vpointx より:

    お恥ずかしいかぎりです。英語版をインストールしようとしてました。そこで、気を取り直して日本語版をインストールしたのですがやはり、エラーがでました。
    AppName: iexplore.exe AppVer: 6.0.2800.1106
    ModName: mshtml.dll ModVer: 6.0.2800.1663
    Offset: 00258163
    Exception Information
    Code: 0xc0000005 Flags: 0x00000000
    Record: 0x0000000000000000
    Address: 0x00000000637d8163
    エラー報告の内容を見ると各モジュールの情報が
    Module 138まで、ならんでいて、とても書ききれませんでした。

  4. blackwingcat より:

    ちょっと、ここからはうちの環境ではエラーが出なくなったので
    確認が難しいのですが、MSNのどの記事を開いてもエラーが出ますか?
    もし、エラーが出た時の ECXの値が表示されていたらお願いします
    http://goo.gl/bfCFW
    ちょっと、実験版つくってみたので試してみてください。

  5. vpointx より:

    実験版を入れたら、エラーがでなくなりました。
    あと、気づいた点は、いままで、MSNのニュースに
    移動するときに、右側にCMがでていたところが、
    その、コラムの場所が空白になりました。
    これって、CMの表示部分がエラーを起こしていたということでしょうか?
    もう一度、V4にしてから、エラーの報告をいたします。

  6. vpointx より:

    実験版をFireFoxの画面とみくらべてみたところ、CMの部分がなくなったのではなくて、一番下に移動していました。どうやら、レイアウトの仕方が変わったようにみえます。

  7. vpointx より:

    v4をいれて実験しました
    ニュースのリンクはほぼすべて、落ちてしまいます。ほかの、リンクは、落ちないものもあり、
    よく見比べると、
    左側のコラムが1つのものが落ち、
    左側のコラムが1つでも、そのコラムにタブがついている、レイアウトのものは落ちませんでした
    Exception Information
    Code: 0xc0000005 Flags: 0x00000000
    Record: 0x0000000000000000
    Address:0x00000000637d8163
    Thread 1
    Thread ID: 0x00000618
    Context:
    EDI: 0x00000750 ESI:0x77f88f08
    EAX: 0x17d20000 EBX:0x0012af30
    ECX: 0x00001000 EDX:0x00000000
    EIP: 0x77f88f13 EBP:0x0012af38
    SegCs: 0x00000023

  8. blackwingcat より:

    > Address:0x00000000637d8163
    >Thread 1
    >EIP: 0x77f88f13 EBP:0x0012af38
    エラーレポート参照するときは、
    Thread 1 を出すのではなく、
    Addressの部分と EIP の値が一致する Thread
    を探して貼り付けるのがベストです|・ω・)
    他の奴はまず関係ありません
    とりあえず、実験版じゃないV5を公開しました
    ご協力ありがとうございます

  9. vpointx より:

    EIPのこと、御尤もと思い、今さながら、早速
    もう一度調べてみたのですが、30スレッドが
    あって、アドレスの初めの部分がすべて0x77f88
    で始まっていていて、最後の3バイトだけが違う
    だけで、エラーのアドレスを見つけることはできませんでした。
    1 EIP:0x77f88f13
    2 EIP:0x77f883a3
    3 EIP:0x77f883a3
    4 EIP:0x77f88af7
    5 EIP:0x77f88f13
    6 EIP:0x77f88f03
    7 EIP:0x77f88f03
    8 EIP:0x77f88b37
    9 EIP:0x77f88af7
    10 EIP:0x77f88f13
    11 EIP:0x77f88f03
    12 EIP:0x77f88f03
    13 EIP:0x77f88f13
    14 EIP:0x77f88f13
    15 EIP:0x77f88f03
    16 EIP:0x77f88f03
    17 EIP:0x77f88f13
    18 EIP:0x77f88f13
    19 EIP:0x77f88f13
    20 EIP:0x77f88f03
    21 EIP:0x77f88af7
    22 EIP:0x77f88af7
    23 EIP:0x77f88af7
    24 EIP:0x77f88af7
    25 EIP:0x77f88f13
    26 EIP:0x77f88f13
    27 EIP:0x77f88f03
    28 EIP:0x77f88f03
    29 EIP:0x77f88f03
    30 EIP:0x77f88f13
    お役立てず申し訳ありませんでした。
    V5にしたら、エラーがでなくなりました。
    ありがとうございました。
    それから、ご報告があります。
    カーネルをV14bにしたら、GIMP2.6.12が起動できなくなっていました。v14aにもどしたら、起動できました。

  10. blackwingcat より:

    ありがとうございます。
    修正した、v14cリリースしました

  11. vpointx より:

    ありがとうございます。さっそくV14cインストールしました。GIMPも起動できました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です