Categoria do OWASP: MASVS-CODE - Qualidade do código (link em inglês)
Visão geral
O uso de bibliotecas ou APIs não seguras reduz significativamente a postura de segurança do aplicativo. Uma violação de segurança em qualquer uma dessas dependências permitiria que um invasor usasse uma série de vetores para realizar um amplo conjunto de ataques, como man-in-the-middle (MitM) e execução remota de código (RCE, na sigla em inglês).
A ameaça de implementar dependências não seguras surge quando os desenvolvedores não integram avaliações de segurança e testes de vulnerabilidade no ciclo de vida de desenvolvimento de software (SDLC, na sigla em inglês) ou, em alguns casos, não implementam uma política de atualização automática para dependências de aplicativos.
A exploração de dependências geralmente começa pela análise do binário do aplicativo (.apk) para buscar bibliotecas vulneráveis. Neste ponto, a inteligência de código aberto (OSINT, na sigla em inglês) é executada para revelar vulnerabilidades que poderiam ser exploradas e já foram descobertas. Os invasores podem aproveitar informações divulgadas publicamente, como vulnerabilidades e exposições comuns (CVEs, na sigla em inglês), para realizar mais ataques.
Impacto
A exploração de dependências não seguras pode levar a um amplo conjunto de ataques, como execução remota de código (RCE), injeções de SQL (SQLi) ou scripting em vários sites (XSS). Portanto, o impacto geral está diretamente relacionado ao tipo de vulnerabilidade que o software de terceiros apresenta e que os invasores podem explorar. As possíveis consequências de uma exploração de dependências vulneráveis são violações de dados ou indisponibilidade de serviços, que podem levar a um impacto significativo na reputação e na rotatividade econômica.
Mitigações
Defesa em profundidade
As mitigações listadas abaixo precisam ser implementadas para garantir uma postura de segurança mais forte e reduzir a superfície de ataque do aplicativo. A abordagem exata precisa ser sempre avaliada caso a caso.
Avaliações de vulnerabilidade de dependência
Implemente a verificação de dependência no início do ciclo de desenvolvimento para detectar vulnerabilidades em códigos de terceiros. Essa fase testa se o código interno é ou não seguro antes de ser lançado em ambientes de produção. A verificação pode ser complementada pela implementação de ferramentas de teste estático e dinâmico de segurança para aplicativos (SAST e DAST, respectivamente, na sigla em inglês) no ciclo de vida de desenvolvimento de software para melhorar a postura de segurança do app.
Atualizar dependências continuamente
Sempre tenha o cuidado de atualizar continuamente qualquer dependência incorporada no código. Para essa finalidade, recomendamos a implementação de atualizações automáticas que são enviadas para produção sempre que um componente de terceiros libera um novo patch de segurança.
Realizar teste de penetração de aplicativos
Realize testes de penetração regularmente. O objetivo deles é descobrir qualquer vulnerabilidade conhecida que possa afetar o código reservado e/ou dependências de terceiros. Além disso, as avaliações de segurança geralmente revelam vulnerabilidades desconhecidas (dia zero). Os testes de penetração são úteis para os desenvolvedores porque fornecem um resumo da postura de segurança atual do aplicativo e ajudam a priorizar problemas de segurança que precisam ser resolvidos.
Recursos
Como reconhecer e gerenciar dependências não seguras (link em inglês)
Recursos de segurança do GitHub (link em inglês)
Como proteger dependências (link em inglês)
CWE-1395: dependência de um componente de terceiros vulnerável (link em inglês)