Vol. 2 (abr. 2026) | Pp. 155–157 | ISSN 3086-6103
Alerta: Vulnerabilidade de 2017 do PHPunit continua sendo explorada e apresenta EPSS de mais de 92%
A CVE-2017-9841 representa uma vulnerabilidade no framework PHPUnit, um framework PHP amplamente utilizado. Mesmo existindo uma CVE associada à vulnerabilidade, essa, ainda se vê sendo explorada. A CVE, publicada no Banco de dados Nacional de Vulnerabilidades – NVD – no dia 27/06/2017, parece estar associada ao arquivo eval-stdin.php, encontrado em: vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php.
A vulnerabilidade é preocupante por permitir execução de código remoto sem autenticação anterior através de um POST, sem headers especiais necessários. Surpreendentemente, a raiz da falha, o – eval-stdin.php – não abre espaço para exploração de terceiros por conter um bug de corrupção de memória ou uma falha lógica sublime; mas sim, por se tratar de uma utilidade de teste que jamais deveria ser exposta em ambientes de produção.
Como a Vulnerabilidade funciona
O funcionamento da vulnerabilidade é simples, mas pode causar grande impacto. O eval-stdin possui a seguinte linha de código: eval('?>'.file_get_contents('php://input')); a qual permite execução arbitrária de código, bastando mandar um POST para o servidor.
Por que a vulnerabilidade continua sendo explorada?
A vulnerabilidade foi corrigida em versões lançadas a partir no meio de 2016, porém, ainda hoje, a CVE é dotada de um EPSS de 94.2%, sendo tal número exorbitante relacionado a quatro principais causas.
1.PHPUnit é uma dependência de desenvolvimento, estando listada em composer.json como require-dev. O padrão suposto de deploy em produção seria do lançamento do comando composer install --no-dev, o qual excluiria dependências de teste como PHPUnit. Na prática, porém, muitos deploys ignoram esse passo.
2.Aplicações PHP rodando em servidores Apache ou NGINX geralmente servem o diretório completo do projeto, incluindo o diretório /vendor (Onde se localiza o PHPUnit). Assim, a não ser que sejam implementadas diretrizes de restrição específicas para o PHPUnit, o arquivo continua no escopo do atacante sob uma URL previsível.
3.Muitas bases de código legado são mantidas por pequenos times, os quais muitas vezes instalaram dependências anos atrás e não as revisitaram. Como a aplicação continua a funcionar normalmente, os times não atualizam a versão vulnerável do PHP para a versão com correções.
4.O ecossistema de ataque conta com mais de 18 exploits públicos conhecidos de acordo com um artigo no VulnCheck, incluindo scanners em massa, templates no nuclei e módulos no metasploit. A barreira para o scan da vulnerabilidade é basicamente zero.
Como verificar se estou vulnerável?
Se você estiver utilizando o composer, dê uma olhada em /vendor/composer/installed.json para verificar a versão de seu PHPUnit. A vulnerabilidade existe nas versões 4.8.19 até a 4.8.27 e das versões 5.0.10 a 5.6.2.
Se você não estiver usando um composer, dê uma olhada no arquivo do PHPUnit diretamente em /phpunit/src/Util/PHP/eval-stdin.php .Se o arquivo não existir ou se estiver escrito como:
eval('?>' . \file_get_contents('php://stdin'));
ou
eval('?>' . file_get_contents('php://stdin'));
você não está vulnerável.
Caso contrário, se o código se parecer com:
eval('?>'.file_get_contents('php://input'));
você está vulnerável.
Correção Permanente
Há diversas maneiras de consertar ou mitigar a vulnerabilidade, sendo algumas delas:
1.Remover o PHPUnit assim como outros pacotes de desenvolvedor que, na maioria dos casos, não são necessários para o ambiente de produção.
$ composer install --no-dev
2.Dar update no PHPUnit – versões mais novas não são vulneráveis.
$ composer update
3. Substituir manualmente o conteúdo de eval-stdin.php para o seguinte:
eval('?>' . \file_get_contents('php://stdin'));
4. Desabilitar acesso aos pacotes do composer ao colocara pasta /vendor no arquivo .htaccess:
Deny from all
Referências
https://web.archive.org/web/20170701212357/http://phpunit.vulnbusters.com/
https://nvd.nist.gov/vuln/detail/CVE-2017-9841
https://www.vulncheck.com/blog/cve-2017-9841
Tags: Alerta, CISA, CVE, Desenvolvimento Seguro, PHP, Vulnerabilidades.
Categorias: CISA, CVE, NIST, Vulnerabilidade.