L'importance de l'analyse des composants tiers logiciels (en anglais Software Composition Analysis â SCA) dans le processus de dĂ©veloppement augmente Ă mesure que les rapports annuels sur les vulnĂ©rabilitĂ©s des bibliothĂšques open source, publiĂ©s par des entreprises comme Synopsys, Sonatype, Snyk et White Source, voient le jour. Selon le rapport , le nombre de vulnĂ©rabilitĂ©s identifiĂ©es dans l'open source en 2019 a presque doublĂ© par rapport Ă l'annĂ©e prĂ©cĂ©dente, alors que les composants open source sont utilisĂ©s dans 60 Ă 80 % des projets. En se basant sur un avis indĂ©pendant, les processus SCA sont considĂ©rĂ©s comme une pratique distincte dans l'OWASP SAMM et le BSIMM comme indicateur de maturitĂ©, et au premier semestre 2020, l'OWASP a publiĂ© une nouvelle norme, la OWASP Software Component Verification Standard (SCVS), fournissant des meilleures pratiques pour la vĂ©rification des composants tiers dans la chaĂźne d'approvisionnement logicielle.

Un des cas les plus révélateurs avec l'entreprise Equifax en mai 2017. Des cybercriminels inconnus ont accédé aux informations de 143 millions d'Américains, y compris des noms complets, des adresses, des numéros de sécurité sociale et de permis de conduire. Dans 209 000 cas, les documents contenaient également des informations sur les cartes bancaires des victimes. Cette fuite a eu lieu à la suite de l'exploitation d'une vulnérabilité critique dans Apache Struts 2 (CVE-2017-5638), alors qu'un correctif avait été publié en mars 2017. L'entreprise avait deux mois pour appliquer la mise à jour, mais cela n'a pas été fait.
Cet article discutera de la question du choix d'un outil pour la réalisation de SCA en termes de qualité des résultats de l'analyse. Une comparaison fonctionnelle des outils sera également présentée. Le processus d'intégration dans CI/CD et les possibilités d'intégration seront abordés dans de prochaines publications. Une large liste d'outils a été présentée par l'OWASP , mais dans le cadre de cette revue, nous aborderons uniquement l'outil open source le plus populaire, Dependency Check, la plateforme open source moins connue Dependency Track et la solution d'entreprise Sonatype Nexus IQ. Nous examinerons également le fonctionnement de ces solutions et comparerons les résultats obtenus en termes de faux positifs.

