Het belang van de analyse van softwarecomponenten van derden (Software Composition Analysis - SCA) in het ontwikkelingsproces groeit met de publicatie van jaarverslagen over de kwetsbaarheden van open source-bibliotheken, die worden gepubliceerd door Synopsys, Sonatype, Snyk en White Source. . Volgens het rapport
Eén van de meest illustratieve gevallen
Dit artikel bespreekt de kwestie van het kiezen van een hulpmiddel voor het uitvoeren van SCA vanuit het oogpunt van de kwaliteit van de analyseresultaten. Er zal ook een functionele vergelijking van de tools worden gegeven. Het proces van integratie in CI/CD en integratiemogelijkheden zullen worden overgelaten aan volgende publicaties. OWASP presenteerde een breed scala aan tools
Werking
Laten we eens kijken hoe CPE eruit ziet:
cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other
- Deel: Indicatie dat het onderdeel betrekking heeft op de applicatie (a), besturingssysteem (o), hardware (h) (Vereist)
- Leverancier: Naam van productfabrikant (vereist)
- Artikel: Productnaam (vereist)
- Versie: Componentversie (Verouderd item)
- update: Pakketupdate
- Editie: Verouderde versie (verouderd item)
- Taal: Taal gedefinieerd in RFC-5646
- SW-editie: Software versie
- Doel-SW: Softwareomgeving waarin het product functioneert
- Doel-HW: De hardwareomgeving waarin het product werkt
- Andere: Leveranciers- of productinformatie
Een voorbeeld van een CPE ziet er als volgt uit:
cpe:2.3:a:pivotal_software:spring_framework:3.0.0:*:*:*:*:*:*:*
De regel betekent dat CPE versie 2.3 het applicatieonderdeel van de fabrikant beschrijft pivotal_software
met de titel spring_framework
versie 3.0.0. Als we een kwetsbaarheid openen
De URL wordt ook gebruikt door SCA-tools. De pakket-URL-indeling is als volgt:
scheme:type/namespace/name@version?qualifiers#subpath
- Schema: Er zal altijd 'pkg' staan, wat aangeeft dat dit een pakket-URL is (vereist)
- Type: Het "type" van het pakket of het "protocol" van het pakket, zoals maven, npm, nuget, gem, pypi, enz. (Vereist artikel)
- namespace: Een naamvoorvoegsel, zoals een Maven-groeps-ID, Docker-image-eigenaar, GitHub-gebruiker of organisatie. Optioneel en afhankelijk van het type.
- Naam: Pakketnaam (vereist)
- Versie: Pakketversie
- Kwalificaties: Aanvullende kwalificatiegegevens voor het pakket, zoals besturingssysteem, architectuur, distributie, enz. Optioneel en typespecifiek.
- Subpad: Extra pad in het pakket ten opzichte van de pakketroot
Bijvoorbeeld:
pkg:golang/google.golang.org/genproto#googleapis/api/annotations
pkg:maven/org.apache.commons/[email protected]
pkg:pypi/[email protected]
Een voorbeeld van hoe een stuklijst er in XML-formaat uit zou kunnen zien:
<?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/[email protected]</purl>
</component>
<!-- More components here -->
</components>
</bom>
BOM kan niet alleen worden gebruikt als invoerparameters voor Dependency Track, maar ook voor het inventariseren van softwarecomponenten in de supply chain, bijvoorbeeld voor het leveren van software aan een klant. In 2014 werd in de Verenigde Staten zelfs een wet voorgesteld
Terugkerend naar SCA heeft Dependency Track kant-en-klare integraties met meldingsplatforms zoals Slack en systemen voor kwetsbaarheidsbeheer zoals Kenna Security. Het is ook de moeite waard om te zeggen dat Dependency Track onder andere verouderde versies van pakketten identificeert en informatie geeft over licenties (vanwege SPDX-ondersteuning).
Als we het specifiek hebben over de kwaliteit van SCA, dan is er een fundamenteel verschil.
Dependency Track accepteert niet het project als input, maar eerder de stuklijst. Dit betekent dat als we het project willen testen, we eerst bom.xml moeten genereren, bijvoorbeeld met CycloneDX. Dependency Track is dus direct afhankelijk van CycloneDX. Tegelijkertijd maakt het maatwerk mogelijk. Dit is wat het OZON-team schreef
Laten we enkele functionele kenmerken samenvatten en ook de ondersteunde talen voor analyse overwegen:
taal
Nexus-IQ
Afhankelijkheidscontrole
Afhankelijkheidsspoor
Java
+
+
+
C / C ++
+
+
-
C#
+
+
-
. Net
+
+
+
Erlang
-
-
+
JavaScript (NodeJS)
+
+
+
PHP
+
+
+
Python
+
+
+
Ruby
+
+
+
Perl
-
-
-
Scala
+
+
+
Doelstelling C
+
+
-
Swift
+
+
-
R
+
-
-
Go
+
+
+
functionaliteit
functionaliteit
Nexus-IQ
Afhankelijkheidscontrole
Afhankelijkheidsspoor
De mogelijkheid om ervoor te zorgen dat componenten die in de broncode worden gebruikt, worden gecontroleerd op gelicentieerde zuiverheid
+
-
+
Mogelijkheid om te scannen en analyseren op kwetsbaarheden en licentiezuiverheid voor Docker-images
+ Integratie met Clair
-
-
Mogelijkheid om beveiligingsbeleid te configureren om open source-bibliotheken te gebruiken
+
-
-
Mogelijkheid om open source-opslagplaatsen te scannen op kwetsbare componenten
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS
-
+ Hex, RubyGems, Maven, NPM, Nuget, Pypi
Beschikbaarheid van een gespecialiseerde onderzoeksgroep
+
-
-
Gesloten luswerking
+
+
+
Gebruik van databases van derden
+ Gesloten Sonatype-database
+ Sonatype OSS, NPM Publieke Adviseurs
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, ondersteuning voor zijn eigen kwetsbaarheidsdatabase
Mogelijkheid om open source-componenten te filteren wanneer ze in de ontwikkelingslus proberen te laden volgens geconfigureerd beleid
+
-
-
Aanbevelingen voor het oplossen van kwetsbaarheden, beschikbaarheid van links naar oplossingen
+
+- (afhankelijk van de beschrijving in openbare databases)
+- (afhankelijk van de beschrijving in openbare databases)
Rangschikking van gedetecteerde kwetsbaarheden op basis van ernst
+
+
+
Rolgebaseerd toegangsmodel
+
-
+
CLI-ondersteuning
+
+
+- (alleen voor CycloneDX)
Bemonstering/sortering van kwetsbaarheden volgens gedefinieerde criteria
+
-
+
Dashboard op applicatiestatus
+
-
+
Rapporten genereren in PDF-formaat
+
-
-
Rapporten genereren in JSONCSV-formaat
+
+
-
Ondersteuning voor de Russische taal
-
-
-
Integratiemogelijkheden
integratie
Nexus-IQ
Afhankelijkheidscontrole
Afhankelijkheidsspoor
LDAP/Active Directory-integratie
+
-
+
Integratie met continu integratiesysteem Bamboo
+
-
-
Integratie met continu integratiesysteem TeamCity
+
-
-
Integratie met continu integratiesysteem GitLab
+
+- (als plug-in voor GitLab)
+
Integratie met continu integratiesysteem Jenkins
+
+
+
Beschikbaarheid van plug-ins voor IDE
+ IntelliJ, Eclipse, Visual Studio
-
-
Ondersteuning voor aangepaste integratie via webservices (API) van de tool
+
-
+
Afhankelijkheidscontrole
Eerste run
Laten we de afhankelijkheidscontrole uitvoeren op een opzettelijk kwetsbare applicatie
Hiervoor zullen we gebruiken
mvn org.owasp:dependency-check-maven:check
Als gevolg hiervan verschijnt dependency-check-report.html in de doelmap.
Laten we het bestand openen. Na samenvattende informatie over het totale aantal kwetsbaarheden kunnen we informatie zien over kwetsbaarheden met een hoog niveau van ernst en vertrouwen, met vermelding van het pakket, de CPE en het aantal CVE’s.
Vervolgens komt meer gedetailleerde informatie, met name de basis waarop de beslissing is genomen (bewijsmateriaal), dat wil zeggen een bepaalde stuklijst.
Vervolgens komen de CPE-, PURL- en CVE-beschrijving. Aanbevelingen voor correctie zijn overigens niet opgenomen vanwege hun afwezigheid in de NVD-database.
Om de scanresultaten systematisch te bekijken, kunt u Nginx met minimale instellingen configureren, of de resulterende defecten naar een defectbeheersysteem sturen dat connectoren met Dependency Check ondersteunt. Bijvoorbeeld DefectDojo.
Afhankelijkheidsspoor
installatie
Dependency Track is op zijn beurt een webgebaseerd platform met weergavegrafieken, dus de urgente kwestie van het opslaan van defecten in een oplossing van derden doet zich hier niet voor.
De ondersteunde scripts voor installatie zijn: Docker, WAR, Executable WAR.
Eerste run
We gaan naar de URL van de actieve service. We loggen in via admin/admin, wijzigen de login en het wachtwoord en gaan vervolgens naar het Dashboard. Het volgende dat we gaan doen is een project maken voor een testapplicatie in Java Home/Projecten → Project aanmaken . Laten we de DVJA als voorbeeld nemen.
Omdat Dependency Track alleen stuklijst als invoer kan accepteren, moet deze stuklijst worden opgehaald. Laten we profiteren
mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom
We krijgen bom.xml en laden het bestand in het gemaakte project DVJA → Afhankelijkheden → Stuklijst uploaden.
Laten we naar Beheer → Analysers gaan. We begrijpen dat we alleen Internal Analyzer hebben ingeschakeld, inclusief NVD. Laten we ook Sonatype OSS Index verbinden.
We krijgen dus het volgende beeld voor ons project:
Ook in de lijst vindt u één kwetsbaarheid die van toepassing is op Sonatype OSS:
De grootste teleurstelling was dat Dependency Track niet langer Dependency Check XML-rapporten accepteert. De nieuwste ondersteunde versies van de Dependency Check-integratie waren 1.0.0 - 4.0.2, terwijl ik 5.3.2 testte.
Hier
Nexus-IQ
Eerste run
Installatie van Nexus IQ komt uit de archieven van
Nadat u zich heeft aangemeld bij de console, moet u een organisatie en applicatie aanmaken.
Zoals je kunt zien is de opzet in het geval van IQ iets ingewikkelder, omdat we ook beleid moeten creëren dat van toepassing is op verschillende ‘fasen’ (dev, build, stage, release). Dit is nodig om kwetsbare componenten te blokkeren wanneer ze door de pijplijn dichter bij de productie komen, of om ze te blokkeren zodra ze in de Nexus Repo terechtkomen wanneer ze door ontwikkelaars worden gedownload.
Laten we, om het verschil tussen open source en enterprise te voelen, dezelfde scan uitvoeren via Nexus IQ op dezelfde manier via 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>
Volg de URL naar het gegenereerde rapport in de IQ-webinterface:
Hier kunt u alle beleidsschendingen zien die verschillende significantieniveaus aangeven (van Info tot Beveiligingskritiek). De letter D naast de component betekent dat de component Directe afhankelijkheid is, en de letter T naast de component betekent dat de component Transitieve Afhankelijkheid is, dat wil zeggen dat deze transitief is.
Overigens het rapport
Als we een van de schendingen van het Nexus IQ-beleid openen, kunnen we een beschrijving van het onderdeel zien, evenals een versiegrafiek, die de locatie van de huidige versie in de tijdgrafiek toont, en ook op welk punt de kwetsbaarheid ophoudt te bestaan. wees kwetsbaar. De hoogte van de kaarsen in de grafiek toont de populariteit van het gebruik van dit onderdeel.
Als u naar het gedeelte met kwetsbaarheden gaat en de CVE uitvouwt, kunt u een beschrijving van deze kwetsbaarheid lezen, aanbevelingen voor eliminatie, evenals de reden waarom dit onderdeel is geschonden, dat wil zeggen de aanwezigheid van de klasse DiskFileitem.class
.
Laten we alleen die met betrekking tot Java-componenten van derden samenvatten, waarbij de js-componenten worden verwijderd. Tussen haakjes geven wij het aantal kwetsbaarheden aan dat buiten NVD is aangetroffen.
Totaal Nexus-IQ:
- Afhankelijkheden gescand: 62
- Kwetsbare afhankelijkheden: 16
- Kwetsbaarheden gevonden: 42 (8 sonatype db)
Totale afhankelijkheidscontrole:
- Afhankelijkheden gescand: 47
- Kwetsbare afhankelijkheden: 13
- Kwetsbaarheden gevonden: 91 (14 sonatype oss)
Totaal afhankelijkheidsspoor:
- Afhankelijkheden gescand: 59
- Kwetsbare afhankelijkheden: 10
- Kwetsbaarheden gevonden: 51 (1 sonatype oss)
In de volgende stappen zullen we de verkregen resultaten analyseren en uitzoeken welke van deze kwetsbaarheden een echt defect is en welke een vals positief resultaat is.
Disclaimer
Deze recensie is geen onbetwistbare waarheid. Het was niet de bedoeling van de auteur om een afzonderlijk instrument tegen de achtergrond van anderen te belichten. Het doel van de review was om de werkingsmechanismen van SCA-instrumenten te laten zien en manieren om de resultaten ervan te controleren.
Vergelijking van resultaten
Algemene voorwaarden:
Een false positive voor kwetsbaarheden in componenten van derden is:
- CVE-mismatch met geïdentificeerde component
- Als er bijvoorbeeld een kwetsbaarheid wordt geïdentificeerd in het struts2-framework, en de tool verwijst naar een onderdeel van het struts-tiles-framework, waarop deze kwetsbaarheid niet van toepassing is, dan is dit een vals positief resultaat.
- CVE komt niet overeen met de geïdentificeerde versie van de component
- De kwetsbaarheid houdt bijvoorbeeld verband met Python-versie > 3.5 en de tool markeert versie 2.7 als kwetsbaar - dit is een false positive, aangezien de kwetsbaarheid in feite alleen van toepassing is op de 3.x-producttak
- Dubbele CVE
- Als de SCA bijvoorbeeld een CVE specificeert die een RCE mogelijk maakt, specificeert de SCA een CVE voor datzelfde onderdeel dat van toepassing is op Cisco-producten die onder die RCE vallen. In dit geval zal het vals-positief zijn.
- Er is bijvoorbeeld een CVE gevonden in een spring-web component, waarna SCA verwijst naar dezelfde CVE in andere componenten van het Spring Framework, terwijl de CVE niets met andere componenten te maken heeft. In dit geval zal het vals-positief zijn.
Het doel van het onderzoek was het Open Source project DVJA. Het onderzoek betrof alleen Java-componenten (zonder js).
Samenvatting resultaten
Laten we meteen naar de resultaten gaan van een handmatige beoordeling van geïdentificeerde kwetsbaarheden. Het volledige rapport per CVE vindt u in de bijlage.
Samenvattende resultaten voor alle kwetsbaarheden:
Parameter
Nexus-IQ
Afhankelijkheidscontrole
Afhankelijkheidsspoor
Totaal aantal geïdentificeerde kwetsbaarheden
42
91
51
Onjuist geïdentificeerde kwetsbaarheden (false positive)
2 (4.76%)
62 (68,13%)
29 (56.86%)
Geen relevante kwetsbaarheden gevonden (vals negatief)
10
20
27
Samenvatting resultaten per component:
Parameter
Nexus-IQ
Afhankelijkheidscontrole
Afhankelijkheidsspoor
Totaal aantal geïdentificeerde componenten
62
47
59
Totaal kwetsbare componenten
16
13
10
Verkeerd geïdentificeerde kwetsbare componenten (false positive)
1
5
0
Verkeerd geïdentificeerde kwetsbare componenten (false positive)
0
6
6
Laten we visuele grafieken maken om de verhouding tussen fout-positieve en fout-negatieve fouten en het totale aantal kwetsbaarheden te evalueren. Componenten zijn horizontaal gemarkeerd en de daarin geïdentificeerde kwetsbaarheden zijn verticaal gemarkeerd.
Ter vergelijking: een soortgelijk onderzoek werd uitgevoerd door het Sonatype-team, waarbij een project van 1531 componenten werd getest met behulp van OWASP Dependency Check. Zoals we kunnen zien, is de verhouding tussen ruis en correcte reacties vergelijkbaar met onze resultaten.
Bron:
Laten we eens kijken naar enkele CVE's uit onze scanresultaten om de reden voor deze resultaten te begrijpen.
Meer
№ 1
Laten we eerst eens kijken naar enkele interessante punten over de Sonatype Nexus IQ.
Nexus IQ wijst op een probleem met deserialisatie met de mogelijkheid om RCE meerdere keren uit te voeren in het Spring Framework. CVE-2016-1000027 in spring-web:3.0.5 voor het eerst, en CVE-2011-2894 in spring-context:3.0.5 en spring-core:3.0.5. In eerste instantie lijkt het erop dat er sprake is van dubbele kwetsbaarheid in meerdere CVE's. Want als je naar CVE-2016-1000027 en CVE-2011-2894 in de NVD-database kijkt, lijkt alles vanzelfsprekend
bestanddeel
Kwetsbaarheid
veerweb: 3.0.5
CVE-2016-1000027
lente-context:3.0.5
CVE-2011-2894
veerkern: 3.0.5
CVE-2011-2894
beschrijving
beschrijving
CVE-2011-2894 zelf is behoorlijk beroemd. In het rapport RemoteInvocationSerializingExporter
in CVE-2011-2894 wordt de kwetsbaarheid waargenomen in HttpInvokerServiceExporter
. Dit is wat Nexus IQ ons vertelt:
Er bestaat echter niets vergelijkbaars in NVD, en daarom krijgen Dependency Check en Dependency Track allebei een vals negatief resultaat.
Ook uit de beschrijving van CVE-2011-2894 kan worden begrepen dat de kwetsbaarheid inderdaad aanwezig is in zowel spring-context:3.0.5 als spring-core:3.0.5. Bevestiging hiervan vind je in een artikel van de persoon die deze kwetsbaarheid heeft gevonden.
№ 2
bestanddeel
Kwetsbaarheid
Resultaat
stutten2-kern:2.3.30
CVE-2016-4003
Juist
Als we de kwetsbaarheid CVE-2016-4003 bestuderen, zullen we begrijpen dat deze in versie 2.3.28 is opgelost, maar Nexus IQ rapporteert dit aan ons. Er staat een opmerking in de beschrijving van de kwetsbaarheid:
Dat wil zeggen dat de kwetsbaarheid alleen bestaat in combinatie met een verouderde versie van de JRE, waarvoor ze besloten ons te waarschuwen. Niettemin beschouwen wij dit als vals positief, hoewel niet het ergste.
№ 3
bestanddeel
Kwetsbaarheid
Resultaat
xwork-kern: 2.3.30
CVE-2017-9804
TRUE
xwork-kern: 2.3.30
CVE-2017-7672
Juist
Als we naar de beschrijvingen van CVE-2017-9804 en CVE-2017-7672 kijken, zullen we begrijpen dat het probleem URLValidator class
, waarbij CVE-2017-9804 voortkomt uit CVE-2017-7672. De aanwezigheid van de tweede kwetsbaarheid brengt geen enkele nuttige lading met zich mee, behalve het feit dat de ernst ervan is toegenomen tot Hoog, dus we kunnen het als onnodige ruis beschouwen.
Over het geheel genomen zijn er geen andere valse positieven gevonden voor Nexus IQ.
№ 4
Er zijn verschillende dingen waardoor IQ zich onderscheidt van andere oplossingen.
bestanddeel
Kwetsbaarheid
Resultaat
veerweb: 3.0.5
CVE-2020-5398
TRUE
De CVE in de NVD stelt dat deze alleen van toepassing is op versies 5.2.x vóór 5.2.3, 5.1.x vóór 5.1.13 en versies 5.0.x vóór 5.0.16, als we echter naar de CVE-beschrijving in Nexus IQ kijken , dan zien we het volgende:
Adviesafwijkingskennisgeving: Het beveiligingsonderzoeksteam van Sonatype ontdekte dat dit beveiligingslek was geïntroduceerd in versie 3.0.2.RELEASE en niet in 5.0.x zoals vermeld in het advies.
Hierna volgt een PoC voor deze kwetsbaarheid, waarin staat dat deze aanwezig is in versie 3.0.5.
Vals negatief wordt verzonden naar Dependency Check en Dependency Track.
№ 5
Laten we eens kijken naar valse positieven voor Dependency Check en Dependency Track.
Dependency Check onderscheidt zich doordat het de CVE's weerspiegelt die van toepassing zijn op het gehele raamwerk in NVD en de componenten waarop deze CVE's niet van toepassing zijn. Het betreft CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, waarbij de Afhankelijkheidscontrole “de boel verpestte ” naar struts-taglib:1.3.8 en struts-tiles-1.3.8. Deze componenten hebben niets te maken met wat wordt beschreven in de CVE: aanvraagverwerking, paginavalidatie, enzovoort. Dit komt door het feit dat deze CVE's en componenten slechts het raamwerk gemeen hebben. Daarom beschouwde Dependency Check het als een kwetsbaarheid.
Dezelfde situatie is met spring-tx:3.0.5, en een vergelijkbare situatie met struts-core:1.3.8. Voor struts-core hebben Dependency Check en Dependency Track veel kwetsbaarheden gevonden die feitelijk van toepassing zijn op struts2-core, wat in wezen een afzonderlijk raamwerk is. In dit geval begreep Nexus IQ het beeld correct en in de CVE's die het uitbracht, werd aangegeven dat struts-core het einde van de levensduur had bereikt en dat het noodzakelijk was om over te stappen op struts2-core.
№ 6
In sommige situaties is het oneerlijk om een duidelijke Dependency Check- en Dependency Track-fout te interpreteren. In het bijzonder CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, welke afhankelijkheidscontrole en afhankelijkheidstrack toegeschreven aan spring-core:3.0.5 behoort eigenlijk tot spring-web:3.0.5. Tegelijkertijd werden sommige van deze CVE's ook gevonden door Nexus IQ, maar IQ identificeerde ze correct met een ander onderdeel. Omdat deze kwetsbaarheden niet in spring-core zijn aangetroffen, kan niet worden gesteld dat ze in principe niet in het raamwerk voorkomen en open source-tools hebben terecht op deze kwetsbaarheden gewezen (ze hebben net een klein beetje gemist).
Bevindingen
Zoals we kunnen zien, levert het handmatig beoordelen van de betrouwbaarheid van geïdentificeerde kwetsbaarheden geen eenduidige resultaten op. Daarom ontstaan er controversiële kwesties. De resultaten zijn dat de Nexus IQ-oplossing het laagste percentage valse positieven en de hoogste nauwkeurigheid heeft.
In de eerste plaats is dit te wijten aan het feit dat het Sonatype-team de beschrijving voor elke CVE-kwetsbaarheid van NVD in zijn databases heeft uitgebreid, de kwetsbaarheden voor een bepaalde versie van de componenten heeft aangegeven tot aan de klasse of functie, en aanvullend onderzoek heeft uitgevoerd (bijvoorbeeld , het controleren van kwetsbaarheden in oudere softwareversies).
Een belangrijke invloed op de resultaten wordt ook gespeeld door de kwetsbaarheden die niet in NVD zijn opgenomen, maar toch aanwezig zijn in de Sonatype-database met het SONATYPE-keurmerk. Volgens het rapport
Als gevolg hiervan produceert Dependency Check veel ruis, waarbij enkele kwetsbare componenten ontbreken. Dependency Track produceert minder ruis en detecteert een groot aantal componenten, wat de ogen in de webinterface geen visuele schade toebrengt.
De praktijk leert echter dat open source de eerste stappen naar volwassen DevSecOps moet worden. Het eerste waar u aan moet denken bij het integreren van SCA in ontwikkeling zijn processen, namelijk samen met het management en aanverwante afdelingen nadenken over hoe ideale processen er in uw organisatie uit zouden moeten zien. Het kan blijken dat Dependency Check of Dependency Track voor uw organisatie in eerste instantie alle zakelijke behoeften zal dekken, en dat Enterprise-oplossingen een logisch vervolg zullen zijn vanwege de groeiende complexiteit van de applicaties die worden ontwikkeld.
Bijlage A: Componentresultaten
Symbolen:
- Hoog: kwetsbaarheden op hoog en kritiek niveau in de component
- Gemiddeld: kwetsbaarheden met een gemiddeld kritiek niveau in de component
- WAAR – Echt positief probleem
- FALSE – Vals-positief probleem
bestanddeel
Nexus-IQ
Afhankelijkheidscontrole
Afhankelijkheidsspoor
Resultaat
dom4j: 1.6.1
Hoge
Hoge
Hoge
TRUE
log4j-kern: 2.3
Hoge
Hoge
Hoge
TRUE
log4j: 1.2.14
Hoge
Hoge
-
TRUE
commons-collecties:3.1
Hoge
Hoge
Hoge
TRUE
commons-fileupload:1.3.2
Hoge
Hoge
Hoge
TRUE
commons-beanutils:1.7.0
Hoge
Hoge
Hoge
TRUE
commons-codec:1:10
Medium
-
-
TRUE
mysql-connector-java:5.1.42
Hoge
Hoge
Hoge
TRUE
veer-expressie:3.0.5
Hoge
onderdeel niet gevonden
TRUE
veerweb: 3.0.5
Hoge
onderdeel niet gevonden
Hoge
TRUE
lente-context:3.0.5
Medium
onderdeel niet gevonden
-
TRUE
veerkern: 3.0.5
Medium
Hoge
Hoge
TRUE
struts2-config-browserplugin:2.3.30
Medium
-
-
TRUE
lente-tx:3.0.5
-
Hoge
-
Juist
stutten-kern: 1.3.8
Hoge
Hoge
Hoge
TRUE
xwork-kern: 2.3.30
Hoge
-
-
TRUE
stutten2-kern: 2.3.30
Hoge
Hoge
Hoge
TRUE
struts-taglib:1.3.8
-
Hoge
-
Juist
stutten-tegels-1.3.8
-
Hoge
-
Juist
Bijlage B: Kwetsbaarheidsresultaten
Symbolen:
- Hoog: kwetsbaarheden op hoog en kritiek niveau in de component
- Gemiddeld: kwetsbaarheden met een gemiddeld kritiek niveau in de component
- WAAR – Echt positief probleem
- FALSE – Vals-positief probleem
bestanddeel
Nexus-IQ
Afhankelijkheidscontrole
Afhankelijkheidsspoor
Strengheid
Resultaat
Commentaar
dom4j: 1.6.1
CVE-2018-1000632
CVE-2018-1000632
CVE-2018-1000632
Hoge
TRUE
CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
Hoge
TRUE
log4j-kern: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
Hoge
TRUE
CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
Laag
TRUE
log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571
-
Hoge
TRUE
-
CVE-2020-9488
-
Laag
TRUE
SONATYPE-2010-0053
-
-
Hoge
TRUE
commons-collecties:3.1
-
CVE-2015-6420
CVE-2015-6420
Hoge
Juist
Duplicaten RCE(OSSINDEX)
-
CVE-2017-15708
CVE-2017-15708
Hoge
Juist
Duplicaten RCE(OSSINDEX)
SONATYPE-2015-0002
RCE (OSSINDEX)
RCE(OSSINDEX)
Hoge
TRUE
commons-fileupload:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
Hoge
TRUE
SONATYPE-2014-0173
-
-
Medium
TRUE
commons-beanutils:1.7.0
CVE-2014-0114
CVE-2014-0114
CVE-2014-0114
Hoge
TRUE
-
CVE-2019-10086
CVE-2019-10086
Hoge
Juist
De kwetsbaarheid is alleen van toepassing op versies 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
Hoge
TRUE
CVE-2019-2692
CVE-2019-2692
-
Medium
TRUE
-
CVE-2020-2875
-
Medium
Juist
Dezelfde kwetsbaarheid als CVE-2019-2692, maar met de opmerking “aanvallen kunnen aanzienlijke gevolgen hebben voor aanvullende producten”
-
CVE-2017-15945
-
Hoge
Juist
Niet relevant voor mysql-connector-java
-
CVE-2020-2933
-
Laag
Juist
Duplicaat van CVE-2020-2934
CVE-2020-2934
CVE-2020-2934
-
Medium
TRUE
veer-expressie:3.0.5
CVE-2018-1270
onderdeel niet gevonden
-
Hoge
TRUE
CVE-2018-1257
-
-
Medium
TRUE
veerweb: 3.0.5
CVE-2016-1000027
onderdeel niet gevonden
-
Hoge
TRUE
CVE-2014-0225
-
CVE-2014-0225
Hoge
TRUE
CVE-2011-2730
-
-
Hoge
TRUE
-
-
CVE-2013-4152
Medium
TRUE
CVE-2018-1272
-
-
Hoge
TRUE
CVE-2020-5398
-
-
Hoge
TRUE
Een illustratief voorbeeld in het voordeel van IQ: “Het Sonatype-beveiligingsonderzoeksteam ontdekte dat deze kwetsbaarheid was geïntroduceerd in versie 3.0.2.RELEASE en niet in 5.0.x zoals vermeld in het advies.”
CVE-2013-6429
-
-
Medium
TRUE
CVE-2014-0054
-
CVE-2014-0054
Medium
TRUE
CVE-2013-6430
-
-
Medium
TRUE
lente-context:3.0.5
CVE-2011-2894
onderdeel niet gevonden
-
Medium
TRUE
veerkern: 3.0.5
-
CVE-2011-2730
CVE-2011-2730
Hoge
TRUE
CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
Medium
TRUE
-
-
CVE-2013-4152
Medium
Juist
Duplicaat van dezelfde kwetsbaarheid in spring-web
-
CVE-2013-4152
-
Medium
Juist
De kwetsbaarheid heeft betrekking op de spring-web-component
-
CVE-2013-6429
CVE-2013-6429
Medium
Juist
De kwetsbaarheid heeft betrekking op de spring-web-component
-
CVE-2013-6430
-
Medium
Juist
De kwetsbaarheid heeft betrekking op de spring-web-component
-
CVE-2013-7315
CVE-2013-7315
Medium
Juist
SPLIT van CVE-2013-4152. + De kwetsbaarheid heeft betrekking op de veerwebcomponent
-
CVE-2014-0054
CVE-2014-0054
Medium
Juist
De kwetsbaarheid heeft betrekking op de spring-web-component
-
CVE-2014-0225
-
Hoge
Juist
De kwetsbaarheid heeft betrekking op de spring-web-component
-
-
CVE-2014-0225
Hoge
Juist
Duplicaat van dezelfde kwetsbaarheid in spring-web
-
CVE-2014-1904
CVE-2014-1904
Medium
Juist
Het beveiligingslek heeft betrekking op de spring-web-mvc-component
-
CVE-2014-3625
CVE-2014-3625
Medium
Juist
Het beveiligingslek heeft betrekking op de spring-web-mvc-component
-
CVE-2016-9878
CVE-2016-9878
Hoge
Juist
Het beveiligingslek heeft betrekking op de spring-web-mvc-component
-
CVE-2018-1270
CVE-2018-1270
Hoge
Juist
Voor lente-expressie/lente-berichten
-
CVE-2018-1271
CVE-2018-1271
Medium
Juist
Het beveiligingslek heeft betrekking op de spring-web-mvc-component
-
CVE-2018-1272
CVE-2018-1272
Hoge
TRUE
CVE-2014-3578
CVE-2014-3578 (OSSINDEX)
CVE-2014-3578
Medium
TRUE
SONATYPE-2015-0327
-
-
Laag
TRUE
struts2-config-browserplugin:2.3.30
SONATYPE-2016-0104
-
-
Medium
TRUE
lente-tx:3.0.5
-
CVE-2011-2730
-
Hoge
Juist
De kwetsbaarheid is niet specifiek voor spring-tx
-
CVE-2011-2894
-
Hoge
Juist
De kwetsbaarheid is niet specifiek voor spring-tx
-
CVE-2013-4152
-
Medium
Juist
De kwetsbaarheid is niet specifiek voor spring-tx
-
CVE-2013-6429
-
Medium
Juist
De kwetsbaarheid is niet specifiek voor spring-tx
-
CVE-2013-6430
-
Medium
Juist
De kwetsbaarheid is niet specifiek voor spring-tx
-
CVE-2013-7315
-
Medium
Juist
De kwetsbaarheid is niet specifiek voor spring-tx
-
CVE-2014-0054
-
Medium
Juist
De kwetsbaarheid is niet specifiek voor spring-tx
-
CVE-2014-0225
-
Hoge
Juist
De kwetsbaarheid is niet specifiek voor spring-tx
-
CVE-2014-1904
-
Medium
Juist
De kwetsbaarheid is niet specifiek voor spring-tx
-
CVE-2014-3625
-
Medium
Juist
De kwetsbaarheid is niet specifiek voor spring-tx
-
CVE-2016-9878
-
Hoge
Juist
De kwetsbaarheid is niet specifiek voor spring-tx
-
CVE-2018-1270
-
Hoge
Juist
De kwetsbaarheid is niet specifiek voor spring-tx
-
CVE-2018-1271
-
Medium
Juist
De kwetsbaarheid is niet specifiek voor spring-tx
-
CVE-2018-1272
-
Medium
Juist
De kwetsbaarheid is niet specifiek voor spring-tx
stutten-kern: 1.3.8
-
CVE-2011-5057 (OSSINDEX)
Medium
FASLE
Kwetsbaarheid voor struts 2
-
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
Hoge
Juist
Kwetsbaarheid voor struts 2
-
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
Medium
Juist
Kwetsbaarheid voor struts 2
-
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
Hoge
Juist
Kwetsbaarheid voor struts 2
CVE-2016-1182
3VE-2016-1182
-
Hoge
TRUE
-
-
CVE-2011-5057
Medium
Juist
Kwetsbaarheid voor struts 2
-
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
Hoge
Juist
Kwetsbaarheid voor struts 2
-
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
Medium
Juist
Kwetsbaarheid voor struts 2
CVE-2015-0899
CVE-2015-0899
-
Hoge
TRUE
-
CVE-2012-0394
CVE-2012-0394
Medium
Juist
Kwetsbaarheid voor struts 2
-
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
Hoge
Juist
Kwetsbaarheid voor struts 2
-
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
Hoge
Juist
Kwetsbaarheid voor struts 2
-
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
Hoge
FASLE
Kwetsbaarheid voor struts 2
-
CVE-2013-2115
CVE-2013-2115
Hoge
FASLE
Kwetsbaarheid voor struts 2
-
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
Hoge
FASLE
Kwetsbaarheid voor struts 2
-
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
Hoge
FASLE
Kwetsbaarheid voor struts 2
CVE-2014-0114
CVE-2014-0114
-
Hoge
TRUE
-
CVE-2015-2992
CVE-2015-2992
Medium
Juist
Kwetsbaarheid voor struts 2
-
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
Hoge
Juist
Kwetsbaarheid voor struts 2
CVE-2016-1181
CVE-2016-1181
-
Hoge
TRUE
-
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
Hoge
Juist
Kwetsbaarheid voor struts 2
xwork-kern: 2.3.30
CVE-2017-9804
-
-
Hoge
TRUE
SONATYPE-2017-0173
-
-
Hoge
TRUE
CVE-2017-7672
-
-
Hoge
Juist
Duplicaat van CVE-2017-9804
SONATYPE-2016-0127
-
-
Hoge
TRUE
stutten2-kern:2.3.30
-
CVE-2016-6795
CVE-2016-6795
Hoge
TRUE
-
CVE-2017-9787
CVE-2017-9787
Hoge
TRUE
-
CVE-2017-9791
CVE-2017-9791
Hoge
TRUE
-
CVE-2017-9793
-
Hoge
Juist
Duplicaat van CVE-2018-1327
-
CVE-2017-9804
-
Hoge
TRUE
-
CVE-2017-9805
CVE-2017-9805
Hoge
TRUE
CVE-2016-4003
-
-
Medium
Juist
Van toepassing op Apache Struts 2.x tot en met 2.3.28, dat is versie 2.3.30. Op basis van de beschrijving is de CVE echter geldig voor elke versie van Struts 2 als JRE 1.7 of lager wordt gebruikt. Blijkbaar hebben ze besloten ons hier te herverzekeren, maar het lijkt meer op FALSE
-
CVE-2018-1327
CVE-2018-1327
Hoge
TRUE
CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
Hoge
TRUE
Dezelfde kwetsbaarheid waar Equifax-hackers in 2017 misbruik van maakten
CVE-2017-12611
CVE-2017-12611
-
Hoge
TRUE
CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
Hoge
TRUE
struts-taglib:1.3.8
-
CVE-2012-0394
-
Medium
Juist
Voor stutten2-kern
-
CVE-2013-2115
-
Hoge
Juist
Voor stutten2-kern
-
CVE-2014-0114
-
Hoge
Juist
Voor commons-beanutils
-
CVE-2015-0899
-
Hoge
Juist
Geldt niet voor taglib
-
CVE-2015-2992
-
Medium
Juist
Verwijst naar struts2-core
-
CVE-2016-1181
-
Hoge
Juist
Geldt niet voor taglib
-
CVE-2016-1182
-
Hoge
Juist
Geldt niet voor taglib
stutten-tegels-1.3.8
-
CVE-2012-0394
-
Medium
Juist
Voor stutten2-kern
-
CVE-2013-2115
-
Hoge
Juist
Voor stutten2-kern
-
CVE-2014-0114
-
Hoge
Juist
Onder commons-beanutils
-
CVE-2015-0899
-
Hoge
Juist
Geldt niet voor tegels
-
CVE-2015-2992
-
Medium
Juist
Voor stutten2-kern
-
CVE-2016-1181
-
Hoge
Juist
Geldt niet voor taglib
-
CVE-2016-1182
-
Hoge
Juist
Geldt niet voor taglib
Bron: www.habr.com