← back
CVE-2019-9082highunder attackCWE-306

CVE-2019-9082

100Vexday Risk Score

Patch now. It under exploitation confirmed by CISA and has a working public exploit.

ssvc Actcvss 8.8epss 97%
from disclosure to weapon8 days
Published on NVDFeb 24
1st PoC+8d
metasploitDec 10
CISA KEV+983d
exploitation probability
97%top 1% of all CVEs
observed exploitation
yesCISA + VulnCheck
4 public exploit(s)
Action required by CISAfederal deadline: 2022-05-03

Apply updates per vendor instructions.

Summary

CVE-2019-9082 é uma falha de execução remota de comando no framework PHP ThinkPHP, explorada via chamada ao método interno invokeFunction do controlador \think\app, que permite acionar call_user_func_array com função e argumentos controlados pelo atacante (tipicamente system() + comando). Está no catálogo KEV da CISA, com exploração confirmada em campo, e tem módulo Metasploit e template Nuclei públicos — a barreira técnica para explorá-la é baixa. Não exige autenticação: qualquer instância exposta com a rota vulnerável habilitada está em risco.

Technical detail

O dispatch de rotas do ThinkPHP permite indicar controlador e método diretamente via parâmetro de URL ("s"). A classe \think\app expõe o método invokeFunction, que — sem validação adequada de quais funções internas podem ser chamadas externamente — permite ao atacante escolher a função PHP a executar (vars[0]) e os argumentos passados a ela (vars[1][]) via call_user_func_array. O resultado é injeção de código (CWE-94); a CISA também associa CWE-306 (ausência de autenticação para função crítica), já que a rota fica acessível sem login em instalação padrão. O atacante controla integralmente qual função nativa do PHP é invocada e o conteúdo do primeiro argumento — no payload canônico documentado, function=system e vars[1][]=, resultando em execução arbitrária de comando no contexto do processo web/PHP.

How it’s exploited

O vetor é uma requisição HTTP simples (GET ou POST) contra o endpoint público do framework, sem necessidade de autenticação ou configuração fora do padrão — basta acesso de rede ao serviço e a rota de dispatch habilitada. Isso torna a exploração trivial de automatizar, e de fato há registro de exploração massiva por scanners e botnets contra ThinkPHP e produtos que o embutem, o que motivou a inclusão no catálogo KEV da CISA (adicionada em 2021-11-03, com prazo de correção definido para 2022-05-03 para agências federais dos EUA). A existência de módulo Metasploit e template Nuclei elimina praticamente toda a barreira de conhecimento técnico necessária para explorar em massa.

Versions

Affected
Segundo a descrição oficial do CVE: ThinkPHP anterior à versão 3.2.4, usado em Open Source BMS v1.1.1 e outros produtos que embutem o framework. Ressalva importante: o mecanismo de exploração publicamente documentado (rota invokeFunction/\think\app) é característico das branches 5.x do ThinkPHP, não da série 3.2 — há inconsistência entre a numeração de versão atribuída ao CVE e a mecânica técnica descrita. Trate a versão declarada com cautela e teste a rota diretamente contra a instância em vez de confiar apenas no número de versão.
Fixed in
3.2.4 e versões posteriores, conforme a descrição oficial do CVE. Não há, nas fontes consultadas, confirmação de número de patch específico para os ramos 5.0.x/5.1.x do ThinkPHP associados à mesma técnica de exploração — se a instância roda 5.x, verifique o changelog oficial do projeto antes de assumir que está corrigida.

How to protect

A ação recomendada pela CISA é 'aplicar atualizações conforme instruções do fornecedor'. A descrição oficial do CVE indica correção a partir da versão 3.2.4 do ThinkPHP; se a instância expõe a rota vulnerável e não pode ser atualizada imediatamente, o paliativo real é bloquear no WAF/proxy reverso requisições cujo parâmetro de rota contenha 'invokefunction', 'call_user_func_array' ou o namespace '\think\app' — isso reduz superfície de ataque para o payload conhecido, mas não corrige a causa raiz: qualquer variação do payload que escape do filtro volta a funcionar. Desabilitar modo debug e multi-módulo em produção, quando aplicável, também reduz exposição. Não funciona como mitigação: ocultar banners ou mensagens de erro que identifiquem o framework — scanners testam a rota diretamente, sem depender de fingerprint visível.

How to detect

Nos logs de acesso do servidor web, procure requisições para rotas contendo 'public/?s=index/\think\app/invokefunction', 'call_user_func_array' ou 'vars[0]=' no querystring — a presença isolada já indica tentativa de exploração, mesmo sem sucesso confirmado. Complementar com monitoramento de processos filhos inesperados do PHP-FPM/Apache (chamadas a system(), sh -c) e criação de arquivos/webshells em diretórios de template ou upload imediatamente após essas requisições. Como a CVE está no KEV por exploração massiva e automatizada, presença do payload no log não implica necessariamente ataque direcionado — correlacione com o código de resposta HTTP e atividade pós-exploração antes de escalar como incidente.

Researched and written with AI from the vendor advisory and public analysis, with the sources above. Always confirm the fixed version in the official advisory before acting.
ThinkPHP before 3.2.4, as used in Open Source BMS v1.1.1 and other products, allows Remote Command Execution via public//?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]= followed by the command.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
Affected products
n/a · n/a
⚠ Public resources, to assess the exposure of systems you control or are authorized to test. Test only with authorization.