DevSecOps

21 mar, 2017

Validando componentes vulneráveis com Maven

Publicidade

Tivemos a Semana da Segurança na Concrete, e para continuar debatendo o tema, hoje vou mostrar como configurar um projeto Maven para validarmos o uso de bibliotecas e frameworks vulneráveis, usando o OWASP Dependency Check.

Um pouco sobre o projeto OWASP Dependency Check

Dependency Check é uma solução open-source que leva em conta o OWASP Top 10 A-9 “Uso de Componentes com Vulnerabilidades Conhecidas”. Atualmente, a solução pode ser usada para escanear aplicações Java e .NET em busca de componentes vulneráveis conhecidos. Em fase experimental, devido às taxas de falsos positivos e falsos negativos, também pode ser usada para aplicações Python, Ruby, PHP (Composer) e Node.js.

O Dependency check pode ser utilizado como:

  • Interface de linha de comando;
  • Um plugin Maven;
  • Uma tarefa Ant;
  • Um plugin Gradle;
  • Um plugin Jenkins;
  • Um plugin SonarQube.

O motor central contém uma série de analisadores que inspecionam as dependências do projeto e coletam informações sobre elas. Essas evidências são usadas para identificar um Common Platform Enumeration (CPE). Se um CPE for identificado, uma listagem de entradas associadas de Common Vulnerability and Exposure (CVE) será apontada em um relatório.

Essa lista se atualiza automaticamente usando o National Vulnerability Database NVD Data Feeds, hospedado pelo NIST.

O problema de usar componentes vulneráveis conhecidos

Boa parte do código nas aplicações provêm de bibliotecas e frameworks, mas o risco de vulnerabilidades destes componentes é ignorada. Uma biblioteca vulnerável pode permitir que um invasor explore plenamente os privilégios da aplicação, incluindo acesso a dados, execução de transações, roubo de arquivos e comunicação com a Internet.

Com o aumento do uso de software livre, organizações tomaram conhecimento do importante problema que é o uso de componentes vulneráveis:

  • A OWASP adicionou o A9 “Uso de Componentes com Vulnerabilidades Conhecidas” ao Top 10;
  • O PCI 3.0 agora requer o uso de componentes seguros;
  • O FS-ISAC emitiu um novo padrão para o uso de componentes de fonte aberta;
  • MITRE CWE-937 foi adicionado para se concentrar em componentes com vulnerabilidades conhecidas.

Mãos à obra!

Para validar o uso de bibliotecas e frameworks vulneráveis, faça download deste projeto vulnerável que usei como exemplo neste site e abra o pom.xml no seu editor de texto favorito.

Adicione o seguinte trecho ao pom.xml:

<build>
  <plugins>
    <!-- OWASP Dependency Check Analysis -->
    <plugin>
        <groupId>org.owasp</groupId>
        <artifactId>dependency-check-maven</artifactId>
        <version>1.4.5</version>
        <executions>
            <execution>
                <goals>
                    <goal>check</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
  </plugins>
</build>

Agora, execute com o seguinte comando:

mvn clean install

Na primeira execução, ele pode demorar um pouco, pois estará realizando o processamento e download dos dados da NVD.

[INFO] Checking for updates
[INFO] NVD CVE requires several updates; this could take a couple of minutes.
[INFO] Download Started for NVD CVE - 2002
[INFO] Download Started for NVD CVE - 2003
[INFO] Download Started for NVD CVE - 2004
[INFO] Download Complete for NVD CVE - 2003  (16506 ms)
[INFO] Download Started for NVD CVE - 2005
[INFO] Processing Started for NVD CVE - 2003
[INFO] Processing Complete for NVD CVE - 2003  (13580 ms)
[INFO] Download Complete for NVD CVE - 2004  (30204 ms)
[INFO] Processing Started for NVD CVE - 2004
[INFO] Download Started for NVD CVE - 2006
[INFO] Download Complete for NVD CVE - 2002  (39465 ms)
[INFO] Download Started for NVD CVE - 2007
[INFO] Download Complete for NVD CVE - 2005  (25063 ms)
[INFO] Download Started for NVD CVE - 2008
[INFO] Processing Complete for NVD CVE - 2004  (11497 ms)
[INFO] Processing Started for NVD CVE - 2002
[INFO] Processing Complete for NVD CVE - 2002  (13977 ms)
[INFO] Processing Started for NVD CVE - 2005
[INFO] Processing Complete for NVD CVE - 2005  (22625 ms)
[INFO] Download Complete for NVD CVE - 2007  (41339 ms)
[INFO] Download Started for NVD CVE - 2009
[INFO] Processing Started for NVD CVE - 2007
[INFO] Download Complete for NVD CVE - 2006  (57627 ms)
[INFO] Download Started for NVD CVE - 2010
[INFO] Download Complete for NVD CVE - 2008  (55602 ms)
[INFO] Download Started for NVD CVE - 2011
[INFO] Processing Complete for NVD CVE - 2007  (28406 ms)
[INFO] Processing Started for NVD CVE - 2006
[INFO] Processing Complete for NVD CVE - 2006  (13150 ms)
[INFO] Processing Started for NVD CVE - 2008
[INFO] Download Complete for NVD CVE - 2009  (64805 ms)
[INFO] Download Started for NVD CVE - 2012
[INFO] Processing Complete for NVD CVE - 2008  (30069 ms)
[INFO] Processing Started for NVD CVE - 2009
[INFO] Download Complete for NVD CVE - 2010  (65074 ms)
[INFO] Download Started for NVD CVE - 2013
[INFO] Processing Complete for NVD CVE - 2009  (30913 ms)
[INFO] Processing Started for NVD CVE - 2010
[INFO] Download Complete for NVD CVE - 2012  (68335 ms)
[INFO] Download Started for NVD CVE - 2014
[INFO] Download Complete for NVD CVE - 2013  (75503 ms)
[INFO] Download Started for NVD CVE - 2015
[INFO] Download Complete for NVD CVE - 2011  (140959 ms)
[INFO] Download Started for NVD CVE - 2016
[INFO] Processing Complete for NVD CVE - 2010  (82193 ms)
[INFO] Processing Started for NVD CVE - 2012
[INFO] Download Complete for NVD CVE - 2015  (44865 ms)
[INFO] Download Started for NVD CVE - 2017
[INFO] Download Complete for NVD CVE - 2017  (2920 ms)
[INFO] Download Started for NVD CVE - Modified
[INFO] Download Complete for NVD CVE - 2014  (64749 ms)
[INFO] Download Complete for NVD CVE - Modified  (8609 ms)
[INFO] Download Complete for NVD CVE - 2016  (67174 ms)
[INFO] Processing Complete for NVD CVE - 2012  (92919 ms)
[INFO] Processing Started for NVD CVE - 2013
[INFO] Processing Complete for NVD CVE - 2013  (79125 ms)
[INFO] Processing Started for NVD CVE - 2011

