L'un des cas les plus révélateurs s'est produit avec Equifax en mai 2017. Des attaquants inconnus ont saisi des informations sur 143 millions d'Américains, y compris les noms complets, adresses, numéros de sécurité sociale et permis de conduire. Dans 209 000 cas, les documents contenaient également des informations sur les cartes bancaires des victimes. Cette fuite était due à l'exploitation d'une vulnérabilité critique dans Apache Struts 2 (CVE-2017-5638), tandis que le correctif a été publié en mars 2017. La société avait deux mois pour installer la mise à jour, mais personne ne s'en souciait.
Cet article abordera la question du choix d'un outil de conduite de SCA en termes de qualité des résultats d'analyse. Il y aura également une comparaison fonctionnelle des outils. Le processus d'intégration dans CI / CD et les possibilités d'intégration seront laissés pour de futures publications. Une large liste d'outils a été présentée par OWASP sur son site Web , mais dans le cadre de la revue actuelle, nous n'aborderons que l'outil open source le plus populaire Dependency Check, la plate-forme open source Dependency Track un peu moins connue et la solution Sonatype Nexus IQ Enterprise. Nous allons également comprendre comment ces solutions fonctionnent et comparer les résultats obtenus pour les faux positifs.
Principe d'opération
Dependency Check est un utilitaire (CLI, maven, module jenkins, ant) qui analyse les fichiers du projet, collecte des informations sur les dépendances (nom du package, groupid, titre de spécification, version ...), construit une ligne CPE - (Common Platform Enumeration), Package URL (PURL) et détecte les vulnérabilités pour CPE / PURL à partir de bases de données (NVD, Sonatype OSS Index, NPM Audit API ...), puis crée un rapport unique au format HTML, JSON, XML ...
Voyons à quoi ressemble le CPE:
cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other
- Partie: une indication que le composant appartient à l'application (a), au système d'exploitation (o), au matériel (h) (élément obligatoire)
- Fournisseur: Nom du fabricant du produit (obligatoire)
- Produit: nom du produit (élément obligatoire)
- Version: version du composant (article obsolète)
- Mettre à jour: mettre à jour le package
- Édition: ancienne version (obsolète)
- Langue: La langue telle que définie dans la RFC-5646
- SW Edition: version du logiciel
- Logiciel cible: environnement logiciel dans lequel le produit s'exécute
- Target HW: l'environnement matériel dans lequel le produit s'exécute
- Autre: informations sur le fournisseur ou le produit
Un exemple de CPE ressemble à ceci:
cpe:2.3:a:pivotal_software:spring_framework:3.0.0:*:*:*:*:*:*:*
La ligne signifie que CPE version 2.3 décrit un composant de l'application du fabricant
pivotal_software
avec le nom de la spring_framework
version 3.0.0. Si nous ouvrons la vulnérabilité CVE-2014-0225 dans NVD , nous pouvons voir une mention de ce CPE. Le premier problème qui doit être immédiatement remarqué est que le CVE dans NVD, selon le CPE, signale qu'il y a un problème dans le framework, et non dans un composant spécifique. Autrement dit, si les développeurs sont étroitement liés au framework et que la vulnérabilité identifiée ne s'applique pas aux modules que les développeurs utilisent, le spécialiste de la sécurité devra en quelque sorte démonter ce CVE et réfléchir à la mise à jour.
L'URL est également utilisée par les outils SCA. Le format de l'URL du package est le suivant:
scheme:type/namespace/name@version?qualifiers#subpath
- Sheme: Il y aura toujours 'pkg' indiquant qu'il s'agit d'une URL de package (obligatoire)
- Type: Le "type" du package ou le "protocole" du package, tel que maven, npm, nuget, gem, pypi, etc. (Clause obligatoire)
- Espace de noms: un préfixe de nom, tel que l'ID de groupe Maven, le propriétaire de l'image Docker, l'utilisateur ou l'organisation GitHub. Facultatif et dépend du type.
- Nom: nom du package (obligatoire)
- Version: version du package
- Qualificateurs: qualifications supplémentaires pour le package, telles que le système d'exploitation, l'architecture, la distribution, etc. Élément facultatif et spécifique au type.
- 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
Dependency Track est une plate-forme Web sur site qui accepte la nomenclature (BOM) prête à l' emploi générée par CycloneDX et SPDX , c'est-à-dire des spécifications toutes faites sur les dépendances existantes. Il s'agit d'un fichier XML avec une description des dépendances - nom, hachages, URL du package, éditeur, licence. Ensuite, Dependency Track analyse la nomenclature, examine les CVE disponibles pour les dépendances identifiées à partir de la base de données de vulnérabilités (NVD, Sonatype OSS Index ...), puis construit des graphiques, calcule des métriques, met à jour régulièrement les données d'état de vulnérabilité des composants.
Un exemple de ce à quoi une nomenclature pourrait ressembler au format XML:
<?xml version="1.0" encoding="UTF-8"?>
<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79" version="1">
<components>
<component type="library">
<publisher>Apache</publisher>
<group>org.apache.tomcat</group>
<name>tomcat-catalina</name>
<version>9.0.14</version>
<hashes>
<hash alg="MD5">3942447fac867ae5cdb3229b658f4d48</hash>
<hash alg="SHA-1">e6b1000b94e835ffd37f4c6dcbdad43f4b48a02a</hash>
<hash alg="SHA-256">f498a8ff2dd007e29c2074f5e4b01a9a01775c3ff3aeaf6906ea503bc5791b7b</hash>
<hash alg="SHA-512">e8f33e424f3f4ed6db76a482fde1a5298970e442c531729119e37991884bdffab4f9426b7ee11fccd074eeda0634d71697d6f88a460dce0ac8d627a29f7d1282</hash>
</hashes>
<licenses>
<license>
<id>Apache-2.0</id>
</license>
</licenses>
<purl>pkg:maven/org.apache.tomcat/tomcat-catalina@9.0.14</purl>
</component>
<!-- More components here -->
</components>
</bom>
La nomenclature peut être utilisée non seulement comme paramètres d'entrée pour le suivi des dépendances, mais également pour l'inventaire des composants logiciels dans la chaîne d'approvisionnement, par exemple, pour fournir un logiciel au client. En 2014, la Cyber Supply Chain Management and Transparency Act de 2014 a même été proposée pour examen aux États-Unis , qui stipulaient que lors de l'achat de logiciels, n'importe quel État. l'institution doit demander une nomenclature pour empêcher l'exploitation des composants vulnérables, mais la loi n'est jamais entrée en vigueur.
Pour revenir à SCA, Dependency Track propose des intégrations prêtes à l'emploi avec des plates-formes de notification telles que Slack, des systèmes de gestion des vulnérabilités tels que Kenna Security. Il faut également dire que Dependency Track, entre autres, détecte les versions obsolètes des packages et fournit des informations sur les licences (en raison de la prise en charge de SPDX).
Si nous parlons spécifiquement de la qualité de SCA, alors il y a une différence fondamentale.
Le suivi des dépendances n'accepte pas le projet comme entrée, mais plutôt la nomenclature. Cela signifie que si nous voulons vérifier le projet, nous devons d'abord générer bom.xml, par exemple, en utilisant CycloneDX. Ainsi, Dependency Track dépend directement de CycloneDX. En même temps, cela permet une personnalisation. L'équipe OZON a donc écrit le module CycloneDX pour créer des fichiers de nomenclature pour les projets Golang pour une analyse plus approfondie via la piste de dépendance.
Nexus IQEst une solution commerciale SCA de Sonatype, qui fait partie de l'écosystème Sonatype, qui comprend également le Nexus Repository Manager. Nexus IQ peut accepter comme données d'entrée à la fois les archives de guerre (pour les projets java) via l'interface Web ou l'API et la nomenclature, si votre organisation n'a pas réussi à reconstruire de CycloneDX vers une nouvelle solution. Contrairement aux solutions open source, IQ se réfère non seulement au CPE / PURL du composant identifié et à la vulnérabilité correspondante dans la base de données, mais prend également en compte sa propre recherche, par exemple le nom de la fonction ou de la classe vulnérable. Les mécanismes du QI seront discutés plus tard dans l'analyse des résultats.
Résumons certaines des fonctionnalités fonctionnelles et considérons également les langages pris en charge pour l'analyse:
Langue | Nexus IQ | Vérification de la dépendance | Suivi des dépendances |
---|---|---|---|
Java | + | + | + |
C / C ++ | + | + | - |
C # | + | + | - |
.Net | + | + | + |
Erlang | - | - | + |
JavaScript (NodeJS) | + | + | + |
PHP | + | + | + |
Python | + | + | + |
Rubis | + | + | + |
Perl | - | - | - |
Scala | + | + | + |
Objectif c | + | + | - |
Rapide | + | + | - |
R | + | - | - |
Aller | + | + | + |
Fonctionnalité
Fonctionnalité | Nexus IQ | Vérification de la dépendance | Suivi des dépendances |
---|---|---|---|
Capacité à fournir une vérification des composants utilisés dans le code source pour la pureté sous licence | + | - | + |
Possibilité de scanner et d'analyser les vulnérabilités et la pureté des licences pour les images Docker | + Intégration avec Clair | - | - |
Politique de sécurité configurable pour utiliser des bibliothèques open source | + | - | - |
Possibilité d'analyser les référentiels open source pour 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 |
Disponibilité d'un groupe de recherche spécialisé | + | - | - |
Travail en boucle fermée | + | + | + |
Utilisation de bases de données tierces | + Sonatype DB fermé | + Sonatype OSS, NPM Public Advisors | + Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, support de sa propre base de données de vulnérabilités |
Possibilité de filtrer les composants open source lors de la tentative de téléchargement vers une boucle de développement en fonction des politiques configurées | + | - | - |
Recommandations pour corriger les vulnérabilités, disponibilité des liens de correction | + | + - (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 gravité | + | + | + |
Modèle d'accès basé sur les rôles | + | - | + |
Prise en charge de la CLI | + | + | + - (uniquement pour CycloneDX) |
Sélection / tri des vulnérabilités selon des critères définis | + | - | + |
Tableau de bord par état de l'application | + | - | + |
Générer des rapports au format PDF | + | - | - |
Générer des rapports au format JSON \ CSV | + | + | - |
Prise en charge de la langue russe | - | - | - |
Opportunités d'intégration
L'intégration | Nexus IQ | Vérification de la dépendance | Suivi des dépendances |
---|---|---|---|
Intégration avec LDAP / Active Directory | + | - | + |
Intégration avec le système d'intégration continue Bamboo | + | - | - |
Intégration avec le système d'intégration continue TeamCity | + | - | - |
Intégration avec le système d'intégration continue GitLab | + | + - (en tant que plugin pour GitLab) | + |
Intégration avec le système d'intégration continue Jenkins | + | + | + |
Disponibilité des plugins pour l'EDI | + IntelliJ, Eclipse, Visual Studio | - | - |
Prise en charge d'une intégration personnalisée via les web-services (API) de l'outil | + | - | + |
Vérification de la dépendance
Premier départ
Exécutons la vérification de dépendance sur une application DVJA délibérément vulnérable .
Pour ce faire, nous utiliserons le plugin Dependency Check Maven :
mvn org.owasp:dependency-check-maven:check
En conséquence, dependency-check-report.html apparaîtra dans le répertoire cible.
Ouvrons le fichier. Après les informations récapitulatives sur le nombre total de vulnérabilités, nous pouvons voir des informations sur les vulnérabilités avec un niveau élevé de gravité et de confiance, en indiquant le package, le CPE, le numéro CVE.
Viennent ensuite des informations plus détaillées, en particulier sur quoi reposaient les preuves, c'est-à-dire une certaine nomenclature.
Vient ensuite la description CPE, PURL et CVE. À propos, les recommandations de correction ne sont pas jointes en raison de leur absence dans la base de données NVD.
Pour examiner systématiquement les résultats de l'analyse, vous pouvez configurer Nginx avec des paramètres minimaux ou envoyer les défauts résultants à un système de gestion des défauts qui prend en charge les connecteurs de contrôle de dépendance. Par exemple, Defect Dojo.
Suivi des dépendances
Installation
Dependency Track, quant à lui, est une plate-forme Web avec des graphiques d'affichage, il n'y a donc pas de problème aigu de stockage des défauts dans une solution tierce.
Il existe les scripts suivants pris en charge pour l'installation: Docker, WAR, Executable WAR.
Premier départ
Accédez à l'URL du service en cours d'exécution. Nous entrons via admin / admin, modifions le nom d'utilisateur et le mot de passe, puis nous accédons au tableau de bord. La prochaine chose que nous allons faire est de créer un projet pour l'application de test Java dans Accueil / Projets → Créer un projet . Prenons DVJA comme exemple.
Étant donné que le suivi des dépendances ne peut accepter qu'une nomenclature comme entrée, cette nomenclature doit être récupérée. Utilisons le plugin CycloneDX Maven :
mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom
Nous obtenons bom.xml et téléchargeons le fichier dans le projet créé DVJA → Dépendances → Télécharger la nomenclature .
Allons à Administration → Analyseurs. Nous comprenons que nous n'avons que l'analyseur interne activé, y compris NVD. Nous connecterons également Sonatype OSS Index.
Ainsi, nous obtenons l'image suivante pour notre projet:
Vous pouvez également trouver dans la liste une vulnérabilité applicable à Sonatype OSS:
La principale déception était que Dependency Track n'accepte plus les rapports XML de Dependency Check. Les dernières versions prises en charge de l'intégration de Dependency Check étaient 1.0.0 - 4.0.2, tandis que j'ai testé 5.3.2.
Voici une vidéo (et maintenant ) quand c'était encore possible.
Nexus IQ
Premier départ
Le Nexus IQ est installé à partir des archives de la documentation , mais nous avons compilé une image Docker à cet effet.
Après vous être connecté à la console, vous devez créer une organisation et une application.
Comme vous pouvez le voir, la mise en place dans le cas d'IQ est un peu plus compliquée, car nous devons également créer des politiques applicables à différentes «étapes» (développement, construction, étape, publication). Cela est nécessaire pour bloquer les composants vulnérables lorsqu'ils se déplacent le long du pipeline plus près du produit, ou pour bloquer dès qu'ils entrent dans le Nexus Repo lorsqu'ils sont téléchargés par les développeurs.
Pour ressentir la différence entre l'open source et l'entreprise, effectuons le même scan via le Nexus IQ de la même manière via le plugin Maven , après avoir créé au préalable 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=<NEXUSIQIP> -Dclm.username=<USERNAME> -Dclm.password=<PASSWORD>
Suivez l'URL du rapport généré dans l'interface Web IQ:
Ici, vous pouvez voir toutes les violations de politique avec différents niveaux de signification (d'Info à Security Critical). La lettre D à côté du composant signifie que le composant est une dépendance directe et la lettre T à côté du composant signifie que le composant est une dépendance transitive, c'est-à-dire qu'il est transitif.
À propos, le rapport sur l' état de la sécurité Open Source 2020 de Snyk rapporte que plus de 70% des vulnérabilités open source trouvées dans Node.js, Java et Ruby se trouvent dans des 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 version, qui montre l'emplacement de la version actuelle sur la chronologie, ainsi que le point à quel point la vulnérabilité n'est plus vulnérable. La hauteur des chandeliers sur le graphique montre la popularité de ce composant.
Si vous accédez à la section sur la vulnérabilité et divulguez la CVE, vous pouvez lire une description de cette vulnérabilité, des recommandations pour l'élimination, ainsi que la raison pour laquelle ce composant a été violé, c'est-à-dire la présence d'une classe
DiskFileitem.class
.
Résumons uniquement les composants Java tiers, en supprimant les composants js. Entre parenthèses, nous indiquons le nombre de ces 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 sonatype db)
Vérification de la dépendance totale:
- Dépendances analysées: 47
- Dépendances vulnérables: 13
- Vulnérabilités trouvées: 91 (14 sonatype oss)
Suivi de dépendance totale:
- Dépendances analysées: 59
- Dépendances vulnérables: 10
- Vulnérabilités trouvées: 51 (1 sonatype oss)
Dans les prochaines étapes, nous analyserons les résultats et déterminerons laquelle de ces vulnérabilités est un vrai défaut et laquelle est un faux positif.
Avertissement
Cette critique n'est pas une vérité indéniable. L'auteur n'avait pas pour objectif de faire ressortir un instrument distinct des autres. Le but de la revue était de montrer comment les outils SCA fonctionnent et comment vérifier leurs résultats.
Comparaison des résultats
Conditions: Un
faux positif pour les vulnérabilités dans les composants tiers est:
- Non-correspondance CVE pour le composant identifié
- , struts2, struts-tiles, , false positive
- CVE
- , python > 3.5 2.7 — false positive, 3.x
- CVE
- , SCA CVE, RCE, SCA CVE, Cisco, RCE. false positive.
- Par exemple, CVE a été trouvé dans un composant spring-web, après quoi SCA pointe vers le même CVE dans d'autres composants de Spring Framework, tandis que CVE n'a rien à voir avec d'autres composants. Dans ce cas, ce sera un faux positif.
Le projet open source DVJA a été choisi comme objet de recherche. L'étude n'a impliqué que des composants java (pas de js).
Résumé des résultats
Passons directement au résultat d'une revue manuelle des vulnérabilités identifiées. Le rapport complet de chaque CVE se trouve en annexe.
Résumé des résultats pour toutes les vulnérabilités:
Paramètre | Nexus IQ | Vérification de la dépendance | Suivi des dépendances |
---|---|---|---|
Total des vulnérabilités identifiées | 42 | 91 | 51 |
Vulnérabilités détectées incorrectement (faux positif) | 2 (4,76%) | 62 (68,13%) | 29 (56,86%) |
Aucune vulnérabilité pertinente trouvée (faux négatif) | Dix | 20 | 27 |
Résumé des résultats par composante:
Paramètre | Nexus IQ | Vérification de la dépendance | Suivi des dépendances |
---|---|---|---|
Total des composants identifiés | 62 | 47 | 59 |
Total des composants vulnérables | seize | treize | Dix |
Composants vulnérables mal identifiés (faux positif) | 1 | cinq | 0 |
Composants vulnérables mal identifiés (faux positif) | 0 | 6 | 6 |
Construisons des graphiques visuels pour évaluer le rapport des faux positifs et des faux négatifs au nombre total de vulnérabilités. Les composants sont marqués horizontalement et les vulnérabilités qui y sont identifiées sont marquées verticalement.
En comparaison, une étude similaire a été menée par l'équipe de Sonatype pour tester un projet de 1531 composants à l'aide du contrôle de dépendance OWASP. Comme nous pouvons le voir, le rapport bruit / déclencheurs corrects est comparable à nos résultats.
Source: www.sonatype.com/why-precision-matters-ebook
Jetons un coup d'œil à quelques CVE à partir de nos résultats d'analyse pour comprendre la raison de ces résultats.
Plus de détails
# 1
Jetons d'abord un coup d'œil à quelques points intéressants du Sonatype Nexus IQ.
Nexus IQ signale un problème de désérialisation avec la possibilité d'exécuter RCE dans Spring Framework plusieurs fois. 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 existe une vulnérabilité en double dans plusieurs CVE. Car si vous regardez CVE-2016-1000027 et CVE-2011-2894 dans la base de données NVD, alors il semble que tout est évident
Composant | Vulnérabilité |
---|---|
ressort-web: 3.0.5 | CVE-2016-1000027 |
contexte de printemps: 3.0.5 | CVE-2011-2894 |
noyau de ressort: 3.0.5 | CVE-2011-2894 |
Description de CVE-2011-2894 de NVD :
Description de CVE-2016-1000027 de NVD :
CVE-2011-2894 lui-même est assez célèbre. Le rapport 2011 White Source a classé cette CVE comme l'une des plus fréquemment rencontrées. Les descriptions pour CVE-2016-100027 sont, en principe, un peu dans NVD, et cela semble être applicable uniquement pour Spring Framework 4.1.4. Jetez un œil à la référence et ici cela devient plus ou moins clair. Nous comprenons d' après l'article de Tenable qu'en plus de la vulnérabilité
RemoteInvocationSerializingExporter
dans CVE-2011-2894, la vulnérabilité est observée dans HttpInvokerServiceExporter
. Voici ce que nous dit Nexus IQ:
Néanmoins, il n'y a rien de tel dans NVD, c'est pourquoi Dependency Check et Dependency Track reçoivent un faux négatif.
Aussi, d'après la description de CVE-2011-2894, vous pouvez comprendre que la vulnérabilité est bien présente dans spring-context: 3.0.5 et spring-core: 3.0.5. La confirmation de ceci peut être trouvée dans l'article de la personne qui a trouvé 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, néanmoins Nexus IQ nous en informe. Il y a une note dans la description de la vulnérabilité:
c'est-à-dire que la vulnérabilité n'existe qu'en conjonction avec une version obsolète du JRE, dont ils ont décidé de nous avertir. Néanmoins, nous considérons cela comme un faux positif, bien que ce ne soit pas le pire.
Numéro 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 les descriptions pour CVE-2017-9804 et CVE-2017-7672, nous comprendrons que le problème est
URLValidator class
, et CVE-2017-9804 découle de CVE-2017-7672. La présence de la deuxième vulnérabilité ne porte aucune charge utile, sauf que sa gravité est passée à Élevée, ce qui peut donc être considéré comme un bruit inutile.
Dans l'ensemble, aucun autre faux positif n'a été trouvé pour le Nexus IQ.
# 4
Il y a plusieurs choses qui distinguent IQ des autres décisions.
Composant | Vulnérabilité | Résultat |
---|---|---|
ressort-web: 3.0.5 | CVE-2020-5398 | VRAI |
Le CVE dans NVD dit qu'il n'est applicable que pour les versions 5.2.x jusqu'à 5.2.3, 5.1.x jusqu'à 5.1.13 et les versions 5.0.x jusqu'à 5.0.16, cependant, si nous regardons la description CVE dans le Nexus IQ, nous verrons ce qui suit:
Avis de dérogation: l'équipe de recherche sur la sécurité de Sonatype a découvert que cette vulnérabilité a été introduite dans la version 3.0.2.RELEASE et non dans la version 5.0.x comme indiqué dans l'avis.
Ceci est suivi d'un PoC pour cette vulnérabilité, qui signale qu'elle est présente dans la version 3.0.5.
Un faux négatif est envoyé à Dependency Check et Dependency Track.
# 5
Examinons les faux positifs pour la vérification des dépendances et le suivi des dépendances.
Dependency Check se distingue en ce qu'il reflète les CVE qui s'appliquent à l'ensemble du framework dans NVD aux composants auxquels ces CVE ne sont pas applicables. Cela s'applique à CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, sur lequel le contrôle de dépendance «vissé» vers struts-taglib: 1.3.8 et struts-tiles-1.3.8. Ces composants n'ont rien à voir avec ce qui est décrit dans CVE - traitement des demandes, validation de page, etc. Cela est dû au fait que le point commun entre ces CVE et les composants n'est que le framework, c'est pourquoi Dependency Check l'a considéré comme une vulnérabilité.
La même situation 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 sont en fait applicables à struts2-core, qui est essentiellement un framework distinct. Dans ce cas, Nexus IQ a bien compris l'image et dans les CVE qu'il a émis, a indiqué que struts-core arrivait en fin de vie et qu'il était nécessaire de passer à struts2-core.
# 6
Dans certaines situations, il est injuste d'interpréter une erreur explicite de vérification de dépendance et de suivi de dépendance. En particulier CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, qui sont Dependency Check et Dependency Track renvoyé à spring-core: 3.0.5 fait référence à spring-web: 3.0.5. Dans le même temps, certains de ces CVE ont été trouvés et le Nexus IQ, néanmoins, l'IQ les a correctement identifiés pour un autre composant. Puisque ces vulnérabilités n'ont pas été trouvées dans spring-core, on ne peut pas soutenir qu'elles ne sont pas dans le cadre, en principe, et les outils open source ont à juste titre pointé ces vulnérabilités (ils ont juste raté un peu).
conclusions
Comme on peut le voir, déterminer la fiabilité des vulnérabilités identifiées par un examen manuel ne donne pas de résultats sans ambiguïté, ce qui conduit à des questions controversées. Les résultats sont tels 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 Sonatype a élargi la description de chaque vulnérabilité CVE de NVD dans leurs bases de données, en spécifiant, avec précision à la classe ou à la fonction de la vulnérabilité pour une version particulière du composant, en menant des recherches supplémentaires (par exemple, vérifier les vulnérabilités sur des versions logicielles).
Les vulnérabilités qui n'étaient pas incluses dans NVD, mais qui sont néanmoins présentes dans la base de données Sonatype avec la marque SONATYPE, ont une influence importante sur les résultats. Selon l' état des vulnérabilités de sécurité Open Source 202045% des vulnérabilités open source découvertes ne sont pas signalées à NVD. Selon la base de données WhiteSource, seulement 29% de toutes les vulnérabilités open source signalées en dehors de NVD finissent par y être publiées, c'est pourquoi il est également important de chercher ailleurs les vulnérabilités.
En conséquence, Dependency Check génère beaucoup de bruit, manquant certains composants vulnérables. Dependency Track produit moins de bruit et révèle un grand nombre de composants, ce qui ne fait pas mal aux yeux visuellement dans l'interface Web.
Néanmoins, la pratique montre que c'est l'open source qui devrait être la première étape vers la maturation de DevSecOps. La première chose à laquelle il faut penser pour intégrer SCA dans le développement est les processus, c'est-à-dire réfléchir avec la direction et les services associés sur la façon dont les processus idéaux devraient ressembler dans leur organisation. Il se peut que, dans un premier temps, pour votre organisation, Dependency Check ou Dependency Track couvre tous les besoins de l'entreprise, et les solutions d'entreprise seront une suite logique en raison de la complexité croissante des applications développées.
Annexe A. Résultats appliqués aux composants
:
- High —
- Medium —
- TRUE — (True positive issue)
- FALSE — (False positive issue)
Nexus IQ | Dependency Check | Dependency Track | ||
---|---|---|---|---|
dom4j: 1.6.1 | High | High | High | TRUE |
log4j-core: 2.3 | High | High | High | TRUE |
log4j: 1.2.14 | High | High | - | TRUE |
commons-collections:3.1 | High | High | High | TRUE |
commons-fileupload:1.3.2 | High | High | High | TRUE |
commons-beanutils:1.7.0 | High | High | High | TRUE |
commons-codec:1:10 | Medium | - | - | TRUE |
mysql-connector-java:5.1.42 | High | High | High | TRUE |
spring-expression:3.0.5 | High |
|
TRUE | |
spring-web:3.0.5 | High | High | TRUE | |
spring-context:3.0.5 | Medium | - | TRUE | |
spring-core:3.0.5 | Medium | High | High | TRUE |
struts2-config-browser-plugin:2.3.30 | Medium | - | - | TRUE |
spring-tx:3.0.5 | - | High | - | FALSE |
struts-core:1.3.8 | High | High | High | TRUE |
xwork-core: 2.3.30 | High | - | - | TRUE |
struts2-core: 2.3.30 | High | High | High | TRUE |
struts-taglib:1.3.8 | - | High | - | FALSE |
struts-tiles-1.3.8 | - | High | - | FALSE |
Annexe B. Résultats pour les vulnérabilités
:
- High —
- Medium —
- TRUE — (True positive issue)
- FALSE — (False positive issue)
Nexus IQ | Dependency Check | Dependency Track | Severity | |||
---|---|---|---|---|---|---|
dom4j: 1.6.1 | CVE-2018-1000632 | CVE-2018-1000632 | CVE-2018-1000632 | High | TRUE | |
CVE-2020-10683 | CVE-2020-10683 | CVE-2020-10683 | High | TRUE | ||
log4j-core: 2.3 | CVE-2017-5645 | CVE-2017-5645 | CVE-2017-5645 | High | TRUE | |
CVE-2020-9488 | CVE-2020-9488 | CVE-2020-9488 | Low | TRUE | ||
log4j: 1.2.14 | CVE-2019-17571 | CVE-2019-17571 | - | High | TRUE | |
- | CVE-2020-9488 | - | Low | TRUE | ||
SONATYPE-2010-0053 | - | - | High | TRUE | ||
commons-collections:3.1 | - | CVE-2015-6420 | CVE-2015-6420 | High | FALSE | RCE(OSSINDEX)
|
- | CVE-2017-15708 | CVE-2017-15708 | High | FALSE | RCE(OSSINDEX)
|
|
SONATYPE-2015-0002 | RCE (OSSINDEX) | RCE(OSSINDEX) | High | TRUE | ||
commons-fileupload:1.3.2 | CVE-2016-1000031 | CVE-2016-1000031 | CVE-2016-1000031 | High | TRUE | |
SONATYPE-2014-0173 | - | - | Medium | TRUE | ||
commons-beanutils:1.7.0 | CVE-2014-0114 | CVE-2014-0114 | CVE-2014-0114 | High | TRUE | |
- | CVE-2019-10086 | CVE-2019-10086 | High | FALSE | 1.9.2+
|
|
commons-codec:1:10 | SONATYPE-2012-0050 | - | - | Medium | TRUE | |
mysql-connector-java:5.1.42 | CVE-2018-3258 | CVE-2018-3258 | CVE-2018-3258 | High | TRUE | |
CVE-2019-2692 | CVE-2019-2692 | - | Medium | TRUE | ||
- | CVE-2020-2875 | - | Medium | FALSE | CVE-2019-2692, c «attacks may significantly impact additional products»
|
|
- | CVE-2017-15945 | - | High | FALSE | mysql-connector-java
|
|
- | CVE-2020-2933 | - | Low | FALSE | CVE-2020-2934
|
|
CVE-2020-2934 | CVE-2020-2934 | - | Medium | TRUE | ||
spring-expression:3.0.5 | CVE-2018-1270 | - | High | TRUE | ||
CVE-2018-1257 | - | - | Medium | TRUE | ||
spring-web:3.0.5 | CVE-2016-1000027 | - | High | TRUE | ||
CVE-2014-0225 | - | CVE-2014-0225 | High | TRUE | ||
CVE-2011-2730 | - | - | High | TRUE | ||
- | - | CVE-2013-4152 | Medium | TRUE | ||
CVE-2018-1272 | - | - | High | TRUE | ||
CVE-2020-5398 | - | - | High | TRUE | IQ: «The Sonatype security research team discovered that this vulnerability was introduced in version 3.0.2.RELEASE and not 5.0.x as stated in the advisory.»
|
|
CVE-2013-6429 | - | - | Medium | TRUE | ||
CVE-2014-0054 | - | CVE-2014-0054 | Medium | TRUE | ||
CVE-2013-6430 | - | - | Medium | TRUE | ||
spring-context:3.0.5 | CVE-2011-2894 | - | Medium | TRUE | ||
spring-core:3.0.5 | - | CVE-2011-2730 | CVE-2011-2730 | High | TRUE | |
CVE-2011-2894 | CVE-2011-2894 | CVE-2011-2894 | Medium | TRUE | ||
- | - | CVE-2013-4152 | Medium | FALSE | spring-web
|
|
- | CVE-2013-4152 | - | Medium | FALSE | spring-web
|
|
- | CVE-2013-6429 | CVE-2013-6429 | Medium | FALSE | spring-web
|
|
- | CVE-2013-6430 | - | Medium | FALSE | spring-web
|
|
- | CVE-2013-7315 | CVE-2013-7315 | Medium | FALSE | SPLIT CVE-2013-4152. + spring-web
|
|
- | CVE-2014-0054 | CVE-2014-0054 | Medium | FALSE | spring-web
|
|
- | CVE-2014-0225 | - | High | FALSE | spring-web
|
|
- | - | CVE-2014-0225 | High | FALSE | spring-web
|
|
- | CVE-2014-1904 | CVE-2014-1904 | Medium | FALSE | spring-web-mvc
|
|
- | CVE-2014-3625 | CVE-2014-3625 | Medium | FALSE | spring-web-mvc
|
|
- | CVE-2016-9878 | CVE-2016-9878 | High | FALSE | spring-web-mvc
|
|
- | CVE-2018-1270 | CVE-2018-1270 | High | FALSE | spring-expression / spring-messages
|
|
- | CVE-2018-1271 | CVE-2018-1271 | Medium | FALSE | spring-web-mvc
|
|
- | CVE-2018-1272 | CVE-2018-1272 | High | TRUE | ||
CVE-2014-3578 | CVE-2014-3578 (OSSINDEX) | CVE-2014-3578 | Medium | TRUE | ||
SONATYPE-2015-0327 | - | - | Low | TRUE | ||
struts2-config-browser-plugin:2.3.30 | SONATYPE-2016-0104 | - | - | Medium | TRUE | |
spring-tx:3.0.5 | - | CVE-2011-2730 | - | High | FALSE | spring-tx
|
- | CVE-2011-2894 | - | High | FALSE | spring-tx
|
|
- | CVE-2013-4152 | - | Medium | FALSE | spring-tx
|
|
- | CVE-2013-6429 | - | Medium | FALSE | spring-tx
|
|
- | CVE-2013-6430 | - | Medium | FALSE | spring-tx
|
|
- | CVE-2013-7315 | - | Medium | FALSE | spring-tx
|
|
- | CVE-2014-0054 | - | Medium | FALSE | spring-tx
|
|
- | CVE-2014-0225 | - | High | FALSE | spring-tx
|
|
- | CVE-2014-1904 | - | Medium | FALSE | spring-tx
|
|
- | CVE-2014-3625 | - | Medium | FALSE | spring-tx
|
|
- | CVE-2016-9878 | - | High | FALSE | spring-tx
|
|
- | CVE-2018-1270 | - | High | FALSE | spring-tx
|
|
- | CVE-2018-1271 | - | Medium | FALSE | spring-tx
|
|
- | CVE-2018-1272 | - | Medium | FALSE | spring-tx
|
|
struts-core:1.3.8 | - | CVE-2011-5057 (OSSINDEX)
|
Medium | FASLE | Struts 2
|
|
- | CVE-2012-0391 (OSSINDEX) | CVE-2012-0391 | High | FALSE | Struts 2
|
|
- | CVE-2014-0094 (OSSINDEX) | CVE-2014-0094 | Medium | FALSE | Struts 2
|
|
- | CVE-2014-0113 (OSSINDEX) | CVE-2014-0113 | High | FALSE | Struts 2
|
|
CVE-2016-1182 | 3VE-2016-1182 | - | High | TRUE | ||
- | - | CVE-2011-5057 | Medium | FALSE | Struts 2
|
|
- | CVE-2012-0392 (OSSINDEX) | CVE-2012-0392 | High | FALSE | Struts 2
|
|
- | CVE-2012-0393 (OSSINDEX) | CVE-2012-0393 | Medium | FALSE | Struts 2
|
|
CVE-2015-0899 | CVE-2015-0899 | - | High | TRUE | ||
- | CVE-2012-0394 | CVE-2012-0394 | Medium | FALSE | Struts 2
|
|
- | CVE-2012-0838 (OSSINDEX) | CVE-2012-0838 | High | FALSE | Struts 2
|
|
- | CVE-2013-1965 (OSSINDEX) | CVE-2013-1965 | High | FALSE | Struts 2
|
|
- | CVE-2013-1966 (OSSINDEX) | CVE-2013-1966 | High | FASLE | Struts 2
|
|
- | CVE-2013-2115 | CVE-2013-2115 | High | FASLE | Struts 2
|
|
- | CVE-2013-2134 (OSSINDEX) | CVE-2013-2134 | High | FASLE | Struts 2
|
|
- | CVE-2013-2135 (OSSINDEX) | CVE-2013-2135 | High | FASLE | Struts 2
|
|
CVE-2014-0114 | CVE-2014-0114 | - | High | TRUE | ||
- | CVE-2015-2992 | CVE-2015-2992 | Medium | FALSE | Struts 2
|
|
- | CVE-2016-0785 (OSSINDEX) | CVE-2016-0785 | High | FALSE | Struts 2
|
|
CVE-2016-1181 | CVE-2016-1181 | - | High | TRUE | ||
- | CVE-2016-4003 (OSSINDEX) | CVE-2016-4003 | High | FALSE | Struts 2
|
|
xwork-core:2.3.30 | CVE-2017-9804 | - | - | High | TRUE | |
SONATYPE-2017-0173 | - | - | High | TRUE | ||
CVE-2017-7672 | - | - | High | FALSE | CVE-2017-9804
|
|
SONATYPE-2016-0127 | - | - | High | TRUE | ||
struts2-core:2.3.30 | - | CVE-2016-6795 | CVE-2016-6795 | High | TRUE | |
- | CVE-2017-9787 | CVE-2017-9787 | High | TRUE | ||
- | CVE-2017-9791 | CVE-2017-9791 | High | TRUE | ||
- | CVE-2017-9793 | - | High | FALSE | CVE-2018-1327
|
|
- | CVE-2017-9804 | - | High | TRUE | ||
- | CVE-2017-9805 | CVE-2017-9805 | High | TRUE | ||
CVE-2016-4003 | - | - | Medium | FALSE | Apache Struts 2.x 2.3.28, 2.3.30. , , CVE Struts 2, JRE 1.7 . , FALSE
|
|
- | CVE-2018-1327 | CVE-2018-1327 | High | TRUE | ||
CVE-2017-5638 | CVE-2017-5638 | CVE-2017-5638 | High | TRUE | , Equifax 2017
|
|
CVE-2017-12611 | CVE-2017-12611 | - | High | TRUE | ||
CVE-2018-11776 | CVE-2018-11776 | CVE-2018-11776 | High | TRUE | ||
struts-taglib:1.3.8 | - | CVE-2012-0394 | - | Medium | FALSE | struts2-core |
- | CVE-2013-2115 | - | High | FALSE | struts2-core | |
- | CVE-2014-0114 | - | High | FALSE | commons-beanutils
|
|
- | CVE-2015-0899 | - | High | FALSE | taglib
|
|
- | CVE-2015-2992 | - | Medium | FALSE | struts2-core
|
|
- | CVE-2016-1181 | - | High | FALSE | taglib
|
|
- | CVE-2016-1182 | - | High | FALSE | taglib
|
|
struts-tiles-1.3.8 | - | CVE-2012-0394 | - | Medium | FALSE | struts2-core |
- | CVE-2013-2115 | - | High | FALSE | struts2-core | |
- | CVE-2014-0114 | - | High | FALSE | commons-beanutils
|
|
- | CVE-2015-0899 | - | High | FALSE | tiles
|
|
- | CVE-2015-2992 | - | Medium | FALSE | struts2-core | |
- | CVE-2016-1181 | - | High | FALSE | taglib
|
|
- | CVE-2016-1182 | - | High | FALSE | taglib
|