As dependências de código aberto (OSS) representam mais de 80% do código das aplicações atuais. Essas dependências incluem tanto aquelas escolhidas explicitamente pelos desenvolvedores quanto as dependências transitivas, que exigem estratégias específicas de gerenciamento de dependências.
Ao desenvolver um projeto, os programadores costumam incorporar dependências de terceiros para simplificar seu trabalho. Essas dependências diretas são declaradas explicitamente no projeto, geralmente por meio de ferramentas como o Maven ou o Gradle.
No entanto, essas bibliotecas também podem utilizar dependências, criando dependências transitivas que não são importadas diretamente para o projeto, mas sim por meio de outras dependências. Essa estrutura aninhada de dependências destaca a natureza interconectada do desenvolvimento de software e a dependência de código externo.
Os invasores estão interessados apenas em saber se uma vulnerabilidade pode ser explorada, e não se ela existe em uma dependência direta ou transitiva. Além disso, o código do próprio desenvolvedor frequentemente chama diretamente métodos em dependências transitivas, estabelecendo uma relação direta entre o seu código e o código nessas dependências.
A superfície de ataque se amplia devido às dependências transitivas, deixando os sistemas vulneráveis a explorações de diversas maneiras. Existem alguns vetores de ataque comuns que você deve conhecer:
Confusão de dependências pode levar a riscos significativos à segurança, conforme demonstrado pela exploração realizada em 2020 pelo pesquisador de segurança Alex Birsan. Birsan identificou que as empresas frequentemente utilizam, sem querer, nomes de pacotes internos em repositórios públicos. Ele enviou pacotes maliciosos com nomes idênticos e números de versão mais altos para repositórios públicos, o que levou os gerenciadores de dependências a baixar e executar seu código, afetando grandes organizações. Isso destacou o potencial para violações de dados e danos financeiros e à reputação substanciais, caso suas intenções fossem maliciosas.
Injeção de pacotes maliciosos representa outra ameaça, na qual os invasores comprometem pacotes confiáveis já existentes. Ao assumir o controle da conta de um mantenedor ou introduzir atualizações prejudiciais, eles podem inserir código malicioso sem levantar suspeitas. Um exemplo recente envolveu a exploração do Dependabot do GitHub, uma ferramenta automatizada de gerenciamento de dependências. Os invasores obtiveram acesso não autorizado e enviaram pull requests falsos disfarçados como contribuições legítimas do Dependabot. Essas atualizações aparentemente rotineiras, rotuladas como “correções de segurança” ou “patches”, induziram os desenvolvedores a mesclá-las, permitindo que os invasores coletassem e utilizassem indevidamente dados confidenciais.
A exploração de dependências negligenciadas é mais um vetor de ataque que deve ser levado em consideração. Bibliotecas sem manutenção, muitas vezes ignoradas pelos desenvolvedores, tornam-se alvos fáceis. A vulnerabilidade Log4Shell de 2021 no Apache Log4j ilustra bem esse risco: a vulnerabilidade permitia a execução remota de código, mas o impacto generalizado decorreu da prevalência do Log4j como dependência transitiva em inúmeros sistemas. Os invasores exploraram rapidamente essa falha, deixando as organizações na correria para localizar e atualizar a biblioteca oculta em suas complexas estruturas de dependências.
A TuxCare oferece correções de segurança para projetos Java Spring, tanto para dependências diretas quanto para projetos do ecossistema Java, que muitas vezes são incluídos por meio de dependências transitivas.
Nosso Suporte de Ciclo de Vida Ilimitado (ELS) para Spring oferece atualizações de segurança contínuas para projetos Spring em fim de vida útil, incluindo Spring Boot, Spring Framework, Spring Data e muito mais — para que você possa continuar usando com segurança sua versão do Spring sem suporte pelo tempo que for necessário.
Precisa proteger suas aplicações Spring? Solicite um orçamento ou tire suas dúvidas sobre o ELS para Spring aqui.