Principe de fonctionnement
â c'est un utilitaire (CLI, maven, module jenkins, ant) qui analyse les fichiers du projet, collecte des fragments d'informations sur les dĂ©pendances (nom du package, groupid, titre de la spĂ©cification, versionâŠ), construit une chaĂźne CPE â (Common Platform Enumeration), Package URL (PURL) et identifie les vulnĂ©rabilitĂ©s pour CPE/PURL Ă partir des bases de donnĂ©es (NVD, Sonatype OSS Index, API NPM AuditâŠ), puis gĂ©nĂšre un rapport unique au format HTML, JSON, XMLâŠ
Voyons Ă quoi ressemble un CPE :
cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other- Partie : Indication que le composant se rapporte Ă une application (a), un systĂšme d'exploitation (o), du matĂ©riel (h) (ĂlĂ©ment obligatoire)
- Fournisseur : Nom du fabricant du produit (ĂlĂ©ment obligatoire)
- Produit : Nom du produit (ĂlĂ©ment obligatoire)
- Version : Version du composant (ĂlĂ©ment obsolĂšte)
- Mise Ă jour : Mise Ă jour du package
- Ădition : Version hĂ©ritĂ©e (ĂlĂ©ment obsolĂšte)
- Langue : Langue définie dans RFC-5646
- Ădition SW : Version du logiciel
- SW cible : Environnement logiciel dans lequel le produit fonctionne
- HW cible : Environnement matériel dans lequel le produit fonctionne
- Autre : Informations sur le fournisseur ou le produit
Un exemple de CPE est le suivant :
cpe:2.3:a:pivotal_software:spring_framework:3.0.0:*:*:*:*:*:*:* Cette chaĂźne signifie que le CPE version 2.3 dĂ©crit un composant d'application du fabricant pivotal_software nommĂ© spring_framework version 3.0.0. Si nous ouvrons la vulnĂ©rabilitĂ© dans le NVD, nous pouvons voir cette rĂ©fĂ©rence CPE. Le premier problĂšme sur lequel il faut immĂ©diatement se concentrer â le CVE dans le NVD, selon le CPE, indique un problĂšme dans le framework et non dans un composant spĂ©cifique. Autrement dit, si les dĂ©veloppeurs sont fortement attachĂ©s au framework, et la vulnĂ©rabilitĂ© identifiĂ©e ne concerne pas les modules utilisĂ©s par les dĂ©veloppeurs, l'expert en sĂ©curitĂ© devra de toute façon examiner ce CVE et envisager une mise Ă jour.
L'URL est également utilisée par les outils SCA. Le format d'URL du package est le suivant :
scheme:type/namespace/name@version?qualifiers#subpath- SchĂšme : Sera toujours âpkgâ, indiquant qu'il s'agit d'une URL de package (ĂlĂ©ment obligatoire)
- Type : Le « type » du package ou le « protocole » du package, par exemple maven, npm, nuget, gem, pypi, etc. (ĂlĂ©ment obligatoire)
- Namespace : Un certain préfixe de nom, tel que l'identifiant de groupe Maven, le propriétaire de l'image Docker, l'utilisateur ou l'organisation GitHub. Non obligatoire et dépend du type.
- Nom : Nom du package (ĂlĂ©ment obligatoire)
- Version : Version du package
- Qualificateurs : Informations supplémentaires sur les qualifications pour le package, telles que le systÚme d'exploitation, l'architecture, la distribution, etc. Optionnel et dépendant du type d'élément.
- Sous-chemin : Chemin supplémentaire dans le package par rapport à la racine du package
Par exemple :
pkg:golang/google.golang.org/genproto#googleapis/api/annotations
pkg:maven/org.apache.commons/io@1.3.4
pkg:pypi/django-package@1.11.1.dev1â plateforme web sur site qui accepte les listes de matĂ©riaux (BOM) prĂȘtes gĂ©nĂ©rĂ©es et , c'est-Ă -dire des spĂ©cifications prĂȘtes concernant les dĂ©pendances existantes. Il s'agit d'un fichier XML dĂ©crivant les dĂ©pendances : nom, hachages, URL du package, Ă©diteur, licence. Ensuite, Dependency Track analyse le BOM, examine les dĂ©pendances pour identifier les CVE de la base de donnĂ©es des vulnĂ©rabilitĂ©s (NVD, Sonatype OSS IndexâŠ), puis construit des graphiques, calcule des mĂ©triques, mettant Ă jour rĂ©guliĂšrement les donnĂ©es sur l'Ă©tat des vulnĂ©rabilitĂ©s des composants.
Exemple de ce Ă quoi pourrait ressembler un BOM au format XML :
Apache
org.apache.tomcat
tomcat-catalina
9.0.14
3942447fac867ae5cdb3229b658f4d48
e6b1000b94e835ffd37f4c6dcbdad43f4b48a02a
f498a8ff2dd007e29c2074f5e4b01a9a01775c3ff3aeaf6906ea503bc5791b7b
e8f33e424f3f4ed6db76a482fde1a5298970e442c531729119e37991884bdffab4f9426b7ee11fccd074eeda0634d71697d6f88a460dce0ac8d627a29f7d1282
Apache-2.0
pkg:maven/org.apache.tomcat/tomcat-catalina@9.0.14
Le BOM peut ĂȘtre utilisĂ© non seulement comme paramĂštres d'entrĂ©e pour Dependency Track, mais aussi pour l'inventaire des composants logiciels dans la chaĂźne d'approvisionnement, par exemple, pour fournir au client du logiciel. En 2014, un projet de loi a mĂȘme Ă©tĂ© proposĂ© aux Ătats-Unis , qui stipulait que lors de l'achat de logiciels, toute institution gouvernementale devait demander un BOM pour Ă©viter l'utilisation de composants vulnĂ©rables, mais ce projet de loi n'a jamais Ă©tĂ© adoptĂ©.
Revenant Ă SCA, Dependency Track a des intĂ©grations prĂȘtes avec des plateformes de notification comme Slack, des systĂšmes de gestion des vulnĂ©rabilitĂ©s comme Kenna Security. Notons Ă©galement que Dependency Track identifie les versions obsolĂštes des packages et fournit des informations sur les licences (grĂące au support de SPDX).
Lorsqu'il s'agit précisément de la qualité SCA, il y a une différence fondamentale.
Dependency Track n'accepte pas le projet comme entrĂ©e, mais prend en charge le BOM. Cela signifie que si nous voulons vĂ©rifier le projet, nous devons d'abord gĂ©nĂ©rer le bom.xml, par exemple, avec CycloneDX. Ainsi, Dependency Track dĂ©pend directement de CycloneDX. En mĂȘme temps, cela permet une personnalisation. Ainsi, l'Ă©quipe d'OZON a Ă©crit pour gĂ©nĂ©rer des fichiers BOM pour des projets en Golang dans le but de les scanner ultĂ©rieurement via Dependency Track.
est une solution SCA commerciale de Sonatype, qui fait partie de l'écosystÚme Sonatype, qui comprend également Nexus Repository Manager. Nexus IQ peut accepter en entrée à la fois des archives war (pour des projets Java) via une interface web ou une API, ainsi que des BOM, si votre organisation n'a pas eu le temps de se réadapter de CycloneDX à cette nouvelle solution. Contrairement aux solutions open source, IQ ne se limite pas à interroger le CP/PURL de la composante identifiée et à la vulnérabilité correspondante dans la base de données, mais prend également en compte ses propres recherches, par exemple, le nom de la fonction ou de la classe vulnérable. Les mécanismes d'IQ seront examinés plus tard lors de l'analyse des résultats.
Récapitulons certaines fonctionnalités fonctionnelles et examinons les langages pris en charge pour l'analyse :
Langue
Nexus IQ
Dependency Check
Dependency Track
Java
+
+
+
C/C++
+
+
â
C#
+
+
â
.Net
+
+
+
Erlang
â
â
+
JavaScript (NodeJS)
+
+
+
PHP
+
+
+
Python
+
+
+
Ruby
+
+
+
Perl
â
â
â
Scala
+
+
+
Objective C
+
+
â
Swift
+
+
â
R
+
â
â
Go
+
+
+
Fonctionnalités disponibles
Fonctionnalités disponibles
Nexus IQ
Dependency Check
Dependency Track
Capacité à assurer la vérification des composants utilisés dans le code source pour leur conformité aux licences
+
â
+
Capacité à scanner et analyser les images Docker pour détecter les vulnérabilités et la conformité aux licences
+ Intégration avec Clair
â
â
Capacité à configurer une politique de sécurité pour l'utilisation de bibliothÚques open source
+
â
â
Capacité à scanner les dépÎts open source pour détecter les composants vulnérables
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS
â
+ Hex, RubyGems, Maven, NPM, Nuget, Pypi
Présence d'un groupe de recherche spécialisé
+
â
â
Travail dans un environnement fermé
+
+
+
Utilisation de bases de données tierces
+ Base de données fermée Sonatype
+ Sonatype OSS, NPM Public Advisors
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, support de la base de données de vulnérabilités interne
Capacité à filtrer les composants open source lors de la tentative de chargement dans l'environnement de développement selon les politiques configurées
+
â
â
Recommandations pour corriger les vulnérabilités, disponibilité de liens vers les correctifs
+
+- (dépend de la description dans les bases de données publiques)
+- (dépend de la description dans les bases de données publiques)
Classement des vulnérabilités détectées par degré de criticité
+
+
+
ModĂšle de rĂŽle d'accĂšs
+
â
+
Support de l'interface en ligne de commande (CLI)
+
+
+- (uniquement pour CycloneDX)
Filtrage / tri des vulnérabilités selon des critÚres définis
+
â
+
Dashboard sur l'état des applications
+
â
+
Génération de rapports au format PDF
+
â
â
Génération de rapports au format JSONCSV
+
+
â
Support de la langue russe
â
â
â
Capacités d'intégration
Intégration
Nexus IQ
Dependency Check
Dependency Track
Intégration avec LDAP/Active Directory
+
â
+
Intégration avec le systÚme d'intégration continue (continous integration) Bamboo
+
â
â
Intégration avec le systÚme d'intégration continue (continous integration) TeamCity
+
â
â
Intégration avec le systÚme d'intégration continue (continous integration) GitLab
+
+- (sous forme de plugin pour GitLab)
+
Intégration avec le systÚme d'intégration continue (continous integration) Jenkins
+
+
+
Disponibilité de plugins pour IDE
+ IntelliJ, Eclipse, Visual Studio
â
â
Support d'intégration personnalisée via des services web (API) de l'outil
+
â
+
Dependency Check
Premier lancement
Lançons une vérification des dépendances sur une application intentionnellement vulnérable .
Pour cela, utilisons :
mvn org.owasp:dependency-check-maven:checkEn conséquence, un fichier dependency-check-report.html apparaßtra dans le répertoire target.

