As dependências transitivas (as dependências das suas dependências, e as dependências destas, e assim por diante) constituem a maioria dos componentes de software de um aplicativo moderno. Um aplicativo em produção pode ter cinquenta dependências diretas, mas essas cinquenta dependências podem ter, em conjunto, milhares de dependências transitivas. A vulnerabilidade em uma dependência direta, na qual a maioria das equipes de segurança se concentra, é o risco visível. A vulnerabilidade em uma dependência transitiva no nível três ou quatro, a três ou quatro passos de distância dos requisitos diretos do aplicativo, é o risco que a maioria das equipes de desenvolvimento não gerencia ativamente e que muitas ferramentas de SCA não cobrem totalmente no escopo configurado.
O problema da profundidade da exposição é o desafio específico de gestão de riscos. Uma vulnerabilidade em uma dependência direta é gerenciável: é possível identificar a dependência, determinar a versão vulnerável e aplicar a atualização aos requisitos diretos do aplicativo. Uma vulnerabilidade em uma dependência transitiva no nível três exige: identificar que a dependência transitiva está na árvore, determinar quais dependências diretas ou indiretas do aplicativo a incluem, encontrar um caminho de atualização da dependência transitiva que seja aceitável para todas as dependências intermediárias entre o aplicativo e o pacote vulnerável e verificar que a atualização não quebra as dependências intermediárias. Isso costuma ser difícil e, às vezes, impossível sem mudanças significativas na árvore de dependências.
O caso Log4Shell é o exemplo ilustrativo definitivo. A vulnerabilidade do Log4j afetou milhões de aplicativos, a maioria dos quais não havia declarado diretamente uma dependência do Log4j: eles o usavam de forma transitiva, por meio de frameworks de logging, servidores de aplicação e middleware que incluíam o Log4j como dependência transitiva. Muitas organizações só descobriram que foram afetadas quando o CVE foi publicado e elas executaram uma varredura completa das dependências transitivas, não porque sua gestão de dependências diretas fosse inadequada, mas porque as dependências transitivas em vários níveis de profundidade não eram monitoradas continuamente.
Por que isso importa
O risco de dependências transitivas é importante para TPRM porque os fornecedores de software cujos produtos você implanta têm árvores de dependências transitivas que podem conter componentes vulneráveis que eles não monitoram ativamente. Um fornecedor cuja varredura de SCA cobre apenas as dependências diretas pode produzir relatórios de SCA limpos enquanto executa dependências transitivas vulneráveis. Perguntar sobre a cobertura das dependências transitivas é o que revela se a gestão de vulnerabilidades do fornecedor se estende a toda a árvore de dependências.
- SCA configurado apenas para dependências diretas: profundidade transitiva não totalmente coberta
- Descoberta tardia de vulnerabilidades transitivas: encontradas por pesquisa externa, e não por monitoramento interno
- Complexidade do caminho de atualização das dependências transitivas não avaliada
- Profundidade do SBOM: se o SBOM cobre toda a árvore transitiva ou apenas as dependências diretas
- Exposição no estilo Log4Shell: inclusão de dependências transitivas não monitorada continuamente
Como é uma boa prática
Programas maduros de risco de dependências transitivas implementam SCA com varredura de profundidade transitiva completa, mantêm SBOMs que incluem toda a árvore de dependências transitivas, monitoram vulnerabilidades recém-publicadas em toda a árvore de dependências, e não apenas nas dependências diretas, e incluem a cobertura das dependências transitivas como pergunta na avaliação de fornecedores.
- Varredura de SCA com profundidade transitiva completa, não limitada às dependências diretas
- SBOM transitivo completo: todas as dependências em todos os níveis
- Monitoramento contínuo de vulnerabilidades em toda a árvore de dependências
- Avaliação da viabilidade do caminho de atualização para vulnerabilidades transitivas
- Pergunta sobre cobertura transitiva nas avaliações de segurança de software de fornecedores
Ferramentas
SCA com profundidade total: Snyk, Dependabot, OWASP Dependency-Check com varredura transitiva completa
As ferramentas de SCA variam em sua cobertura de dependências transitivas: algumas analisam apenas as dependências diretas por padrão, outras analisam toda a árvore de dependências. Para profissionais de TPRM, perguntar se as ferramentas de SCA de um fornecedor analisam toda a árvore de dependências transitivas e com que profundidade constitui uma pergunta específica sobre a cobertura. O Snyk e o Dependabot oferecem varredura transitiva completa como opção configurável.
Completude do SBOM: Syft para geração de SBOM transitivo completo; Dependency-Track para gestão de SBOM transitivo
Ferramentas de geração de SBOM que produzem a árvore completa de dependências transitivas, e não apenas as dependências diretas, fornecem o inventário completo de componentes que a avaliação de risco transitivo exige. O Syft pode gerar SBOMs CycloneDX com cobertura configurável da profundidade transitiva.
Desafios de governança
O desafio de governança do risco de dependências transitivas é a complexidade da correção. As vulnerabilidades em dependências transitivas podem não ter caminhos de atualização simples: atualizar uma dependência transitiva pode exigir esperar que uma dependência intermediária publique uma atualização, ou pode exigir a sobrescrita da árvore de dependências de maneiras que criam riscos de compatibilidade. A solução de governança é priorizar a correção das vulnerabilidades transitivas pela alcançabilidade, ou seja, se o caminho de código vulnerável é de fato executado pelo aplicativo.
- Configure o SCA para a profundidade transitiva completa, e não apenas para as dependências diretas
- Gere SBOMs transitivos completos: todos os níveis de dependência
- Monitore continuamente a publicação de vulnerabilidades transitivas
- Avalie a alcançabilidade das vulnerabilidades transitivas: se o código vulnerável é de fato chamado
- Inclua a cobertura transitiva na avaliação do programa de SCA do fornecedor
Se você faz parte de uma equipe pequena
Execute uma varredura completa de dependências transitivas no seu aplicativo em produção usando o Snyk ou o OWASP Dependency-Check com o modo transitivo habilitado. Compare as constatações com o seu último relatório de SCA que cobria apenas as dependências diretas. A diferença (vulnerabilidades encontradas em dependências transitivas que não estavam na varredura de dependências diretas) é a sua lacuna atual de exposição transitiva. Para cada vulnerabilidade crítica nessa diferença transitiva, avalie se o caminho de código vulnerável é alcançável a partir do seu aplicativo e priorize de acordo.
- Execute uma varredura completa das dependências transitivas e compare-a com a varredura apenas das dependências diretas
- Identifique a diferença de exposição transitiva
- Avalie a alcançabilidade das vulnerabilidades transitivas críticas
- Inclua a cobertura transitiva nas perguntas de avaliação de fornecedores
O que exigir
Pergunte diretamente:
“Sua varredura de SCA cobre toda a sua árvore de dependências transitivas, e não apenas as dependências diretas, e seu SBOM inclui todos os componentes transitivos? E como vocês identificaram e responderam à vulnerabilidade Log4Shell, considerando que o Log4j normalmente é uma dependência transitiva, e não direta?”
O que esperar como evidência
- Confirmação da varredura de SCA transitiva completa
- SBOM transitivo completo
- Cronograma de resposta ao Log4Shell como estudo de caso de vulnerabilidade transitiva
- Processo de monitoramento de vulnerabilidades transitivas
Um fornecedor que confirma ter gestão de vulnerabilidades por SCA deve ser questionado sobre a cobertura da profundidade transitiva. SCA para dependências diretas é um ponto de partida. A varredura transitiva completa é o quadro completo. O Log4Shell é o caso de teste clássico para saber se essa distinção foi operacionalizada.
Como comprovar
- Registros das varreduras de SCA transitivas completas
- SBOM transitivo completo
- Implementação do monitoramento de vulnerabilidades transitivas
- Processo de avaliação de alcançabilidade
Principal conclusão
Dependências diretas: zero vulnerabilidades críticas. Profundidade transitiva quatro: vulnerabilidade crítica na cadeia de dependências de um framework de logging. Escopo do SCA: dependências diretas. Profundidade quatro: fora do escopo. O Log4Shell atingiu milhões de aplicativos por meio de dependências transitivas que suas equipes não haviam declarado diretamente. A varredura transitiva completa encontra o que a varredura apenas das dependências diretas deixa passar. SBOMs transitivos completos inventariam o que a varredura completa encontrou. A avaliação de alcançabilidade prioriza o que o inventário identificou. A pergunta “seu SCA cobre toda a sua árvore transitiva?” é o caso de teste para saber se a cobertura do programa corresponde ao modelo de ameaças.