Problema de seguridad en los temas WordPress Pagelines y Platform

En Desarrollo, Noticias, Webmasters por

En esta ocasión se ha descubierto un grave problema de seguridad en los temas Pagelines y Platform que permite ejecución remota de código, siendo esto excepcionalmente peligroso.

Problema de seguridad en los temas WordPress Pagelines y PlatformSiempre está bien conocer los problemas de seguridad y los fallos que se descubren en los complementos para WordPress, como pueden ser temas o plugins, porque nos ayuda a los desarrolladores a mantener las buenas prácticas escribiendo código más seguro y a los usuarios les permite estar informados de posibles riesgos de seguridad de su blog.

Fallo crítico de seguridad en los temas Pagelines y Platform para WordPress

El reporte de seguridad viene de la mano de la empresa Sucuri (como suele ser habitual) y la han clasificado como una vulnerabilidad crítica de alto riesgo, ya que permite acceso total al servidor.

Las versiones afectadas son:

  • Tema Platform: versiones inferiores a la 1.4.4 (afectado por escalada de privilegios y ejecucuión remota de código).
  • Tema Pagelines: versiones inferiores a la 1.4.6 y además el blog debe permitir que los usuarios se registren, sino no podrá explotar la vulnerabilidad (afectado por la vulnerabilidad escalada de privilegios).

El fallo de seguridad nos permite escalar privilegios. Por ejemplo, a partir de un usuario registrado en nuestro blog como “Subscriptor” puede conseguir que su cuenta pase a tener permisos de administrador.

El problema de escalada de privilegios se encuentra en la siguiente pieza de código de /pagelines/admin/actions.admin.php:

/**
 * Ajax Save Options Callback
 *
 * @package PageLines Framework
 * @since   ...
 *
 */
add_action( 'wp_ajax_pagelines_ajax_save_option', 'pagelines_ajax_save_option_callback' );
function pagelines_ajax_save_option_callback() {
    /** This is how you get access to the database */
	global $wpdb;

	$option_name = $_POST['option_name'];
	$option_value = $_POST['option_value'];

	update_option( $option_name, $option_value );

	die();
}

El problema reside en que todos los hooks wp_ajax_ son accesibles por cualquier usuario registrado en el blog independientemente de sus privilegios, es decir, un simple suscriptor puede ejecutar estos hooks. En este caso permite acceso a la base de datos y permite establecer un suscriptor como administrador del blog. A partir de ahí, el usuario malintencionado puede conseguir acceso total al servidor mediante el editor de archivos WordPress. Tanto Platform como Pagelines son vulnerables.

La vulnerabilidad que permite ejecutar código remoto sólo afecta a Platform y se encuentra en el archivo /platform/includes/library.options.php, en el siguiente código que se emplea para importar la configuración del tema:

if ( isset($_POST['settings_upload']) && $_POST['settings_upload'] == 'settings') {

	if (strpos($_FILES['file']['name'], 'Settings') === false && strpos($_FILES['file']['name'], 'settings') === false){
		wp_redirect( admin_url('admin.php?page=pagelines&pageaction=import&error=wrongfile') );
	} elseif ($_FILES['file']['error'] > 0){
		$error_type = $_FILES['file']['error'];
		wp_redirect( admin_url('admin.php?page=pagelines&pageaction=import&error=file&'.$error_type) );
	} else {

		ob_start();
		include($_FILES['file']['tmp_name']);
		$raw_options = ob_get_contents();
		ob_end_clean();
		$all_options = unserialize($raw_options);

El problema reside en que emplea la función include() que ejecuta el código PHP del archivo que importamos. Este código se puede ejecutar porque la función es llamada desde el hook admin_init, el cual puede ser ejecutado por cualquier usuario cuando visita /wp-admin/admin-post.php o /wp-admin/admin-ajax.php.

Otro ejemplo más de que WordPress se convierte en vulnerable desde que usamos algún complemento, aunque en este caso los desarrolladores han solucionado el problema de forma casi inmediata. Por eso uno de los consejos que daba para elegir un tema WordPress adecuado era que tuviese un desarrollo activo y así nos solucionan los posibles errores de seguridad con la mayor brevedad posible.