← voltar
CVE-2022-35914criticalsob ataqueCWE-74

CVE-2022-35914

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 à arma11 dias
Publicada no NVD19 de set.
1ª PoC+11d
metasploit26 de jan.
CISA KEV+169d
probabilidade de exploração
100%top 1% das CVEs
exploração observada
simCISA + VulnCheck
19 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2023-03-28

Apply updates per vendor instructions.

Resumo

Falha de execução remota de código não autenticada no GLPI, causada por um script de exemplo (htmLawedTest.php) da biblioteca de terceiros htmlawed que é distribuído junto com o pacote de release do GLPI e fica acessível publicamente por padrão. Qualquer pessoa com acesso HTTP à instância, sem login, consegue executar comandos no sistema operacional do servidor. Está no catálogo KEV da CISA, com PoC pública, módulo Metasploit e template Nuclei — exploração trivial e em massa.

Detalhamento técnico

O problema não está no código-fonte do GLPI em si, mas na biblioteca de terceiros htmlawed, empacotada dentro de /vendor/htmlawed/htmlawed/ nas releases do GLPI baixadas do GitHub (releases via composer puro, sem o pacote completo, não incluem o arquivo). O arquivo htmLawedTest.php é um script de demonstração da biblioteca, feito para testar configurações do htmLawed() interativamente, e não deveria nunca ficar exposto em produção.

O script monta um array de configuração ($cfg) a partir de qualquer parâmetro POST cuja chave comece com a letra 'h' (ex.: hhook, htext), removendo o prefixo 'h' e usando o restante como nome da opção — controle total do atacante sobre a configuração passada à função htmLawed(). Dentro de htmLawed(), a opção 'hook' é validada apenas com function_exists() e, se existir, a função é invocada como callback: $C['hook']($t, $C, $S), onde $t é o texto enviado pelo usuário (parâmetro 'text').

Essa assinatura de chamada coincide, por coincidência de tipos do PHP, com a assinatura de exec(string $command, array &$output, int &$result_code). Ao definir hook=exec e text=, o atacante faz o PHP interpretar $t como o comando a executar e $C/$S como os parâmetros de saída por referência — execução arbitrária de comando do sistema. A classe é CWE-94 (Improper Control of Generation of Code / Code Injection), materializada como chamada dinâmica de função com nome controlado pelo atacante.

O detalhe crítico: qualquer função PHP que aceite os mesmos tipos de parâmetro (array_map, call_user_func e variantes) também serve como hook, então restringir apenas exec() via disable_functions no php.ini não neutraliza a falha — o vetor de código genérico continua aberto.

Como é explorada

Vetor: uma única requisição HTTP POST para /vendor/htmlawed/htmlawed/htmLawedTest.php, sem autenticação no GLPI, sem sessão válida — o script cria e valida a própria sessão localmente a partir dos parâmetros enviados pelo atacante (sid via POST e cookie). Não exige configuração não padrão: o arquivo vem junto do pacote de release oficial do GLPI e é servido normalmente pelo servidor web, salvo se o administrador tenha removido explicitamente o vendor folder do acesso público.

Complexidade de exploração é mínima (a CVSS AC:L reflete isso corretamente): basta enviar hhook=exec e text= no corpo da requisição. O resultado do exec() é refletido na própria resposta HTML do script, funcionando como um webshell instantâneo — o atacante lê a saída do comando diretamente na página retornada. Não há PR (privilégio) nem UI (interação de usuário) envolvidos.

A CISA confirma exploração ativa em campo (KEV), há PoC pública (inclusive script shell simples publicado por pesquisadores) e módulo Metasploit pronto — o que reduz drasticamente a barreira até para atacantes automatizados fazendo varredura em massa de instâncias GLPI expostas à internet.

Versões

Afetadas
GLPI 9.5.x até 9.5.8 e GLPI 10.0.x até 10.0.2, nas releases que incluem o pacote completo do vendor (download direto das releases do GitHub); instalações via composer sem o pacote completo podem não conter o arquivo, mas o fornecedor trata a faixa como vulnerável de forma geral.
Corrigidas em
GLPI 10.0.3 (branch 10.0.x) e GLPI 9.5.9 (branch 9.5.x, mais antigo). A biblioteca htmlawed também recebeu correção upstream no próprio script de exemplo.

Como se proteger

Atualizar para GLPI 10.0.3 ou superior (ramo 10.0.x) ou 9.5.9 ou superior (ramo 9.5.x antigo) resolve a falha — essas versões removem o script vulnerável do pacote de release. A própria biblioteca htmlawed, upstream, também foi corrigida (o hook/hook_tag do script de exemplo passou a ser explicitamente unset antes de chamar a função), então atualizar a dependência isoladamente também mitiga, se possível.

Se a atualização não for viável de imediato, o paliativo real e eficaz é remover o arquivo /vendor/htmlawed/htmlawed/htmLawedTest.php do servidor — ele não é necessário para o funcionamento do GLPI. Complementar bloqueando acesso HTTP direto a todo o diretório /vendor (nenhum arquivo ali deveria ser servido publicamente) fecha a classe inteira de risco de scripts de exemplo/teste de dependências de terceiros.

O que NÃO funciona: desabilitar apenas exec() via disable_functions no php.ini. Como o mecanismo de exploração aceita qualquer função PHP com assinatura compatível (array_map, call_user_func e outras), bloquear só exec() deixa o vetor de código genérico aberto — o atacante troca de função e mantém RCE.

Como detectar

Buscar em logs de acesso web (access log do servidor HTTP) qualquer requisição — especialmente POST — para o caminho /vendor/htmlawed/htmlawed/htmLawedTest.php. Como esse script nunca é usado em operação normal do GLPI, qualquer acesso a ele é indicador forte de tentativa de exploração ou reconhecimento; presença de parâmetros como hhook, htext ou hspec no corpo da requisição confirma a tentativa. Não há assinatura de payload única a procurar no corpo além desse padrão de nomes de parâmetro, já que o comando executado é livre — o sinal confiável é o próprio acesso ao endpoint, não o conteúdo do comando.

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.
/vendor/htmlawed/htmlawed/htmLawedTest.php in the htmlawed module for GLPI through 10.0.2 allows PHP code injection.
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
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.