{"id":18319634,"url":"https://github.com/mycloudlab/example-maven-dependency-check-sonar","last_synced_at":"2026-05-04T05:33:35.085Z","repository":{"id":95757990,"uuid":"274946017","full_name":"mycloudlab/example-maven-dependency-check-sonar","owner":"mycloudlab","description":"Exemplo de uso do dependency check com sonar","archived":false,"fork":false,"pushed_at":"2020-10-13T23:04:48.000Z","size":1045,"stargazers_count":3,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-15T08:19:16.291Z","etag":null,"topics":["dependency-check","devops","devsecops","java","security","sonar"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mycloudlab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-06-25T15:05:02.000Z","updated_at":"2020-07-09T09:27:05.000Z","dependencies_parsed_at":"2023-05-21T22:45:11.101Z","dependency_job_id":null,"html_url":"https://github.com/mycloudlab/example-maven-dependency-check-sonar","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mycloudlab%2Fexample-maven-dependency-check-sonar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mycloudlab%2Fexample-maven-dependency-check-sonar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mycloudlab%2Fexample-maven-dependency-check-sonar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mycloudlab%2Fexample-maven-dependency-check-sonar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mycloudlab","download_url":"https://codeload.github.com/mycloudlab/example-maven-dependency-check-sonar/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248054195,"owners_count":21039952,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dependency-check","devops","devsecops","java","security","sonar"],"created_at":"2024-11-05T18:13:49.562Z","updated_at":"2026-05-04T05:33:30.060Z","avatar_url":"https://github.com/mycloudlab.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Exemplo de uso do dependency check com sonar\n\nNeste repositório temos um exemplo de um projeto maven que possui uma dependência vunerável, demonstramos o uso do plugin dependency check da OWASP sendo executado e o report gerado é enviado para o sonar, podendo impedir a continuidade do pipeline via script de verificação do quality gate do sonar. Também abordamos a supressão de falsos positivo.\n\n## Montagem do laboratório \n\n### JVM e Maven\nPara os testes do projeto foi feita a instalação da JVM via SDKMAN com o comando:\n\n```bash\n$ curl -s \"https://get.sdkman.io\" | bash\n$ source \"$HOME/.sdkman/bin/sdkman-init.sh\"\n$ sdk install java 8.0.252.j9-adpt\n$ sdk install maven 3.6.3\n$ mvn --version\nApache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)\nMaven home: /home/csantana/.sdkman/candidates/maven/current\nJava version: 1.8.0_252, vendor: Eclipse OpenJ9, runtime: /home/csantana/.sdkman/candidates/java/8.0.252.j9-adpt/jre\nDefault locale: pt_BR, platform encoding: UTF-8\nOS name: \"linux\", version: \"5.6.14-300.fc32.x86_64\", arch: \"amd64\", family: \"unix\"\n$\n```\n\nCom a instalação do ambiente o projeto foi montado usando o comando:\n\n```bash\n$ mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false\n```\n### Análise do Dependency check OWASP\n\nA analise de vunerabilidade é obtida usando: \n\n```bash\n$ mvn org.owasp:dependency-check-maven:check\n```\n\nNo processo é feito o download da base de CVE reportado para as dependências.\n\n### Sonar\n\nO Sonar no exemplo utiliza uma imagem docker para facilitar o desenvolvimento do projeto, para baixar a imagem do projeto usamos o podman:\n\n```bash\n$ podman pull sonarqube:lts\n```\n\nA execução do sonar é feita usando o comando abaixo:\n\n```bash\npodman run --net=host -it sonarqube:lts\n```\nO sonarqube está disponível no endereço http://localhost:9000/ com o usuário admin e a senha admin.\n\nApós a instalação é necessário instalar o plugin dependency check no maven. A instalação é feita na área administrativa do sonar conforme imagem abaixo:\n\n![Instalação do plugin dependency check no sonar](images/sonar-install-dependency-check.png)\n\nAo gerar um novo projeto para a aplicação no sonar, copie o token da aplicação:\n\n![Novo projeto - token da aplicação](images/my-app-token.png)\n\nEsse token \"1926fa02a332b16c0115d3661874f1900ed3f12c\" será utilizado para enviar a análise para o sonar via maven.\n\n### Análise do dependency check no sonar\n\nAgora para fazer a análise do dependency check e enviar o report para o sonar usamos o comando abaixo: \n\n\n```bash\n$ mvn org.owasp:dependency-check-maven:check \\\n        sonar:sonar \\\n        -Dformat=ALL \\\n        -Dsonar.projectKey=my-app   \\\n        -Dsonar.host.url=http://localhost:9000/   \\\n        -Dsonar.login=1926fa02a332b16c0115d3661874f1900ed3f12c \\\n        -Dsonar.dependencyCheck.htmlReportPath=target/dependency-check-report.html \\\n        -Dsonar.dependencyCheck.jsonReportPath=target/dependency-check-report.json\n```\n\nAo acessar a dashboard do sonar podemos ver que a aplicação executou a análise do sonar e enviou o report do dependency check para o servidor do sonar.\n\n![Novo projeto - resultado do dependency check](images/my-app-result.png)\n\n### Teste de vunerabilidade \n\nPara garantir o funcionamento do plugin e testar o report, vamos adicionar a dependência do tomcat que sabemos que está vunerável:\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.apache.tomcat\u003c/groupId\u003e\n    \u003cartifactId\u003etomcat\u003c/artifactId\u003e\n    \u003cversion\u003e9.0.30\u003c/version\u003e\n    \u003ctype\u003epom\u003c/type\u003e\n\u003c/dependency\u003e\n```\n\nAo executar novamente a análise, usando o comando maven, notamos que o report foi adicionado ao sonar.\n\n![Novo projeto - resultado do dependency check](images/dependency-check-result-fail.png)\n\n\n### Verificando programaticamente o quality gate do sonar \n\nA análise do sonar pode ser verificada usando o script disponível *verify-sonar-quality-gate.sh*, este script é útil para a validação em pipeline:\n\n```bash\n$ ./verify-sonar-quality-gate.sh \u003cTOKEN DO PROJETO\u003e\n```\n\n```bash\n$ ./verify-sonar-quality-gate.sh 1926fa02a332b16c0115d3661874f1900ed3f12c\n\nverificando o quality gate do projeto...\n\nO projeto NÃO ATENDEU ao quality gate. Para maiores detalhes acesse o dashboard do projeto em: http://localhost:9000/dashboard?id=my-app\n\nFALHOU\n```\nNOTA: O script requer que o utilitário `jq` esteja disponível. \n\nInstale o utilitário usando o comando adequado ao seu sistema operacional.\n\n\n### Tratando Falsos positivo\n\nO verificador de dependência detecta o uso de vulnerabilidades conhecidas, procurando correspondências das dependências no projeto Maven com os componentes de software listados nas CVEs. Esse processo é um pouco superficial, porque eles têm esquemas diferentes para identificar o software. O Maven identifica dependências usando GroupId, ArtifactId and Version (GAV) e CVEs identificam software usando Common Platform Enumeration (CPE).\n\nEsse processo então pode gerar falsos positivos. Portanto, independentemente do CPE, é sempre prudente ler a descrição do CVE e tirar nossas próprias conclusões.\n\nPara impedir o reaparecimento de falsos positivos, podemos suprimir os erros reportados. Fazemos isso configurando um arquivo de supressão e informamos no pom.xml usando a opção suppressionFiles no pom.xml, Abaixo vemos o exemplo dessa configuração.\n\n```xml\n\u003cbuild\u003e\n    \u003cplugins\u003e\n      \u003cplugin\u003e\n        \u003cgroupId\u003eorg.owasp\u003c/groupId\u003e\n        \u003cartifactId\u003edependency-check-maven\u003c/artifactId\u003e\n        \u003cconfiguration\u003e\n          \u003csuppressionFiles\u003e${basedir}/suppressed.xml\u003c/suppressionFiles\u003e\n        \u003c/configuration\u003e\n      \u003c/plugin\u003e\n    \u003c/plugins\u003e\n  \u003c/build\u003e\n```\n\nO conteúdo do arquivo suppressed.xml deve ser o seguinte:\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003csuppressions xmlns=\"https://jeremylong.github.io/DependencyCheck/dependency-suppression.1.3.xsd\"\u003e\n\n\u003c/suppressions\u003e\n```\n\nPara informar a supressão de uma dependência devemos adicionar o conteúdo de supressão ao arquivo, o conteúdo para supressão é feito no report clicando no botão suppress conforme imagem abaixo e copiando o conteudo para dentro do arquivo:\n\n![Supressão de erros do dependency check](images/suppress.gif)\n\nCom isso o erro não é mais alertado nos reports do plugin do dependency check.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmycloudlab%2Fexample-maven-dependency-check-sonar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmycloudlab%2Fexample-maven-dependency-check-sonar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmycloudlab%2Fexample-maven-dependency-check-sonar/lists"}