Vol. 2 | N. 5 | Pp. 155–157 | 2026 | ISSN xxxx-xxxx
Alerta: Vulnerabilidade de 2017 do PHPunit continua sendo explorada e apresenta EPSS de mais de 98%
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.