← volver
CVE-2019-16759criticalbajo ataqueCWE-94

CVE-2019-16759

100Vexday Risk Score

Corrige ahora. Ella está bajo explotación confirmada por CISA y tiene exploit funcional público.

ssvc Actcvss 9.8epss 100%
de la publicación al arma0 días
Publicada en NVD24 sept
1ª PoC23 sept
metasploit23 sept
CISA KEV+771d
probabilidad de explotación
100%top 1% de las CVE
explotación observada
CISA + VulnCheck
33 exploit(s) público(s)
Acción exigida por CISAplazo federal: 2022-05-03

Apply updates per vendor instructions.

Resumen

Falha de execução remota de código pré-autenticação em vBulletin 5.x, explorada via o parâmetro widgetConfig[code] da rota ajax/render/widget_php, que permite injetar e executar PHP arbitrário sem qualquer autenticação. O CVSS 9.8 é justificado: não há pré-condição de configuração, conta ou rede interna — qualquer instalação padrão exposta à internet é vulnerável, o que gerou exploração em massa por botnets dias após a divulgação pública do exploit.

Detalle técnico

A causa raiz (CWE-94, Code Injection) está no widget PHP nativo do vBulletin 5, em includes/vb5/frontend/controller/bbcode.php. A função evalCode() do framework de widgets recebe um bloco de código PHP como parte da configuração de um widget e o executa diretamente com eval($code), sem qualquer sanitização, whitelist de funções ou verificação de origem da requisição.

O vetor de entrada é o parâmetro widgetConfig[code], enviado via POST para a rota routestring=ajax/render/widget_php. Esse endpoint faz parte do sistema de renderização assíncrona de widgets do vBulletin e, por design, não exige sessão autenticada — o próprio mecanismo de widgets foi pensado para ser acessível publicamente em páginas de fórum. O atacante controla integralmente o conteúdo passado a eval(), incluindo chamadas a funções como shell_exec(), o que dá execução de comando no sistema operacional, não apenas no interpretador PHP, com os privilégios do usuário sob o qual o vBulletin roda no servidor web.

O exploit publicado originalmente tinha 18 linhas e não exigia engenharia reversa: bastava montar o POST com routestring e widgetConfig[code]. Segundo Chaouki Bekrar (Zerodium), a falha circulava em mercados privados de exploits há anos antes da divulgação pública em setembro de 2019 — o que levou alguns pesquisadores a classificá-la informalmente como um 'bugdoor'.

Cómo se explota

Exploração real observada: requisição HTTP POST única, sem autenticação, sem necessidade de acesso prévio ou configuração não padrão — funciona em instalações padrão de vBulletin 5.x expostas na rede. A complexidade é trivial (AC:L no CVSS reflete isso corretamente) e não exige interação do usuário.

Após a divulgação em 23/09/2019 na lista Full Disclosure, pesquisadores (Bad Packets/Troy Mursch, Tenable) documentaram ataques em massa por botnets dentro de horas, muitos usando dorks do Shodan para localizar instalações vulneráveis em escala. Um padrão de ataque recorrente usava a injeção para rodar sed via shell_exec() e modificar o próprio bbcode.php, inserindo um backdoor condicionado a um parâmetro de senha (epass) — ou seja, o atacante explorava a RCE não só para comando imediato, mas para plantar uma porta dos fundos persistente, reutilizável mesmo que a vulnerabilidade original venha a ser corrigida depois.

O resultado final é execução de comando arbitrário no host com os privilégios do processo web/PHP do vBulletin — o suficiente, dependendo da configuração do servidor, para controle completo do host, exfiltração ou destruição de banco de dados (há relatos de bancos MySQL inteiros apagados) e uso do servidor como nó de botnet para ataques subsequentes.

Versiones

Afectadas
vBulletin 5.0.0 até 5.5.4 (linha 5.x completa). Nota: um bypass do patch original, documentado publicamente em 2020, afeta adicionalmente 5.5.4 até 5.6.2 através de um vetor de widget diferente (não confirmado nas fontes se recebeu CVE próprio).
Corregidas en
Patch de segurança publicado pela vBulletin Solutions em 25/09/2019 para a linha 5.x (as fontes não especificam um número de versão numerado distinto pós-patch). Esse patch não elimina completamente a classe de vulnerabilidade: o bypass de 2020 via widget_tabbedcontainer_tab_panel exige correção adicional cuja versão/patch exato não está detalhado nas fontes consultadas.

Cómo protegerse

A correção correta é aplicar o patch de segurança que a vBulletin Solutions publicou em 25/09/2019 (poucas horas após a divulgação pública), disponível como patch para a linha 5.x. As fontes consultadas não especificam um número de versão pós-patch distinto de 5.5.4 — o fornecedor distribuiu o patch como arquivo de correção aplicável sobre 5.5.4 (e retroativamente sobre versões anteriores da linha 5.x), não como um novo release numerado; confirme com o painel de administração/changelog do produto qual patch level está instalado antes de considerar o ambiente corrigido.