Espere o término do download e processamento dos dados para que o dependency check verifique as bibliotecas e frameworks.

[INFO] Analysis Started
[INFO] Finished Archive Analyzer (0 seconds)
[INFO] Finished File Name Analyzer (0 seconds)
[INFO] Finished Jar Analyzer (0 seconds)
[INFO] Finished Central Analyzer (2 seconds)
[INFO] Finished Dependency Merging Analyzer (0 seconds)
[INFO] Finished Version Filter Analyzer (0 seconds)
[INFO] Finished Hint Analyzer (0 seconds)
[INFO] Created CPE Index (1 seconds)
[INFO] Finished CPE Analyzer (2 seconds)
[INFO] Finished False Positive Analyzer (0 seconds)
[INFO] Finished Cpe Suppression Analyzer (0 seconds)
[INFO] Finished NVD CVE Analyzer (2 seconds)
[INFO] Finished Vulnerability Suppression Analyzer (0 seconds)
[INFO] Finished Dependency Bundling Analyzer (0 seconds)
[INFO] Analysis Complete (8 seconds)
[WARNING] 

One or more dependencies were identified with known vulnerabilities in JavaVulnerableLab Maven Webapp:

commons-collections-3.2.1.jar (commons-collections:commons-collections:3.2.1, cpe:/a:apache:commons_collections:3.2.1) : CVE-2015-6420
mysql-connector-java-5.1.26.jar (cpe:/a:mysql:mysql:5.1.26, mysql:mysql-connector-java:5.1.26) : CVE-2015-2575, CVE-2014-0437, CVE-2014-0412, CVE-2014-0402, CVE-2014-0401, CVE-2014-0393, CVE-2014-0386, CVE-2014-0001, CVE-2013-5908, CVE-2013-3808, CVE-2013-3804, CVE-2013-3802, CVE-2013-2392, CVE-2013-2391, CVE-2013-2389, CVE-2013-2378, CVE-2013-1555, CVE-2013-1552, CVE-2013-1548, CVE-2013-1521, CVE-2013-1506, CVE-2013-1492, CVE-2013-0389, CVE-2013-0385, CVE-2013-0384, CVE-2013-0383, CVE-2013-0375, CVE-2012-5627, CVE-2012-5060, CVE-2012-3197, CVE-2012-3180, CVE-2012-3177, CVE-2012-3173, CVE-2012-3167, CVE-2012-3166, CVE-2012-3163, CVE-2012-3160, CVE-2012-3158, CVE-2012-3150, CVE-2012-2749, CVE-2012-2102, CVE-2012-1734, CVE-2012-1705, CVE-2012-1703, CVE-2012-1702, CVE-2012-1697, CVE-2012-1696, CVE-2012-1690, CVE-2012-1689, CVE-2012-1688, CVE-2012-0882, CVE-2012-0583, CVE-2012-0574, CVE-2012-0572, CVE-2012-0553, CVE-2012-0540, CVE-2012-0492, CVE-2012-0490, CVE-2012-0485, CVE-2012-0484, CVE-2012-0120, CVE-2012-0119, CVE-2012-0118, CVE-2012-0116, CVE-2012-0115, CVE-2012-0114, CVE-2012-0113, CVE-2012-0112, CVE-2012-0102, CVE-2012-0101, CVE-2012-0087, CVE-2012-0075, CVE-2011-2262, CVE-2010-3840, CVE-2010-3839, CVE-2010-3838, CVE-2010-3837, CVE-2010-3836, CVE-2010-3835, CVE-2010-3834, CVE-2010-3833, CVE-2010-3683, CVE-2010-3682, CVE-2010-3681, CVE-2010-3680, CVE-2010-3679, CVE-2010-3678, CVE-2010-3677, CVE-2010-3676, CVE-2010-2008, CVE-2010-1626, CVE-2010-1621, CVE-2009-5026, CVE-2009-4028, CVE-2009-0819, CVE-2008-4098, CVE-2008-0226


See the dependency-check report for more details.

Ao encontrar alguma biblioteca ou framework com vulnerabilidade conhecida, faça a atualização para que a aplicação fique mais segura. Por hoje é isso! Espero que tenha ajudado todos a manter o desenvolvimento de software mais seguro. Se você tiver alguma dúvida ou contribuição, aproveite os campos abaixo.

Até a próxima!

***

Este artigo foi originalmente publicado no Medium pessoal do autor. Confira aqui.

***

Artigo publicado em: http://www.concretesolutions.com.br/2017/03/15/componentes-vulneraveis-maven/