Como testar vulnerabilidades de segurança no PHP Composer com o Snyk
DeveloperSteve Coochin
20 de maio de 2021
0 minutos de leituraO PHP é amplamente usado para impulsionar sites. De blogs a lojas virtuais, ele faz parte do nosso dia a dia e alimenta grande parte da internet que usamos hoje. De acordo com um relatório da Wappalyzer sobre as principais linguagens de programação de 2020, o PHP detém 79% do mercado de linguagens de backend usadas atualmente na internet.
Um dos maiores desafios das bibliotecas PHP ao longo dos anos tem sido o gerenciamento de pacotes. Existem algumas maneiras de instalar e manter bibliotecas com facilidade, incluindo PECL e CPAN. Vale destacar o PEAR, lançado em 2009, que se tornou uma das primeiras formas de carregar e distribuir bibliotecas. Mais tarde, ele deu origem ao PEAR2, que acabou sendo incorporado ao PHP Composer (que já está no seu nono ano!), tema que vamos explorar hoje.
O que é o PHP Composer?
O PHP Composer é uma ferramenta de gerenciamento de pacotes usada para instalar e atualizar bibliotecas e dependências em PHP. Ela se popularizou rapidamente pela forma como carrega e mantém bibliotecas e dependências em frameworks e projetos. Usada pela linha de comando, ela permite instalar aplicações, bibliotecas e dependências PHP — com recursos de carregamento automático — nos projetos. É importante observar que o PHP Composer não instala nada globalmente.
Vamos falar sobre a segurança do PHP Composer
Embora o PHP Composer acelere o desenvolvimento de aplicativos, ele reduz um pouco o nível de controle e visibilidade. Assim, apesar de facilitar a programação, fica a pergunta: será que ele faz isso com segurança? Com o Snyk, consigo responder a essa pergunta com apenas alguns cliques.
Antes de analisar algumas implementações do PHP Composer em diferentes plataformas, quero destacar alguns pontos.
Como usuário e desenvolvedor dessas plataformas, fiquei surpreso com minhas descobertas por vários motivos. Isso reforça a importância de promover continuamente a conscientização e a educação para desenvolver software com segurança.
Em todos os casos abaixo, entrei em contato com as comunidades para conversar sobre as vulnerabilidades e alertar sobre elas quando ainda não eram conhecidas (muitas já tinham correções).
Kirby
Para começar a usar o Kirby com o Composer, siga as instruções simples de configuração do Kirby com o Composer na documentação:
O Composer instala a versão mais recente do Kirby (3.3.5), que, de acordo com o Snyk Vulnerability Database, tem apenas uma vulnerabilidade de gravidade média e outra de gravidade baixa. No entanto, a CLI do Snyk encontra um problema em uma das dependências: o PHPMailer, que está na versão 6.2.0. Essa versão do PHPMailer apresenta uma vulnerabilidade de alta gravidade de cross-site scripting.
Esse problema foi corrigido no PHPMailer 6.4.1 (versão disponível no momento da redação) e pode ser resolvido executando `composer upgrade` para instalar a versão mais recente. O histórico do módulo revela um longo histórico de vulnerabilidades. Por isso, recomendamos fortemente fazer verificações regulares com o Snyk Code para receber alertas sobre novas vulnerabilidades.
Joomla
O repositório do Joomla inclui um arquivo do Composer que instala todas as dependências necessárias para executar o Joomla. Ao fazer uma verificação com a CLI do Snyk, encontramos 2 problemas e 4 caminhos vulneráveis.
Mais uma vez, encontramos o PHP Mailer, que instala a versão 5.2.28. Essa versão apresenta um problema de validação inadequada de entrada, e o Snyk informa que ele foi corrigido na versão 6.1.6.
O Snyk também identificou uma vulnerabilidade de ataque man-in-the-middle (MITM), introduzida por `paragoine/random_compat` na versão 1.4.3 e associada a `joomla/session`. Ataques MITM são extremamente perigosos, pois permitem a interceptação de comunicações eletrônicas. Para saber mais sobre esse tipo de vulnerabilidade, confira nosso artigo sobre ataques man-in-the-middle.
Drupal
Com o guia prático no repositório do Drupal, podemos começar rapidamente usando a versão de desenvolvimento mais recente do branch 9.x.
Enquanto a instalação é executada, podemos verificar se há problemas conhecidos no Snyk Vulnerability Database, que também mostra vulnerabilidades no histórico de versões do Drupal às quais devemos ficar atentos. Em seguida, usando a CLI do Snyk, vemos que a versão 9.x não apresenta vulnerabilidades. Para reforçar a segurança, podemos fazer o mesmo com o Drupal 8.x e confirmar que ele também não apresenta vulnerabilidades. Ótimo!
Agora que essas duas versões foram verificadas, vamos analisar também o Drupal 7, que ainda é bastante usado. Para isso, clone o repositório do Drupal 7.x.
Ao verificar a versão 7.x, os resultados da CLI do Snyk são um pouco diferentes: encontramos 9 vulnerabilidades e 18 caminhos vulneráveis. Os problemas vão desde exploração de upload de arquivos até DoS, execução remota de código (RCE) e execução arbitrária de código (ACE).
Com base nessas descobertas, recomendo atualizar para a versão 8.x, no mínimo, para manter sua implementação do Drupal segura.
Ajude as comunidades contribuindo com melhorias
Quando comecei a testar algumas dessas plataformas tão usadas, não sabia ao certo o que encontraria. Como mencionei, os resultados foram surpreendentes. Desenvolvedores, equipes ou empresas que usam essas plataformas em produção sem conhecer os riscos talvez não saibam exatamente o que estão incorporando. Espero que este artigo ajude mais equipes a se manterem seguras.
Mas sou apenas um desenvolvedor, e este é apenas um artigo. Para gerar um impacto significativo na segurança, incentivo você a testar os projetos por conta própria e contribuir com as correções. Essas comunidades incríveis são, muitas vezes, mantidas por desenvolvedores apaixonados que querem criar ferramentas para ajudar pessoas no mundo todo — e precisam do seu apoio.
Comece a resolver desafios de capture the flag
Aprenda a resolver desafios de capture the flag assistindo sob demanda ao nosso workshop virtual introdutório.