Atenção crítica: o patch original teve uma correção incompleta. Em agosto de 2020, o mesmo pesquisador (Zenofex) publicou um bypass que reintroduz a mesma classe de RCE pré-autenticada usando um widget diferente (widget_tabbedcontainer_tab_panel, via subWidgets[...][template]=widget_php), afetando versões de 5.5.4 até 5.6.2. Isso significa que apenas ter aplicado o patch de 2019 não garante proteção total contra essa família de falha — é preciso estar na versão mais recente da linha 5.x que trate ambos os vetores, e não apenas confirmar que o patch de setembro de 2019 foi instalado.

Se a atualização imediata não for possível: como medida paliativa, desabilitar ou remover o acesso à rota ajax/render/widget_php (e variantes de widget PHP) via configuração do servidor web/proxy reduz a exposição, mas quebra funcionalidade legítima de widgets PHP customizados, se usados. Bloqueio via WAF de requisições contendo widgetConfig[code] ou subWidgets[*][config][code] ajuda contra exploração automatizada genérica, mas não é garantia contra variações do payload. Não existe mitigação de configuração 'oficial' documentada nas fontes além do patch — instalações que não conseguem atualizar devem considerar tirar o fórum do ar até corrigir, como recomendado por pesquisadores na época do incidente.

Cómo detectar

Em logs de servidor web, procure requisições POST para rotas contendo routestring=ajax/render/widget_php (ou diretamente para /ajax/render/widget_php) com parâmetro widgetConfig[code] no corpo — especialmente conteúdo contendo eval, shell_exec, system, base64_decode ou comandos de shell codificados. Para a variante de bypass de 2020, o indicador é requisição para /ajax/render/widget_tabbedcontainer_tab_panel com subWidgets[0][template]=widget_php e subWidgets[0][config][code].

Como indicador de comprometimento pós-exploração, verifique integridade do arquivo includes/vb5/frontend/controller/bbcode.php: campanhas documentadas inseriram uma condicional if (isset($_REQUEST['epass']) && ...) em torno da chamada eval($code) original, criando um backdoor persistente com senha fixa. Qualquer modificação não originada de atualização oficial nesse arquivo é sinal forte de exploração bem-sucedida, mesmo que a vulnerabilidade de origem já tenha sido corrigida depois.

Investigado y redactado con IA a partir del advisory del fabricante y análisis públicos, con las fuentes citadas. Verifica siempre la versión corregida en el advisory oficial antes de actuar.
vBulletin 5.x through 5.5.4 allows remote command execution via the widgetConfig[code] parameter in an ajax/render/widget_php routestring request.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Productos afectados
n/a · n/a
PoCs públicas encontradas33
exploitdbwww.exploit-db.com/exploits/47447no verificadoexploitdbwww.exploit-db.com/exploits/47437no verificadogithubgithub.com/jas502n/CVE-2019-1675921githubgithub.com/theLSA/vbulletin5-rce20githubgithub.com/0xdims/CVE-2019-167596githubgithub.com/M0sterHxck/CVE-2019-16759-Vbulletin-rce-exploit5githubgithub.com/andripwn/pwn-vbulletin4githubgithub.com/FarjaalAhmad/CVE-2019-167594githubgithub.com/r00tpgp/http-vuln-CVE-2019-167593githubgithub.com/ludy-dev/vBulletin_Routestring-RCE1githubgithub.com/sunian19/CVE-2019-167591githubgithub.com/nako48/CVE-2019-167591githubgithub.com/fxp0-4tx/CVE-2019-167590githubgithub.com/psychoxploit/vbull0githubgithub.com/polar1s7/CVE-2019-16759-bypass0vulncheckvulncheck.com/xdb/7275122ff481no verificadovulncheckvulncheck.com/xdb/864418406fc2no verificadovulncheckvulncheck.com/xdb/071ec90a6cd3no verificadovulncheckvulncheck.com/xdb/7d63cbd8af55no verificadovulncheckvulncheck.com/xdb/4587d75eac06no verificadovulncheckvulncheck.com/xdb/4e40b1a2d3fano verificadovulncheckvulncheck.com/xdb/1947002334c8no verificadovulncheckvulncheck.com/xdb/d853d7e336d8no verificadocve_referencepacketstormsecurity.com/files/155633/vBulletin-5.5.4-Remote-Command-Execution.htmlno verificadocve_referencepacketstormsecurity.com/files/158829/vBulletin-5.x-Remote-Code-Execution.htmlno verificadocve_referencepacketstormsecurity.com/files/158830/vBulletin-5.x-Remote-Code-Execution.htmlno verificadocve_referencepacketstormsecurity.com/files/158866/vBulletin-5.x-Remote-Code-Execution.htmlno verificadocve_referencepacketstormsecurity.com/files/154648/vBulletin-5.x-Pre-Auth-Remote-Code-Execution.htmlno verificadocve_referencepacketstormsecurity.com/files/154623/vBulletin-5.x-0-Day-Pre-Auth-Remote-Command-Execution.htmlno verificadovulncheckvulncheck.com/xdb/60d80aaa798dno verificadovulncheckvulncheck.com/xdb/e94e5a578e27no verificadovulncheckvulncheck.com/xdb/f77f6e256780no verificadovulncheckvulncheck.com/xdb/5075aca956f4no verificado
⚠ Recursos públicos, para evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.