SQL Injection en Visforms Base Package for Joomla! < 3.0.5 (CVE-2023-23753)

Volvemos de nuevo a la carga con la publicación de CVEs. En este caso se trata de una vulnerabilidad de inyección SQL en la extensión Visforms Base Package for Joomla!. Tras varios meses de intenso trabajo e intercambio de correos con INCIBE y la CNA encargada de asignar CVEs para Joomla! y sus extensiones, por fin podemos publicarlo. Además, el desarrollador ha hecho en este caso un buen trabajo y ha corregido la vulnerabilidad. El identificador que nos han asignado es el siguiente: CVE-2023-23753.

Como en otras ocasiones, antes de comenzar con la entrada, me gustaría mencionar también a los compañeros del equipo de Seguridad Ofensiva de Grupo CIES – Alisec Francisco Díaz-Pache y Sergio Corral, además de a Kevin Barbón que, junto a mí (David Álvarez), participaron durante todo el proceso de descubrimiento, notificación y publicación de la vulnerabilidad.

En cuanto a la vulnerabilidad, está presente en la extensión Visforms Package for Joomla! (para Joomla! 3) en sus versiones inferiores a la 3.0.5 (ver https://vi-solutions.de/en/downloads-visforms). En este caso, resulta un poco más complicado buscar objetivos vulnerables a través de Google Dorks, si bien es conocido que esta extensión es muy utilizada en sitios web basados en Joomla!, por lo que el número de potenciales webs afectadas es bastante alto. Además, la vulnerabilidad tiene una gravedad alta, ya que puede permitir a un atacante interactuar con la base de datos, extraer, modificar o eliminar información e incluso obtener ejecución remota de código según condiciones.

La vulnerabilidad se encuentra en la función getItems() dentro del fichero “vfbase_j3.9.0_3.0.5\packages\com_visforms_j3.9.0_3.14.11.zip\site\models\visforms.php” incluido al menos en Visforms Base Package for Joomla! < 3.0.4 (el nombre y ubicación de este fichero puede haber sufrido modificaciones en nuevas versiones, si bien se ha comprobado que la vulnerabilidad sigue existiendo). Dentro de esta función se da la vulnerabilidad de inyección SQL vía el parámetro “supportedFieldTypes“, que, a su vez, se ve afectado por el parámetro “addSupportedFieldType” recibido como entrada del usuario.. En el siguiente snippet de código extraído de la extensión se puede apreciar la vulnerabilidad comentada:

public function getItems() {
	//make sure the form is created
	$this->getForm();
	$db = Factory::getDbo();
	$query = $db->getQuery(true);
	$supportedFieldTypes = implode("','", $this->supportedFieldTypes);
	$query->select('*')
		->from($db->qn('#__visfields'))
		->where($db->qn('fid') . ' = ' . $this->_id)
		->where($db->qn('published') . " = " . 1)
		->where('not ' . $db->qn('editonlyfield') . ' = ' . 1)
		->where($db->qn('typefield') . ' in (\'' . $supportedFieldTypes . '\')')	--> 	This line is vulnerable to SQL Injection
		->order($db->qn('ordering') . ' asc');
	$items = $this->_getList($query);
	return $items;
}

Esta vulnerabilidad es fácilmente explotable enviando payloads de inyección SQL vía el parámetro “addSupportedFieldType“, que se envía al servidor cuando se hace uso de un formulario generado a través de la extensión vulnerable Visforms Base Package for Joomla!. Aunque el desarrollador ha decidido no solucionar el problema, desde este blog no entraremos en pruebas de concepto específicas con el objetivo de no contribuir al potencial compromiso de sitios web vulnerables, si bien cualquiera puede instalar el plugin y reproducirlas fácilmente incluso con herramientas como SQLMap.

Para finalizar, desde AsturHackers recomendamos actualizar la extensión a su versión 3.0.5, que ya incluye las correcciones necesarias para mitigar la vulnerabilidad. Finalmente, en caso de imperiosa necesidad de usar la extensión en alguna de sus versiones vulnerables, se recomienda la solución manual de la vulnerabilidad (podéis poneros en contacto con el soporte del fabricante para ello). Asimismo, queremos agradecer al fabricante su predisposición y rapidez a la hora de corregir la vulnerabilidad una vez detectada y comprobada.

Esto es todo por esta vez. Esperamos que todos actualicéis la extensión si la utilizáis y que así los malos no puedan aprovecharse de ella. ¡Os esperamos pronto con más entradas!

~km0xu95