← volver
CVE-2022-35914criticalbajo ataqueCWE-74

CVE-2022-35914

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 arma11 días
Publicada en NVD19 sept
1ª PoC+11d
metasploit26 ene
CISA KEV+169d
probabilidad de explotación
100%top 1% de las CVE
explotación observada
CISA + VulnCheck
19 exploit(s) público(s)
Acción exigida por CISAplazo federal: 2023-03-28

Apply updates per vendor instructions.

Resumen

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.

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

Cómo se explota

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.

Versiones

Afectadas
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.
Corregidas en
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.

Cómo protegerse

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.

Cómo 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.

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.
/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
Productos afectados
n/a · n/a
⚠ Recursos públicos, para evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.