Ouvrons le fichier. AprÚs un aperçu des vulnérabilités, nous pouvons voir des informations sur les vulnérabilités avec un niveau élevé de gravité et de confiance, indiquant le paquet, CPE, et le nombre de CVE.
Ensuite, nous obtenons des informations plus détaillées, notamment la base sur laquelle la décision a été prise (preuve), c'est-à -dire un certain BOM.

Nous avons ensuite le CPE, le PURL et la description CVE. Les recommandations de correction ne sont d'ailleurs pas fournies en raison de leur absence dans la base NVD.

Pour un examen systématique des résultats du scan, vous pouvez configurer Nginx avec des réglages minimaux, ou envoyer les défauts obtenus vers un systÚme de gestion des défauts qui prend en charge les connecteurs avec Dependency Check. Par exemple, Defect Dojo.
Dependency Track
Installation
Dependency Track, quant à lui, est une plateforme web avec des graphiques affichants, donc la question aiguë de stockage des défauts dans une solution tierce ne se pose pas ici.
Pour l'installation, les scénarios supportés sont les suivants : Docker, WAR, Exécutable WAR.
Premier lancement
AccĂ©dez Ă l'URL du service en cours d'exĂ©cution. Connectez-vous avec admin/admin, changez le nom d'utilisateur et le mot de passe, aprĂšs quoi vous accĂ©dez au Dashboard. La prochaine chose que nous allons faire est de crĂ©er un projet pour une application Java de test dans Home/Projects â CrĂ©er un projet . Prenons DVJA comme exemple.

Puisque Dependency Track peut n'accepter que des BOM en entrée, il est nécessaire d'obtenir ce BOM. Utilisons :
mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBomNous obtenons bom.xml et tĂ©lĂ©chargeons le fichier dans le projet créé DVJA â DĂ©pendances â TĂ©lĂ©charger BOM.
AccĂ©dons Ă Administration â Analyseurs. Nous constatons que seul l'Analyseur Interne, qui inclut le NVD, est activĂ©. Connectons Ă©galement Sonatype OSS Index.

Ainsi, nous obtenons l'image suivante pour notre projet :

On peut également trouver une vulnérabilité applicable à Sonatype OSS dans la liste :

La principale déception était que Dependency Track n'accepte plus les rapports xml de Dependency Check. Les derniÚres versions prises en charge pour l'intégration avec Dependency Check étaient 1.0.0 - 4.0.2, tandis que je testais la version 5.3.2.
Voici (et ), quand cela était encore possible.
Nexus IQ
Premier lancement
L'installation de Nexus IQ se fait à partir d'archives via , mais pour ces objectifs, nous avons créé une image Docker.
AprĂšs s'ĂȘtre connectĂ© Ă la console, il est nĂ©cessaire de crĂ©er une Organisation et une Application.



Comme on peut le voir, la configuration dans le cas d'IQ est un peu plus complexe, car nous devons également créer des politiques applicables à différentes "étapes" (dev, build, stage, release). Cela est nécessaire pour bloquer les composants vulnérables au fur et à mesure qu'ils avancent dans le pipeline vers la production, ou les bloquer dÚs qu'ils entrent dans le Nexus Repo lors du téléchargement par les développeurs.
Pour ressentir la diffĂ©rence entre open source et entreprise, faisons une analyse identique via Nexus IQ de la mĂȘme maniĂšre que , aprĂšs avoir d'abord créé une application de test dans l'interface NexusIQ dvja-test-and-compare:
mvn com.sonatype.clm:clm-maven-plugin:evaluate -Dclm.applicationId=dvja-test-and-compare -Dclm.serverUrl= -Dclm.username= -Dclm.password=
Accédez à l'URL du rapport généré dans l'interface web d'IQ :

Vous pouvez voir ici toutes les violations de politique avec des niveaux de gravité différents (de Info à Critique de Sécurité). La lettre D à cÎté d'un composant indique que le composant est une Dépendance Directe, tandis que la lettre T indique qu'il s'agit d'une Dépendance Transitive.
Au fait, le rapport de Snyk rapporte que plus de 70 % des vulnérabilités open source détectées dans Node.js, Java et Ruby se trouvent dans les dépendances transitives.
Si nous ouvrons l'une des violations de la politique Nexus IQ, nous pouvons voir la description du composant, ainsi que le Graphique de Versions qui montre la position de la version actuelle sur la chronologie, ainsi que le moment oĂč la vulnĂ©rabilitĂ© cesse d'ĂȘtre critiquable. La hauteur des bougies sur le graphique indique la popularitĂ© d'utilisation de ce composant.

