← voltar
CVE-2019-16759criticalsob ataqueCWE-94

CVE-2019-16759

100Vexday Risk Score

Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.

ssvc Actcvss 9.8epss 100%
da publicação à arma0 dias
Publicada no NVD24 de set.
1ª PoC23 de set.
metasploit23 de set.
CISA KEV+771d
probabilidade de exploração
100%top 1% das CVEs
exploração observada
simCISA + VulnCheck
33 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2022-05-03

Apply updates per vendor instructions.

Resumo

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.

Detalhamento 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'.

Como é explorada

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.

Versões

Afetadas
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).
Corrigidas em
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.

Como se proteger

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.

Como 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.

Pesquisado e redigido com IA a partir do advisory do fornecedor e de análises públicas, com as fontes acima. Confira sempre a versão corrigida no advisory oficial antes de agir.
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
Produtos afetados
n/a · n/a
PoCs públicas encontradas33
exploitdbwww.exploit-db.com/exploits/47447não verificadoexploitdbwww.exploit-db.com/exploits/47437não 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/7275122ff481não verificadovulncheckvulncheck.com/xdb/864418406fc2não verificadovulncheckvulncheck.com/xdb/071ec90a6cd3não verificadovulncheckvulncheck.com/xdb/7d63cbd8af55não verificadovulncheckvulncheck.com/xdb/4587d75eac06não verificadovulncheckvulncheck.com/xdb/4e40b1a2d3fanão verificadovulncheckvulncheck.com/xdb/1947002334c8não verificadovulncheckvulncheck.com/xdb/d853d7e336d8não verificadocve_referencepacketstormsecurity.com/files/155633/vBulletin-5.5.4-Remote-Command-Execution.htmlnão verificadocve_referencepacketstormsecurity.com/files/158829/vBulletin-5.x-Remote-Code-Execution.htmlnão verificadocve_referencepacketstormsecurity.com/files/158830/vBulletin-5.x-Remote-Code-Execution.htmlnão verificadocve_referencepacketstormsecurity.com/files/158866/vBulletin-5.x-Remote-Code-Execution.htmlnão verificadocve_referencepacketstormsecurity.com/files/154648/vBulletin-5.x-Pre-Auth-Remote-Code-Execution.htmlnão verificadocve_referencepacketstormsecurity.com/files/154623/vBulletin-5.x-0-Day-Pre-Auth-Remote-Command-Execution.htmlnão verificadovulncheckvulncheck.com/xdb/60d80aaa798dnão verificadovulncheckvulncheck.com/xdb/e94e5a578e27não verificadovulncheckvulncheck.com/xdb/f77f6e256780não verificadovulncheckvulncheck.com/xdb/5075aca956f4não verificado
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.