Si nous allons dans la section des vulnérabilités et développons le CVE, nous pouvons lire la description de cette vulnérabilité, les recommandations pour la corriger, ainsi que la raison pour laquelle ce composant a été signalé pour violation, c'est-à -dire la présence de la classe DiskFileitem.class.


Faisons le point uniquement sur les composants Java tiers, en excluant les composants js. Nous indiquerons entre parenthÚses le nombre de vulnérabilités trouvées en dehors du NVD.
Total Nexus IQ :
- Dépendances analysées : 62
- Dépendances vulnérables : 16
- Vulnérabilités trouvées : 42 (8 base de données sonatype)
Total Vérification des Dépendances :
- Dépendances analysées : 47
- Dépendances vulnérables : 13
- Vulnérabilités trouvées : 91 (14 sonatype oss)
Total Suivi des Dépendances :
- Dépendances analysées : 59
- Dépendances vulnérables : 10
- Vulnérabilités trouvées : 51 (1 sonatype oss)
La prochaine étape consistera à analyser les résultats obtenus et à déterminer lesquelles de ces vulnérabilités représentent un véritable défaut et lesquelles sont de faux positifs.
Avertissement
Cette revue n'est pas une vérité incontestable. L'objectif de l'auteur n'était pas de mettre en avant un outil par rapport aux autres. Le sens de cette revue était de montrer les mécanismes de fonctionnement des outils SCA et les moyens de vérifier leurs résultats.
Comparaison des résultats
Conditions :
Un faux positif par rapport aux vulnérabilités des composants tiers est :
- Non-conformité du CVE au composant identifié
- Par exemple, si une vulnérabilité est trouvée dans le framework struts2, mais que l'outil pointe vers le composant du framework struts-tiles, qui n'est pas concerné par cette vulnérabilité, alors c'est un faux positif.
- Non-conformité du CVE à la version du composant identifiée
- Par exemple, si la vulnĂ©rabilitĂ© est liĂ©e Ă la version python > 3.5 et que l'outil signale la version 2.7 comme vulnĂ©rable â c'est un faux positif, car en rĂ©alitĂ©, la vulnĂ©rabilitĂ© ne concerne que la branche de produit 3.x.
- Duplication de CVE
- Par exemple, si le SCA a dĂ©signĂ© un CVE permettant de rĂ©aliser un RCE, puis que le SCA indique pour ce mĂȘme composant un CVE applicable aux produits Cisco, vulnĂ©rables Ă ce RCE. Dans ce cas, il s'agira d'un faux positif.
- Par exemple, une CVE a Ă©tĂ© trouvĂ©e dans le composant spring-web, aprĂšs quoi la SCA indique cette mĂȘme CVE dans d'autres composants du framework Spring, tandis que la CVE n'a rien Ă voir avec d'autres composants. Dans ce cas, cela sera un faux positif.
Le projet Open Source DVJA a été choisi comme objet de l'étude. Seuls les composants Java ont été inclus dans l'étude (sans js).
Résultats récapitulatifs
Passons directement aux résultats de la révision manuelle des vulnérabilités identifiées. Le rapport complet pour chaque CVE est disponible en annexe.
Résultats récapitulatifs pour toutes les vulnérabilités :
ParamĂštre
Nexus IQ
Dependency Check
Dependency Track
Vulnérabilités identifiées au total
42
91
51
Vulnérabilités identifiées à tort (faux positifs)
2(4.76%)
62(68,13%)
29(56.86%)
Aucune vulnérabilité pertinente détectée (faux négatifs)
10
20
27
Résultats récapitulatifs par composants :
ParamĂštre
Nexus IQ
Dependency Check
Dependency Track
Total des composants identifiés
62
47
59
Total des composants vulnérables
16
13
10
Composants vulnérables identifiés à tort (faux positifs)
1
5
0
Composants vulnérables identifiés à tort (faux positifs)
0
6
6
Construisons des graphiques visuels pour évaluer le rapport entre faux positifs et faux négatifs par rapport au nombre total de vulnérabilités. Les composants sont marqués horizontalement, tandis que les vulnérabilités identifiées sont marquées verticalement.



Pour comparer, une étude similaire a été réalisée par l'équipe de Sonatype testant un projet comportant 1531 composants à l'aide d'OWASP Dependency Check. Comme nous pouvons le voir, le rapport de bruit par rapport aux déclenchements corrects est comparable à nos résultats.

Source :
Examinons certaines CVE des résultats de notre scan pour comprendre la raison de tels résultats.
En savoir plus
â1
Commençons par certains points intéressants sur Sonatype Nexus IQ.
Nexus IQ signale un problÚme de désérialisation avec la possibilité d'exécuter du RCE dans le Spring Framework à plusieurs reprises. CVE-2016-1000027 dans spring-web:3.0.5 pour la premiÚre fois, et CVE-2011-2894 dans spring-context:3.0.5 et spring-core:3.0.5. Au début, il semble qu'il y ait un doublon de vulnérabilité lié à plusieurs CVE. En effet, si nous consultons la CVE-2016-1000027 et la CVE-2011-2894 dans la base de données NVD, il semble que tout soit évident.
Composant
Vulnérabilité
spring-web:3.0.5
CVE-2016-1000027
spring-context:3.0.5
CVE-2011-2894
spring-core:3.0.5
CVE-2011-2894
Description du NVD :

Description du NVD :

La CVE-2011-2894 est déjà bien connue. Dans le rapport cette CVE a été considérée comme l'une des plus fréquentes. Les descriptions pour la CVE-2016-100027 sont en fait limitées dans le NVD, et elle semble ne s'appliquer qu'au Spring Framework 4.1.4. Regardons donc et cela devient plus ou moins clair. Dans nous comprenons qu'en plus de la vulnérabilité dans RemoteInvocationSerializingExporter dans la CVE-2011-2894, la vulnérabilité est également observée dans HttpInvokerServiceExporter. C'est ce que Nexus IQ nous indique :

Cependant, rien de tel ne figure dans la NVD, ce qui conduit Dependency Check et Dependency Track à obtenir de faux négatifs.
De plus, la description de CVE-2011-2894 montre que la vulnérabilité est effectivement présente dans spring-context:3.0.5 et spring-core:3.0.5. Une confirmation se trouve dans l'article de la personne qui a découvert cette vulnérabilité.
â2
Composant
Vulnérabilité
Résultat
struts2-core:2.3.30
CVE-2016-4003
FAUX
Si nous étudions la vulnérabilité CVE-2016-4003, nous comprendrons qu'elle a été corrigée dans la version 2.3.28, cependant Nexus IQ nous informe à son sujet. La description de la vulnérabilité contient la note :

Cela signifie que la vulnĂ©rabilitĂ© existe uniquement en combinaison avec une version obsolĂšte de JRE, ce dont nous avons Ă©tĂ© avertis. NĂ©anmoins, nous considĂ©rons cela comme un faux positif, mĂȘme si ce n'est pas le plus grave.
â 3
Composant
Vulnérabilité
Résultat
xwork-core:2.3.30
CVE-2017-9804
VRAI
xwork-core:2.3.30
CVE-2017-7672
FAUX
Si nous regardons la description de CVE-2017-9804 et CVE-2017-7672, nous comprendrons que le problĂšme rĂ©side dans la classe URLValidator, et que CVE-2017-9804 dĂ©coule de CVE-2017-7672. La prĂ©sence de la seconde vulnĂ©rabilitĂ© n'apporte aucune valeur ajoutĂ©e si ce n'est que sa sĂ©vĂ©ritĂ© a Ă©tĂ© augmentĂ©e Ă Ă©levĂ©e, donc cela peut ĂȘtre considĂ©rĂ© comme un bruit supplĂ©mentaire.
En général, aucun autre faux positif n'a été trouvé pour Nexus IQ.
â4
Il y a plusieurs points qui distinguent IQ des autres solutions.
Composant
Vulnérabilité
Résultat
spring-web:3.0.5
CVE-2020-5398
VRAI
Le CVE dans la NVD indique qu'il s'applique uniquement aux versions 5.2.x jusqu'Ă 5.2.3, 5.1.x jusqu'Ă 5.1.13, et aux versions 5.0.x jusqu'Ă 5.0.16, cependant, si nous regardons la description du CVE dans Nexus IQ, nous voyons ce qui suit :
Avis de déviation : L'équipe de recherche en sécurité de Sonatype a découvert que cette vulnérabilité a été introduite dans la version 3.0.2.RELEASE et non 5.0.x comme indiqué dans l'avis.
AprÚs cela, il y a un PoC pour cette vulnérabilité, indiquant qu'elle est présente dans la version 3.0.5.
Le faux négatif est envoyé à Dependency Check et Dependency Track.
â5
Examinons le faux positif pour Dependency Check et Dependency Track.
Dependency Check se distingue par le fait qu'il reflĂšte les CVE qui correspondent Ă l'ensemble du framework dans la NVD, dans les composants auxquels ces CVE ne s'appliquent pas. Cela concerne CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, que Dependency Check a « attachĂ© » Ă struts-taglib:1.3.8 et struts-tiles-1.3.8. Ces composants n'ont rien Ă voir avec ce qui est dĂ©crit dans le CVE â traitement des requĂȘtes, validation des pages, etc. Cela est dĂ» au fait que la seule chose en commun entre ces CVE et les composants est le framework, c'est pourquoi Dependency Check a considĂ©rĂ© cela comme une vulnĂ©rabilitĂ©.
La mĂȘme situation se prĂ©sente avec spring-tx:3.0.5, et une situation similaire avec struts-core:1.3.8. Pour struts-core, Dependency Check et Dependency Track ont trouvĂ© de nombreuses vulnĂ©rabilitĂ©s qui s'appliquent en rĂ©alitĂ© Ă struts2-core, qui est en fait un framework distinct. Dans ce cas, Nexus IQ a correctement compris la situation et dans les CVE qu'il a Ă©mis, il a indiquĂ© que struts-core Ă©tait en fin de vie et qu'il fallait passer Ă struts2-core.
Numéro 6
Dans certaines situations, il est injuste d'interpréter une erreur explicite de Dependency Check et Dependency Track. En particulier, CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, qui ont été attribués à spring-core:3.0.5 par Dependency Check et Dependency Track, se rapportent en réalité à spring-web:3.0.5. De plus, certaines de ces CVE ont également été trouvées par Nexus IQ, qui les a correctement associées à un autre composant. Le fait que ces vulnérabilités n'aient pas été détectées dans spring-core ne signifie pas qu'elles n'existent pas dans le framework en général et les outils open source ont justement signalé ces vulnérabilités (ils ont simplement légÚrement manqué leur cible).
Conclusions
Comme nous pouvons le voir, la détermination de la véracité des vulnérabilités identifiées par une révision manuelle ne produit pas de résultats clairs, ce qui entraßne des points de débat. Les résultats montrent que la solution Nexus IQ a le taux de faux positifs le plus bas et la plus grande précision.
Tout d'abord, cela est dû au fait que l'équipe de Sonatype a élargi la description de chaque vulnérabilité CVE du NVD dans ses bases de données, en précisant au niveau de la classe ou de la fonction de la vulnérabilité pour chaque version du composant, aprÚs avoir mené des recherches supplémentaires (par exemple, en testant des vulnérabilités sur des versions plus anciennes des logiciels).
Les vulnĂ©rabilitĂ©s qui ne figurent pas dans le NVD, mais qui sont toutefois prĂ©sentes dans la base Sonatype avec l'Ă©tiquette SONATYPE, ont Ă©galement une influence non nĂ©gligeable sur les rĂ©sultats. Selon le rapport 45% des vulnĂ©rabilitĂ©s open source dĂ©couvertes ne sont pas signalĂ©es dans le NVD. Selon la base de donnĂ©es WhiteSource, seulement 29% de toutes les vulnĂ©rabilitĂ©s open source, enregistrĂ©es en dehors du NVD, finissent par ĂȘtre publiĂ©es, c'est pourquoi il est si important de rechercher les vulnĂ©rabilitĂ©s aussi dans d'autres sources.
En conclusion, Dependency Check génÚre un grand bruit, tout en négligeant certaines parties vulnérables des composants. Dependency Track génÚre moins de bruit et identifie un grand nombre de composants, ce qui ne choque pas visuellement dans l'interface web.
Cependant, la pratique montre que l'open source devrait ĂȘtre le premier pas vers une maturitĂ© DevSecOps. La premiĂšre chose Ă considĂ©rer pour intĂ©grer le SCA dans le dĂ©veloppement est les processus, Ă savoir rĂ©flĂ©chir en collaboration avec la direction et les dĂ©partements concernĂ©s sur la maniĂšre dont les processus idĂ©aux devraient se prĂ©senter dans votre organisation. Il se peut que pour votre organisation, au dĂ©part, Dependency Check ou Dependency Track rĂ©pondent Ă tous les besoins commerciaux, tandis que les solutions Enterprise seraient une suite logique en raison de la complexitĂ© croissante des applications dĂ©veloppĂ©es.
Annexe A. Résultats concernant les composants
Légende :
- High â vulnĂ©rabilitĂ©s de niveau Ă©levĂ© et critique dans le composant
- Medium â vulnĂ©rabilitĂ©s de niveau moyen dans le composant
- TRUE â vulnĂ©rabilitĂ© correctement identifiĂ©e (True positive issue)
- FALSE â faux positif (False positive issue)
Composant
Nexus IQ
Dependency Check
Dependency Track
Résultat
dom4j: 1.6.1
Couverture d'ombre du soleil
Couverture d'ombre du soleil
Couverture d'ombre du soleil
VRAI
log4j-core: 2.3
Couverture d'ombre du soleil
Couverture d'ombre du soleil
Couverture d'ombre du soleil
VRAI
log4j: 1.2.14
Couverture d'ombre du soleil
Couverture d'ombre du soleil
â
VRAI
commons-collections:3.1
Couverture d'ombre du soleil
Couverture d'ombre du soleil
Couverture d'ombre du soleil
VRAI
commons-fileupload:1.3.2
Couverture d'ombre du soleil
Couverture d'ombre du soleil
Couverture d'ombre du soleil
VRAI
commons-beanutils:1.7.0
Couverture d'ombre du soleil
Couverture d'ombre du soleil
Couverture d'ombre du soleil
VRAI
commons-codec:1:10
ĂlevĂ©
â
â
VRAI
mysql-connector-java:5.1.42
Couverture d'ombre du soleil
Couverture d'ombre du soleil
Couverture d'ombre du soleil
VRAI
spring-expression:3.0.5
Couverture d'ombre du soleil
composant non trouvé
VRAI
spring-web:3.0.5
Couverture d'ombre du soleil
composant non trouvé
Couverture d'ombre du soleil
VRAI
spring-context:3.0.5
ĂlevĂ©
composant non trouvé
â
VRAI
spring-core:3.0.5
ĂlevĂ©
Couverture d'ombre du soleil
Couverture d'ombre du soleil
VRAI
struts2-config-browser-plugin:2.3.30
ĂlevĂ©
â
â
VRAI
spring-tx:3.0.5
â
Couverture d'ombre du soleil
â
FAUX
struts-core:1.3.8
Couverture d'ombre du soleil
Couverture d'ombre du soleil
Couverture d'ombre du soleil
VRAI
xwork-core: 2.3.30
Couverture d'ombre du soleil
â
â
VRAI
struts2-core: 2.3.30
Couverture d'ombre du soleil
Couverture d'ombre du soleil
Couverture d'ombre du soleil
VRAI
struts-taglib:1.3.8
â
Couverture d'ombre du soleil
â
FAUX
struts-tiles-1.3.8
â
Couverture d'ombre du soleil
â
FAUX
Annexe B. Résultats concernant les vulnérabilités
Légende :
- High â vulnĂ©rabilitĂ©s de niveau Ă©levĂ© et critique dans le composant
- Medium â vulnĂ©rabilitĂ©s de niveau moyen dans le composant
- TRUE â vulnĂ©rabilitĂ© correctement identifiĂ©e (True positive issue)
- FALSE â faux positif (False positive issue)
Composant
Nexus IQ
Dependency Check
Dependency Track
Sévérité
Résultat
Commentaire
dom4j: 1.6.1
CVE-2018-1000632
CVE-2018-1000632
CVE-2018-1000632
Couverture d'ombre du soleil
VRAI
CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
Couverture d'ombre du soleil
VRAI
log4j-core: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
Couverture d'ombre du soleil
VRAI
CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
Faible
VRAI
log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571
â
Couverture d'ombre du soleil
VRAI
â
CVE-2020-9488
â
Faible
VRAI
SONATYPE-2010-0053
â
â
Couverture d'ombre du soleil
VRAI
commons-collections:3.1
â
CVE-2015-6420
CVE-2015-6420
Couverture d'ombre du soleil
FAUX
Duplique RCE(OSSINDEX)
â
CVE-2017-15708
CVE-2017-15708
Couverture d'ombre du soleil
FAUX
Duplique RCE(OSSINDEX)
SONATYPE-2015-0002
RCE (OSSINDEX)
RCE(OSSINDEX)
Couverture d'ombre du soleil
VRAI
commons-fileupload:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
Couverture d'ombre du soleil
VRAI
SONATYPE-2014-0173
â
â
ĂlevĂ©
VRAI
commons-beanutils:1.7.0
CVE-2014-0114
CVE-2014-0114
CVE-2014-0114
Couverture d'ombre du soleil
VRAI
â
CVE-2019-10086
CVE-2019-10086
Couverture d'ombre du soleil
FAUX
La vulnérabilité est applicable uniquement aux versions 1.9.2+
commons-codec:1:10
SONATYPE-2012-0050
â
â
ĂlevĂ©
VRAI
mysql-connector-java:5.1.42
CVE-2018-3258
CVE-2018-3258
CVE-2018-3258
Couverture d'ombre du soleil
VRAI
CVE-2019-2692
CVE-2019-2692
â
ĂlevĂ©
VRAI
â
CVE-2020-2875
â
ĂlevĂ©
FAUX
La mĂȘme vulnĂ©rabilitĂ© que CVE-2019-2692, mais avec la mention « les attaques peuvent avoir un impact significatif sur d'autres produits »
â
CVE-2017-15945
â
Couverture d'ombre du soleil
FAUX
Non applicable Ă mysql-connector-java
â
CVE-2020-2933
â
Faible
FAUX
Duplique de CVE-2020-2934
CVE-2020-2934
CVE-2020-2934
â
ĂlevĂ©
VRAI
spring-expression:3.0.5
CVE-2018-1270
composant non trouvé
â
Couverture d'ombre du soleil
VRAI
CVE-2018-1257
â
â
ĂlevĂ©
VRAI
spring-web:3.0.5
CVE-2016-1000027
composant non trouvé
â
Couverture d'ombre du soleil
VRAI
CVE-2014-0225
â
CVE-2014-0225
Couverture d'ombre du soleil
VRAI
CVE-2011-2730
â
â
Couverture d'ombre du soleil
VRAI
â
â
CVE-2013-4152
ĂlevĂ©
VRAI
CVE-2018-1272
â
â
Couverture d'ombre du soleil
VRAI
CVE-2020-5398
â
â
Couverture d'ombre du soleil
VRAI
Exemple illustratif en faveur de IQ : « L'équipe de recherche en sécurité de Sonatype a découvert que cette vulnérabilité a été introduite dans la version 3.0.2.RELEASE et non 5.0.x comme indiqué dans l'avis. »
CVE-2013-6429
â
â
ĂlevĂ©
VRAI
CVE-2014-0054
â
CVE-2014-0054
ĂlevĂ©
VRAI
CVE-2013-6430
â
â
ĂlevĂ©
VRAI
spring-context:3.0.5
CVE-2011-2894
composant non trouvé
â
ĂlevĂ©
VRAI
spring-core:3.0.5
â
CVE-2011-2730
CVE-2011-2730
Couverture d'ombre du soleil
VRAI
CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
ĂlevĂ©
VRAI
â
â
CVE-2013-4152
ĂlevĂ©
FAUX
Duplique de cette mĂȘme vulnĂ©rabilitĂ© dans spring-web
â
CVE-2013-4152
â
ĂlevĂ©
FAUX
La vulnérabilité concerne le composant spring-web
â
CVE-2013-6429
CVE-2013-6429
ĂlevĂ©
FAUX
La vulnérabilité concerne le composant spring-web
â
CVE-2013-6430
â
ĂlevĂ©
FAUX
La vulnérabilité concerne le composant spring-web
â
CVE-2013-7315
CVE-2013-7315
ĂlevĂ©
FAUX
SPLIT de CVE-2013-4152. + La vulnérabilité concerne le composant spring-web
â
CVE-2014-0054
CVE-2014-0054
ĂlevĂ©
FAUX
La vulnérabilité concerne le composant spring-web
â
CVE-2014-0225
â
Couverture d'ombre du soleil
FAUX
La vulnérabilité concerne le composant spring-web
â
â
CVE-2014-0225
Couverture d'ombre du soleil
FAUX
Duplique de cette mĂȘme vulnĂ©rabilitĂ© dans spring-web
â
CVE-2014-1904
CVE-2014-1904
ĂlevĂ©
FAUX
La vulnérabilité concerne le composant spring-web-mvc
â
CVE-2014-3625
CVE-2014-3625
ĂlevĂ©
FAUX
La vulnérabilité concerne le composant spring-web-mvc
â
CVE-2016-9878
CVE-2016-9878
Couverture d'ombre du soleil
FAUX
La vulnérabilité concerne le composant spring-web-mvc
â
CVE-2018-1270
CVE-2018-1270
Couverture d'ombre du soleil
FAUX
Pour spring-expression/spring-messages
â
CVE-2018-1271
CVE-2018-1271
ĂlevĂ©
FAUX
La vulnérabilité concerne le composant spring-web-mvc
â
CVE-2018-1272
CVE-2018-1272
Couverture d'ombre du soleil
VRAI
CVE-2014-3578
CVE-2014-3578 (OSSINDEX)
CVE-2014-3578
ĂlevĂ©
VRAI
SONATYPE-2015-0327
â
â
Faible
VRAI
struts2-config-browser-plugin:2.3.30
SONATYPE-2016-0104
â
â
ĂlevĂ©
VRAI
spring-tx:3.0.5
â
CVE-2011-2730
â
Couverture d'ombre du soleil
FAUX
La vulnérabilité ne concerne pas spring-tx
â
CVE-2011-2894
â
Couverture d'ombre du soleil
FAUX
La vulnérabilité ne concerne pas spring-tx
â
CVE-2013-4152
â
ĂlevĂ©
FAUX
La vulnérabilité ne concerne pas spring-tx
â
CVE-2013-6429
â
ĂlevĂ©
FAUX
La vulnérabilité ne concerne pas spring-tx
â
CVE-2013-6430
â
ĂlevĂ©
FAUX
La vulnérabilité ne concerne pas spring-tx
â
CVE-2013-7315
â
ĂlevĂ©
FAUX
La vulnérabilité ne concerne pas spring-tx
â
CVE-2014-0054
â
ĂlevĂ©
FAUX
La vulnérabilité ne concerne pas spring-tx
â
CVE-2014-0225
â
Couverture d'ombre du soleil
FAUX
La vulnérabilité ne concerne pas spring-tx
â
CVE-2014-1904
â
ĂlevĂ©
FAUX
La vulnérabilité ne concerne pas spring-tx
â
CVE-2014-3625
â
ĂlevĂ©
FAUX
La vulnérabilité ne concerne pas spring-tx
â
CVE-2016-9878
â
Couverture d'ombre du soleil
FAUX
La vulnérabilité ne concerne pas spring-tx
â
CVE-2018-1270
â
Couverture d'ombre du soleil
FAUX
La vulnérabilité ne concerne pas spring-tx
â
CVE-2018-1271
â
ĂlevĂ©
FAUX
La vulnérabilité ne concerne pas spring-tx
â
CVE-2018-1272
â
ĂlevĂ©
FAUX
La vulnérabilité ne concerne pas spring-tx
struts-core:1.3.8
â
CVE-2011-5057 (OSSINDEX)
ĂlevĂ©
FASLE
Vulnérabilité à Struts 2
â
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
Couverture d'ombre du soleil
FAUX
Vulnérabilité à Struts 2
â
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
ĂlevĂ©
FAUX
Vulnérabilité à Struts 2
â
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
Couverture d'ombre du soleil
FAUX
Vulnérabilité à Struts 2
CVE-2016-1182
3VE-2016-1182
â
Couverture d'ombre du soleil
VRAI
â
â
CVE-2011-5057
ĂlevĂ©
FAUX
Vulnérabilité à Struts 2
â
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
Couverture d'ombre du soleil
FAUX
Vulnérabilité à Struts 2
â
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
ĂlevĂ©
FAUX
Vulnérabilité à Struts 2
CVE-2015-0899
CVE-2015-0899
â
Couverture d'ombre du soleil
VRAI
â
CVE-2012-0394
CVE-2012-0394
ĂlevĂ©
FAUX
Vulnérabilité à Struts 2
â
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
Couverture d'ombre du soleil
FAUX
Vulnérabilité à Struts 2
â
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
Couverture d'ombre du soleil
FAUX
Vulnérabilité à Struts 2
â
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
Couverture d'ombre du soleil
FASLE
Vulnérabilité à Struts 2
â
CVE-2013-2115
CVE-2013-2115
Couverture d'ombre du soleil
FASLE
Vulnérabilité à Struts 2
â
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
Couverture d'ombre du soleil
FASLE
Vulnérabilité à Struts 2
â
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
Couverture d'ombre du soleil
FASLE
Vulnérabilité à Struts 2
CVE-2014-0114
CVE-2014-0114
â
Couverture d'ombre du soleil
VRAI
â
CVE-2015-2992
CVE-2015-2992
ĂlevĂ©
FAUX
Vulnérabilité à Struts 2
â
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
Couverture d'ombre du soleil
FAUX
Vulnérabilité à Struts 2
CVE-2016-1181
CVE-2016-1181
â
Couverture d'ombre du soleil
VRAI
â
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
Couverture d'ombre du soleil
FAUX
Vulnérabilité à Struts 2
xwork-core:2.3.30
CVE-2017-9804
â
â
Couverture d'ombre du soleil
VRAI
SONATYPE-2017-0173
â
â
Couverture d'ombre du soleil
VRAI
CVE-2017-7672
â
â
Couverture d'ombre du soleil
FAUX
Doublon Ă CVE-2017-9804
SONATYPE-2016-0127
â
â
Couverture d'ombre du soleil
VRAI
struts2-core:2.3.30
â
CVE-2016-6795
CVE-2016-6795
Couverture d'ombre du soleil
VRAI
â
CVE-2017-9787
CVE-2017-9787
Couverture d'ombre du soleil
VRAI
â
CVE-2017-9791
CVE-2017-9791
Couverture d'ombre du soleil
VRAI
â
CVE-2017-9793
â
Couverture d'ombre du soleil
FAUX
Doublon Ă CVE-2018-1327
â
CVE-2017-9804
â
Couverture d'ombre du soleil
VRAI
â
CVE-2017-9805
CVE-2017-9805
Couverture d'ombre du soleil
VRAI
CVE-2016-4003
â
â
ĂlevĂ©
FAUX
Applicable à Apache Struts 2.x jusqu'à 2.3.28, alors que la version est 2.3.30. Cependant, d'aprÚs la description, le CVE s'applique à toutes les versions de Struts 2, si JRE 1.7 ou moins est utilisé. Il semble qu'on ait voulu s'assurer ici, mais cela ressemble plus à un FAUX.
â
CVE-2018-1327
CVE-2018-1327
Couverture d'ombre du soleil
VRAI
CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
Couverture d'ombre du soleil
VRAI
C'est la vulnérabilité exploitée par des attaquants chez Equifax en 2017
CVE-2017-12611
CVE-2017-12611
â
Couverture d'ombre du soleil
VRAI
CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
Couverture d'ombre du soleil
VRAI
struts-taglib:1.3.8
â
CVE-2012-0394
â
ĂlevĂ©
FAUX
Pour struts2-core
â
CVE-2013-2115
â
Couverture d'ombre du soleil
FAUX
Pour struts2-core
â
CVE-2014-0114
â
Couverture d'ombre du soleil
FAUX
Pour commons-beanutils
â
CVE-2015-0899
â
Couverture d'ombre du soleil
FAUX
Ne s'applique pas Ă taglib
â
CVE-2015-2992
â
ĂlevĂ©
FAUX
S'applique Ă struts2-core
â
CVE-2016-1181
â
Couverture d'ombre du soleil
FAUX
Ne s'applique pas Ă taglib
â
CVE-2016-1182
â
Couverture d'ombre du soleil
FAUX
Ne s'applique pas Ă taglib
struts-tiles-1.3.8
â
CVE-2012-0394
â
ĂlevĂ©
FAUX
Pour struts2-core
â
CVE-2013-2115
â
Couverture d'ombre du soleil
FAUX
Pour struts2-core
â
CVE-2014-0114
â
Couverture d'ombre du soleil
FAUX
Sous commons-beanutils
â
CVE-2015-0899
â
Couverture d'ombre du soleil
FAUX
Ne s'applique pas Ă tiles
â
CVE-2015-2992
â
ĂlevĂ©
FAUX
Pour struts2-core
â
CVE-2016-1181
â
Couverture d'ombre du soleil
FAUX
Ne s'applique pas Ă taglib
â
CVE-2016-1182
â
Couverture d'ombre du soleil
FAUX
Ne s'applique pas Ă taglib
Source : habr.com
