DevSecOps: principes van werking en vergelijking van SCA. Deel één

De betekenis van Software Composition Analysis (SCA) in het ontwikkelingsproces groeit naarmate er jaarlijkse rapporten over kwetsbaarheden in open source bibliotheken verschijnen, gepubliceerd door bedrijven als Synopsys, Sonatype, Snyk en White Source. Volgens het rapport De Staat van Open Source Beveiligingskwetsbaarheden 2020 is het aantal ontdekte kwetsbaarheden in open source in 2019 bijna met 1,5 keer gestegen vergeleken met het voorgaande jaar, terwijl componenten met open source in 60% tot 80% van de projecten worden gebruikt. Volgens onafhankelijke bronnen zijn SCA-processen een aparte praktijk binnen OWASP SAMM en BSIMM als een maatstaf voor volwassenheid. In de eerste helft van 2020 heeft OWASP een nieuwe standaard gepubliceerd, de OWASP Software Component Verification Standard (SCVS), die best practices biedt voor het verifiëren van externe componenten in de softwareleveringsketen.

DevSecOps: principes van werking en vergelijking van SCA. Deel één

Een van de meest significante gevallen vond plaats met het bedrijf Equifax in mei 2017. Onbekende aanvallers verkregen toegang tot de informatie van 143 miljoen Amerikanen, waaronder volledige namen, adressen, sociale zekerheidsnummers en rijbewijzen. In 209.000 gevallen werd ook informatie over de creditcards van de slachtoffers vermeld. Deze datalek vond plaats als gevolg van de exploitatie van een kritieke kwetsbaarheid in Apache Struts 2 (CVE-2017-5638), terwijl de patch al in maart 2017 was vrijgegeven. Het bedrijf had twee maanden om de update te installeren, maar niemand maakte zich hier zorgen over.

In dit artikel zal de keuze van een SCA-tool worden besproken vanuit het perspectief van de kwaliteit van de analyse-resultaten. Ook zal er een functionele vergelijking van de tools worden gepresenteerd. Het proces van integratie in CI/CD en integratiemogelijkheden zullen we in toekomstige publicaties behandelen. Een uitgebreide lijst van tools is gepresenteerd door OWASP op hun website, maar in deze review zullen we alleen ingaan op de meest populaire open source tool Dependency Check, de iets minder bekende open source platform Dependency Track en de Enterprise-oplossing Sonatype Nexus IQ. We zullen ook bekijken hoe deze oplossingen werken en de verkregen resultaten vergelijken op valse positieven.

DevSecOps: principes van werking en vergelijking van SCA. Deel één

Werking principe

Dependency Check — is a utility (CLI, maven, jenkins module, ant) that analyzes project files, collects fragments of information about dependencies (package name, groupid, specification title, version…), constructs a CPE string — (Common Platform Enumeration), Package URL (PURL), and detects vulnerabilities for CPE/PURL from databases (NVD, Sonatype OSS Index, NPM Audit API…), and then generates a one-time report in HTML, JSON, XML format…

Let’s take a look at what CPE looks like:

cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other

  • Part: Indication of whether the component relates to an application (a), operating system (o), hardware (h) (Mandatory field)
  • Vendor: The name of the product manufacturer (Mandatory field)
  • Product: The name of the product (Mandatory field)
  • Versie: Version of the component (Deprecated field)
  • Update: Package update
  • Edition: Inherited version (Deprecated field)
  • Language: The language defined in RFC-5646
  • SW Edition: Software version
  • Target SW: The software environment in which the product operates
  • Target HW: The hardware environment in which the product operates
  • Other: Information about the supplier or product

An example of CPE looks as follows:

cpe:2.3:a:pivotal_software:spring_framework:3.0.0:*:*:*:*:*:*:*

The string means that CPE version 2.3 describes an application component from the manufacturer pivotal_software with the name spring_framework version 3.0.0. If we look up the vulnerability CVE-2014-0225 in the NVD, we can see this CPE mentioned. The first issue to immediately pay attention to is that the CVE in the NVD indicates a problem with the framework, not a specific component. That is, if developers are closely tied to the framework, and the identified vulnerability does not concern the modules used by developers, the security specialist will have to analyze this CVE and think about upgrading.

The URL is also used by SCA tools. The package URL format is as follows:

scheme:type/namespace/name@version?qualifiers#subpath

  • Scheme: Will always be 'pkg', indicating that this is a package URL (Mandatory field)
  • Type: The 'type' of the package or 'protocol' of the package, such as maven, npm, nuget, gem, pypi, etc. (Mandatory field)
  • Namespace: Some prefix of the name, like Maven group ID, Docker image owner, user or organization on GitHub. Optional and depends on the type.
  • Naam: Package name (Mandatory field)
  • Versie: Package version
  • Qualifiers: Aanvullende kwalificatiegegevens voor het pakket, zoals besturingssysteem, architectuur, distributie, enz. Optioneel en afhankelijk van het type item.
  • Subpad: Aanvullend pad in het pakket ten opzichte van de root van het pakket

Bijvoorbeeld:

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 — on-premise webplatform dat kant-en-klare Bill of Materials (BOM) accepteert CycloneDX en SPDX, dat wil zeggen kant-en-klare specificaties van bestaande afhankelijkheden. Dit is een XML-bestand met beschrijving van afhankelijkheden — naam, hashes, pakket-URL, uitgever, licentie. Vervolgens analyseert Dependency Track de BOM, bekijkt de vastgestelde afhankelijkheden met CVE's uit de kwetsbaarhedendatabase (NVD, Sonatype OSS Index …), waarna grafieken worden gebouwd en statistieken worden berekend, terwijl de status van kwantiteiten van componenten regelmatig wordt bijgewerkt.

Een voorbeeld van hoe een BOM in XML-formaat eruit kan zien:

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
    
      

De BOM kan niet alleen worden gebruikt als invoerparameters voor Dependency Track, maar ook voor het inventariseren van softwarecomponenten in de toeleveringsketen, bijvoorbeeld voor het verstrekken aan de softwareklant. In 2014 werd er in de VS zelfs een wet voorgesteld «Cyber Supply Chain Management and Transparency Act of 2014», die stelde dat bij de aanschaf van software elke overheidsinstantie een BOM moest aanvragen om het gebruik van kwetsbare componenten te voorkomen. Deze wet is echter nooit in werking getreden.

Terugkomend op SCA, heeft Dependency Track kant-en-klare integraties met notificatieplatforms zoals Slack, en kwetsbaarheidsbeheersystemen zoals Kenna Security. Het is ook vermeldenswaard dat Dependency Track bovendien verouderde versies van pakketten identificeert en informatie over licenties verstrekt (door ondersteuning voor SPDX).

Als we het specifiek hebben over de kwaliteit van SCA, dan is er een fundamenteel verschil.

Dependency Track accepteert geen project als invoer, maar accepteert specifiek een BOM. Dit betekent dat als we het project willen controleren, we eerst bom.xml moeten genereren, bijvoorbeeld met behulp van CycloneDX. Op die manier is Dependency Track direct afhankelijk van CycloneDX. Tegelijkertijd biedt dit mogelijkheden voor maatwerk. Zo heeft het OZON-team geschreven CycloneDX-module voor het genereren van BOM-bestanden voor projecten in Golang, met als doel verdere scanning via Dependency Track.

Nexus IQ is een commerciële SCA-oplossing van Sonatype, die deel uitmaakt van het Sonatype-ecosysteem, dat ook de Nexus Repository Manager omvat. Nexus IQ kan zowel WAR-archieven (voor Java-projecten) via de webinterface of API, als BOM accepteren, als uw organisatie niet op tijd is overgestapt van CycloneDX naar de nieuwe oplossing. In tegenstelling tot open-source oplossingen kijkt IQ niet alleen naar CP/PURL bij de geïdentificeerde component en de bijbehorende kwetsbaarheid in de database, maar houdt het ook rekening met eigen onderzoek, bijvoorbeeld de naam van de kwetsbare functie of klasse. De mechanismen van IQ zullen later worden besproken bij het analyseren van de resultaten.

Laten we een aantal conclusies trekken over de functionele kenmerken, evenals de ondersteunde talen voor analyse:

Taal
Nexus IQ
Dependency Check
Dependency Track

Java
+
+
+

C/C++
+
+
—

C#
+
+
—

.Net
+
+
+

Erlang
—
—
+

JavaScript (NodeJS)
+
+
+

PHP
+
+
+

Python
+
+
+

Ruby
+
+
+

Perl
—
—
—

Scala
+
+
+

Objective C
+
+
—

Swift
+
+
—

R
+
—
—

Go
+
+
+

Functionele mogelijkheden

Functionele mogelijkheden
Nexus IQ
Dependency Check
Dependency Track

De mogelijkheid om de componenten die in de broncode worden gebruikt op licentiegetrouwdheid te controleren
+
—
+

De mogelijkheid om kwetsbaarheden en licentiegetrouwdheid te scannen en analyseren voor Docker-images
+ Integratie met Clair
—
—

De mogelijkheid om een beveiligingsbeleid in te stellen voor het gebruik van open-source bibliotheken
+
—
—

De mogelijkheid om repositories met open source op kwetsbare componenten te scannen
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS
—
+ Hex, RubyGems, Maven, NPM, Nuget, Pypi

Aanwezigheid van een gespecialiseerde onderzoeksgroep
+
—
—

Werken in een gesloten omgeving
+
+
+

Gebruik van externe databases
+ Gesloten database van Sonatype
+ Sonatype OSS, NPM Public Advisors
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, ondersteuning voor een eigen kwetsbaarhedendatabase

De mogelijkheid om open-source componenten te filteren bij het proberen te uploaden in de ontwikkelingsomgeving volgens de geconfigureerde beleidsregels
+
—
—

Aanbevelingen voor het verhelpen van kwetsbaarheden, inclusief links naar oplossingen
+
+- (afhankelijk van de beschrijving in publieke databases)
+- (afhankelijk van de beschrijving in publieke databases)

Ranking van ontdekte kwetsbaarheden op basis van ernst
+
+
+

Rolmodel voor toegang
+
—
+

Ondersteuning voor de opdrachtregelinterface CLI
+
+
+- (alleen voor CycloneDX)

Selectie / sortering van kwetsbaarheden op gedefinieerde criteria
+
—
+

Dashboard voor de status van applicaties
+
—
+

Genereren van rapporten in PDF-formaat
+
—
—

Genereren van rapporten in JSONCSV-formaat
+
+
—

Ondersteuning voor de Russische taal
—
—
—

Integratiemogelijkheden

Integratie
Nexus IQ
Dependency Check
Dependency Track

Integratie met LDAP/Active Directory
+
—
+

Integratie met het continue integratiesysteem (continous integration) Bamboo
+
—
—

Integratie met het continue integratiesysteem (continous integration) TeamCity
+
—
—

Integratie met het continue integratiesysteem (continous integration) GitLab
+
+- (als een plugin voor GitLab)
+

Integratie met het continue integratiesysteem (continous integration) Jenkins
+
+
+

Beschikbaarheid van plugins voor IDE
+ IntelliJ, Eclipse, Visual Studio
—
—

Ondersteuning voor aangepaste integratie via webservices (API) van het instrument
+
—
+

Dependency Check

Eerste start

We zullen Dependency Check uitvoeren op een opzettelijk kwetsbare applicatie DVJA.

Hiervoor gebruiken we Dependency Check Maven Plugin:

mvn org.owasp:dependency-check-maven:check

Als resultaat zal er een dependency-check-report.html verschijnen in de directory target.

DevSecOps: principes van werking en vergelijking van SCA. Deel één

Laten we het bestand openen. Na de samenvatting van het totale aantal kwetsbaarheden kunnen we informatie zien over kwetsbaarheden met een hoge Severity en Confidence, met vermelding van het pakket, CPE, en het aantal CVE.

Daarna volgt meer gedetailleerde informatie, zoals de basis waarop de beslissing is genomen (evidence), dat wil zeggen een BOM.

DevSecOps: principes van werking en vergelijking van SCA. Deel één

Vervolgens zijn er CPE, PURL en een beschrijving van CVE. Aanbevelingen voor oplossingen zijn overigens niet bijgevoegd vanwege het gebrek daaraan in de NVD-database.

DevSecOps: principes van werking en vergelijking van SCA. Deel één

Voor systematische beoordeling van de scanresultaten kan Nginx met minimale instellingen worden geconfigureerd, of kunnen de verkregen defects worden verzonden naar een defect managementsysteem dat connectors naar Dependency Check ondersteunt. Bijvoorbeeld, Defect Dojo.

Dependency Track

Installatie

Dependency Track is op zijn beurt een webplatform met grafiekweergaven, dus de dringende kwestie van het opslaan van defects in een externe oplossing doet zich hier niet voor.
Voor installatie zijn de volgende ondersteunde scenario’s: Docker, WAR, Executable WAR.

Eerste start

Ga naar de URL van de draaiende service. Log in via admin/admin, wijzig gebruikersnaam en wachtwoord, waarna we op het Dashboard terechtkomen. Het volgende dat we zullen doen, is een project voor een testapplicatie in Java aanmaken in Home/Projects → Create Project . Als voorbeeld nemen we DVJA.

DevSecOps: principes van werking en vergelijking van SCA. Deel één

Aangezien Dependency Track alleen BOM’s als invoer kan accepteren, moet deze BOM worden verkregen. We maken gebruik van CycloneDX Maven Plugin:

mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom

We get bom.xml and upload the file in the created project DVJA → Dependencies → Upload BOM.

Let's go to Administration → Analyzers. We understand that we only have the Internal Analyzer enabled, which includes NVD. We will also connect Sonatype OSS Index.

DevSecOps: principes van werking en vergelijking van SCA. Deel één

Thus, we will get the following picture for our project:

DevSecOps: principes van werking en vergelijking van SCA. Deel één

Also, in the list, we can find one vulnerability applicable to Sonatype OSS:

DevSecOps: principes van werking en vergelijking van SCA. Deel één

The main disappointment was that Dependency Track no longer accepts xml reports from Dependency Check. The last supported versions of integration with Dependency Check were 1.0.0 – 4.0.2, while I was testing 5.3.2.

Hier is video's (en hier is), when it was still possible.

Nexus IQ

Eerste start

The installation of Nexus IQ is done from archives via de documentatie, but we collected a Docker image for this purpose.

After logging into the console, we need to create an Organization and an Application.

DevSecOps: principes van werking en vergelijking van SCA. Deel één

DevSecOps: principes van werking en vergelijking van SCA. Deel één

DevSecOps: principes van werking en vergelijking van SCA. Deel één

As can be seen, setting up IQ is somewhat more complex, as we also need to create policies applicable for different 'stages' (dev, build, stage, release). This is necessary to block vulnerable components as they progress through the pipeline closer to production or to block them as soon as they enter the Nexus Repo when downloaded by developers.

To feel the difference between open source and enterprise, we will perform the same scan through Nexus IQ similar to Maven plugin, first creating a test application in the NexusIQ interface dvja-test-and-compare:

mvn com.sonatype.clm:clm-maven-plugin:evaluate -Dclm.applicationId=dvja-test-and-compare -Dclm.serverUrl= -Dclm.username= -Dclm.password=

We go to the URL of the generated report in the IQ web interface:

DevSecOps: principes van werking en vergelijking van SCA. Deel één

Here you can see all policy violations with indications of various significance levels (from Info to Security Critical). The letter D next to a component indicates that the component is a Direct Dependency, while the letter T next to a component indicates that it is a Transitive Dependency.

By the way, the report State of Open Source Security Report 2020 from Snyk reports that more than 70% of open source vulnerabilities found in Node.js, Java, and Ruby are in transitive dependencies.

If you open one of the Nexus IQ policy violations, you can see a description of the component, as well as a Version Graph that shows the position of the current version on the timeline and when the vulnerability stops being a vulnerability. The height of the candles on the graph indicates the popularity of this component.

DevSecOps: principes van werking en vergelijking van SCA. Deel één

Als je naar het sectie van kwetsbaarheden gaat en de CVE opent, kun je de beschrijving van deze kwetsbaarheid lezen, aanbevelingen voor mitigatie en de reden waarom deze component in de schending valt, namelijk het bestaan van een klasse. DiskFileitem.class.

DevSecOps: principes van werking en vergelijking van SCA. Deel één

DevSecOps: principes van werking en vergelijking van SCA. Deel één

Laten we de resultaten samenvatten die betrekking hebben op externe Java-componenten, zonder js-componenten mee te tellen. We geven het aantal kwetsbaarheden dat buiten de NVD is gevonden tussen haakjes.

Totaal Nexus IQ:

  • Gescreende afhankelijkheden: 62
  • Kwetsbare afhankelijkheden: 16
  • Gevonden kwetsbaarheden: 42 (8 sonatype db)

Totaal Dependency Check:

  • Gescreende afhankelijkheden: 47
  • Kwetsbare afhankelijkheden: 13
  • Gevonden kwetsbaarheden: 91 (14 sonatype oss)

Totaal Dependency Track:

  • Gescreende afhankelijkheden: 59
  • Kwetsbare afhankelijkheden: 10
  • Gevonden kwetsbaarheden: 51 (1 sonatype oss)

In de volgende stap zullen we de verkregen resultaten analyseren en uitzoeken welke van deze kwetsbaarheden een werkelijk defect zijn en welke valse alarmen zijn.

Disclaimer

Deze beoordeling is geen onbetwistbare waarheid. De auteur had niet de bedoeling om een specifieke tool te onderscheiden van andere. Het doel van de beoordeling was om de werking van SCA-tools en manieren te tonen om hun resultaten te controleren.

Vergelijking van resultaten

Voorwaarden:

Een vals alarm met betrekking tot kwetsbaarheden van externe componenten is:

  • De discrepantie tussen de CVE en de geconstateerde component
  • Bijvoorbeeld, als de kwetsbaarheid is vastgesteld in het struts2-framework en de tool naar de struts-tiles-component verwijst, waartoe deze kwetsbaarheid niet behoort, dan is dit een false positive.
  • De discrepantie tussen de CVE en de geconstateerde versie van de component
  • Bijvoorbeeld, als de kwetsbaarheid is gekoppeld aan versie python > 3.5 en de tool versie 2.7 als kwetsbaar markeert — dit is een false positive, omdat de kwetsbaarheid in werkelijkheid alleen van toepassing is op de productlijn 3.x.
  • Duplicatie van CVE
  • Bijvoorbeeld, als de SCA op een CVE wijst die RCE mogelijk maakt, en vervolgens de SCA voor dezelfde component een CVE aangeeft die van toepassing is op Cisco-producten die aan deze RCE blootgesteld zijn, dan is dit een false positive.
  • Bijvoorbeeld, als de CVE is gevonden in de component spring-web, en de SCA vervolgens naar dezelfde CVE in andere componenten van het Spring Framework verwijst, terwijl de CVE geen betrekking heeft op andere componenten. In dit geval is dit een false positive.

Het onderzoek richtte zich op het Open Source-project DVJA. Alleen java-componenten werden in het onderzoek betrokken (zonder js).

Samenvattende resultaten

Laten we meteen naar de resultaten van de handmatige beoordeling van de vastgestelde kwetsbaarheden gaan. Het volledige rapport voor elke CVE is te vinden in de Bijlage.

Samenvattende resultaten van alle kwetsbaarheden:

Parameter
Nexus IQ
Dependency Check
Dependency Track

Totaal aantal gevonden kwetsbaarheden
42
91
51

Onjuist gevonden kwetsbaarheden (false positive)
2(4.76%)
62(68,13%)
29(56.86%)

Geen relevante kwetsbaarheden gevonden (false negative)
10
20
27

Samenvattende resultaten per component:

Parameter
Nexus IQ
Dependency Check
Dependency Track

Totaal aantal gevonden componenten
62
47
59

Totaal aantal kwetsbare componenten
16
13
10

Onjuist gevonden kwetsbare componenten (false positive)
1
5
0

Onjuist gevonden kwetsbare componenten (false positive)
0
6
6

We bouwen visuele grafieken om de verhouding van false positive en false negative ten opzichte van het totale aantal kwetsbaarheden te evalueren. Componenten zijn op de horizontale as gemarkeerd, en op de verticale as de kwetsbaarheden die hierin zijn gevonden.

DevSecOps: principes van werking en vergelijking van SCA. Deel één

DevSecOps: principes van werking en vergelijking van SCA. Deel één

DevSecOps: principes van werking en vergelijking van SCA. Deel één

Ter vergelijking: een soortgelijk onderzoek werd uitgevoerd door het Sonatype-team bij het testen van een project van 1531 componenten met behulp van OWASP Dependency Check. Zoals we kunnen zien, is de verhouding van ruis tot correct detecties vergelijkbaar met onze resultaten.

DevSecOps: principes van werking en vergelijking van SCA. Deel één
Bron: www.sonatype.com/why-precision-matters-ebook

Laten we enkele CVE's uit de resultaten van onze scan bekijken om de reden voor deze resultaten te begrijpen.

Meer informatie

№1

Laten we eerst enkele interessante punten van Sonatype Nexus IQ bespreken.

Nexus IQ wijst op een probleem met deserialisatie waarbij RCE uitgevoerd kan worden in Spring Framework meerdere keren. CVE-2016-1000027 in spring-web:3.0.5 voor de eerste keer, en CVE-2011-2894 in spring-context:3.0.5 en spring-core:3.0.5. Het lijkt aanvankelijk alsof er een duplicatie van kwetsbaarheden over verschillende CVE's plaatsvindt. Want als we naar CVE-2016-1000027 en CVE-2011-2894 in de NVD-database kijken, lijkt het allemaal duidelijk.

Component
Kwetsbaarheid

spring-web:3.0.5
CVE-2016-1000027

spring-context:3.0.5
CVE-2011-2894

spring-core:3.0.5
CVE-2011-2894

Omschrijving CVE-2011-2894 uit de NVD:
DevSecOps: principes van werking en vergelijking van SCA. Deel één

Omschrijving CVE-2016-1000027 uit de NVD:
DevSecOps: principes van werking en vergelijking van SCA. Deel één

CVE-2011-2894 is op zichzelf vrij bekend. In het rapport White Source voor 2011 werd deze CVE erkend als een van de meest voorkomende. Beschrijvingen voor CVE-2016-100027 zijn over het algemeen weinig in de NVD te vinden, en deze is blijkbaar alleen toepasbaar voor Spring Framework 4.1.4. Laten we eens kijken naar referentie en hier wordt het allemaal steeds duidelijker. Uit de Tenable begrijpen we dat naast de kwetsbaarheid in RemoteInvocationSerializingExporter in CVE-2011-2894, de kwetsbaarheid ook voorkomt in HttpInvokerServiceExporter. Dit vertelt ons Nexus IQ:

DevSecOps: principes van werking en vergelijking van SCA. Deel één

Toch is er niets dergelijks in de NVD, waardoor Dependency Check en Dependency Track last hebben van false negatives.

Ook uit de beschrijving van CVE-2011-2894 kunnen we begrijpen dat de kwetsbaarheid echt aanwezig is in zowel spring-context:3.0.5 als spring-core:3.0.5. Bevestiging hiervan kan worden gevonden in een artikel van degene die deze kwetsbaarheid heeft ontdekt.

№2

Component
Kwetsbaarheid
Resultaat

struts2-core:2.3.30
CVE-2016-4003
FALSE

Als we de kwetsbaarheid CVE-2016-4003 bestuderen, begrijpen we dat deze al in versie 2.3.28 is opgelost, toch meldt Nexus IQ ons hierover. In de beschrijving van de kwetsbaarheid staat een opmerking:

DevSecOps: principes van werking en vergelijking van SCA. Deel één

Dat wil zeggen, de kwetsbaarheid bestaat alleen in combinatie met een verouderde versie van JRE, waarover we zijn gewaarschuwd. Desondanks beschouwen we dit als een valse positieve, hoewel het niet het ergste is.

№ 3

Component
Kwetsbaarheid
Resultaat

xwork-core:2.3.30
CVE-2017-9804
TRUE

xwork-core:2.3.30
CVE-2017-7672
FALSE

Als we de beschrijving van CVE-2017-9804 en CVE-2017-7672 bekijken, begrijpen we dat het probleem ligt in de URLValidator-klasse, waarbij CVE-2017-9804 voortvloeit uit CVE-2017-7672. Het bestaan van de tweede kwetsbaarheid voegt geen nuttige informatie toe, behalve dat de ernst ervan is gestegen naar hoog, daarom kan dit als overbodig lawaai worden beschouwd.

Over het algemeen zijn er geen andere valse positieven voor Nexus IQ gevonden.

№4

Er zijn verschillende punten die IQ onderscheiden van andere oplossingen.

Component
Kwetsbaarheid
Resultaat

spring-web:3.0.5
CVE-2020-5398
TRUE

CVE in NVD meldt dat het alleen van toepassing is op versies 5.2.x tot 5.2.3, 5.1.x tot 5.1.13, en versies 5.0.x tot 5.0.16, maar als we de beschrijving van CVE in Nexus IQ bekijken, zien we het volgende:
Advisory Deviation Notice: Het Sonatype beveiligingsonderzoekteam ontdekte dat deze kwetsbaarheid werd geïntroduceerd in versie 3.0.2.RELEASE en niet in 5.0.x zoals in de advisering staat.

Daarna volgt een PoC van deze kwetsbaarheid, die aangeeft dat deze aanwezig is in versie 3.0.5.

Valse negatieve meldingen worden naar Dependency Check en Dependency Track gestuurd.

№5

Laten we kijken naar de valse positieven voor Dependency Check en Dependency Track.

Dependency Check valt op omdat het de CVE weerspiegelt die betrekking hebben op het hele framework in NVD, in de componenten waaraan deze CVE niet van toepassing zijn. Dit betreft CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, die Dependency Check "heeft gekoppeld" aan struts-taglib:1.3.8 en struts-tiles-1.3.8. Deze componenten hebben niets te maken met wat in de CVE is beschreven - het afhandelen van verzoeken, het valideren van pagina's, enzovoort. Dit komt doordat het enige gemeenschappelijke tussen deze CVE en componenten alleen het framework is, waardoor Dependency Check dit als een kwetsbaarheid heeft beschouwd.

Een soortgelijke situatie doet zich voor met spring-tx:3.0.5, en een vergelijkbare situatie met struts-core:1.3.8. Voor struts-core ontdekte Dependency Check en Dependency Track veel kwetsbaarheden die in werkelijkheid relevant zijn voor struts2-core, dat in wezen een apart framework is. In dit geval heeft Nexus IQ de situatie correct begrepen en in de CVE die het heeft gegeven, aangegeven dat struts-core end of life is en dat er moet worden overgestapt naar struts2-core.

№6

In sommige situaties is het onterecht om duidelijke fouten in Dependency Check en Dependency Track 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, die door Dependency Check en Dependency Track aan spring-core:3.0.5 zijn toegewezen, behoren in werkelijkheid tot spring-web:3.0.5. Sommige van deze CVE's werden ook gevonden door Nexus IQ, echter heeft IQ ze correct toegewezen aan een andere component. Het feit dat deze kwetsbaarheden niet in spring-core zijn gevonden, betekent niet dat ze in het framework überhaupt niet bestaan, en open source tools hebben terecht op deze kwetsbaarheden gewezen (ze hebben gewoon een beetje gemist).

Conclusies

Zoals we kunnen zien biedt de handmatige beoordeling van de betrouwbaarheid van geïdentificeerde kwetsbaarheden geen eenduidige resultaten, wat leidt tot controverses. De resultaten zijn zodanig dat de oplossing van Nexus IQ de laagste valse-positieven ratio en de hoogste nauwkeurigheid heeft.

In de eerste plaats komt dit doordat het team van Sonatype de beschrijving van elke kwetsbaarheid (CVE) uit de NVD in hun databases heeft uitgebreid, waarbij ze de kwetsbaarheid tot op het niveau van klasse of functie voor de betreffende versie van de component hebben aangegeven, na extra onderzoek te hebben verricht (zoals het testen van kwetsbaarheden in oudere versies van de software).

Een belangrijk effect op de resultaten wordt ook veroorzaakt door die kwetsbaarheden die niet in de NVD zijn opgenomen, maar die desalniettemin in de database van Sonatype met het label SONATYPE aanwezig zijn. Volgens het rapport De Staat van Open Source Beveiligingskwetsbaarheden 2020 wordt 45% van de ontdekte kwetsbaarheden met open source software niet gerapporteerd in de NVD. Volgens de database van WhiteSource wordt slechts 29% van alle kwetsbaarheden met open source software, geregistreerd buiten de NVD, uiteindelijk daarin gepubliceerd, waardoor het zo belangrijk is om kwetsbaarheden ook in andere bronnen te zoeken.

Als resultaat levert Dependency Check een grote hoeveelheid ruis op, waarbij een deel van de kwetsbare componenten niet wordt opgemerkt. Dependency Track genereert minder ruis en identificeert een groot aantal componenten, wat visueel aangenamer is in de webinterface.

Toch blijkt uit de praktijk dat open source de eerste stap moet zijn op weg naar een volwassen DevSecOps. Het eerste waar je over moet nadenken bij het integreren van SCA in de ontwikkeling, zijn de processen. Dit houdt in dat je samen met het management en aangrenzende afdelingen nadenkt over hoe de ideale processen in jouw organisatie eruit moeten zien. Het kan zijn dat Dependency Check of Dependency Track in de beginfase alle zakelijke behoeften dekt, terwijl Enterprise-oplossingen een logisch vervolg zullen zijn vanwege de toenemende complexiteit van de ontwikkelde applicaties.

Bijlage A. Resultaten met betrekking tot componenten
Symbolen:

  • Hoog — kwetsbaarheden van hoge en kritische ernst in de component
  • Gemiddeld — kwetsbaarheden van gemiddelde ernst in de component
  • WAAR — Correct gedefinieerde kwetsbaarheid (True positive issue)
  • ONWAAR — Valse alarmen (False positive issue)

Component
Nexus IQ
Dependency Check
Dependency Track
Resultaat

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
component niet gevonden

TRUE

spring-web:3.0.5
High
component niet gevonden
High
TRUE

spring-context:3.0.5
Medium
component niet gevonden
—
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

Bijlage B. Resultaten met betrekking tot kwetsbaarheden
Symbolen:

  • Hoog — kwetsbaarheden van hoge en kritische ernst in de component
  • Gemiddeld — kwetsbaarheden van gemiddelde ernst in de component
  • WAAR — Correct gedefinieerde kwetsbaarheid (True positive issue)
  • ONWAAR — Valse alarmen (False positive issue)

Component
Nexus IQ
Dependency Check
Dependency Track
Ernst
Resultaat
Opmerking

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
Laag
TRUE

log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571
—
High
TRUE

—
CVE-2020-9488
—
Laag
TRUE

SONATYPE-2010-0053
—
—
High
TRUE

commons-collections:3.1
—
CVE-2015-6420
CVE-2015-6420
High
FALSE
Dupliceert RCE(OSSINDEX)

—
CVE-2017-15708
CVE-2017-15708
High
FALSE
Dupliceert 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
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
High
TRUE

CVE-2019-2692
CVE-2019-2692
—
Medium
TRUE

—
CVE-2020-2875
—
Medium
FALSE
Hetzelfde probleem als CVE-2019-2692, maar met de toevoeging 'aanvallen kunnen aanzienlijke invloed hebben op aanvullende producten'

—
CVE-2017-15945
—
High
FALSE
Niet van toepassing op mysql-connector-java

—
CVE-2020-2933
—
Laag
FALSE
Dupliceert CVE-2020-2934

CVE-2020-2934
CVE-2020-2934
—
Medium
TRUE

spring-expression:3.0.5
CVE-2018-1270
component niet gevonden
—
High
TRUE

CVE-2018-1257
—
—
Medium
TRUE

spring-web:3.0.5
CVE-2016-1000027
component niet gevonden
—
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
Een sprekend voorbeeld ter ondersteuning van IQ: 'Het beveiligingsonderzoekteam van Sonatype ontdekte dat deze kwetsbaarheid werd geïntroduceerd in versie 3.0.2.RELEASE en niet in 5.0.x zoals vermeld in de advies.'

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
component niet gevonden
—
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
Dupliceert dezezelfde kwetsbaarheid in spring-web

—
CVE-2013-4152
—
Medium
FALSE
De kwetsbaarheid is van toepassing op de component spring-web

—
CVE-2013-6429
CVE-2013-6429
Medium
FALSE
De kwetsbaarheid is van toepassing op de component spring-web

—
CVE-2013-6430
—
Medium
FALSE
De kwetsbaarheid is van toepassing op de component spring-web

—
CVE-2013-7315
CVE-2013-7315
Medium
FALSE
SPLIT van CVE-2013-4152. + De kwetsbaarheid is van toepassing op de component spring-web

—
CVE-2014-0054
CVE-2014-0054
Medium
FALSE
De kwetsbaarheid is van toepassing op de component spring-web

—
CVE-2014-0225
—
High
FALSE
De kwetsbaarheid is van toepassing op de component spring-web

—
—
CVE-2014-0225
High
FALSE
Dupliceert dezezelfde kwetsbaarheid in spring-web

—
CVE-2014-1904
CVE-2014-1904
Medium
FALSE
De kwetsbaarheid is van toepassing op de component spring-web-mvc

—
CVE-2014-3625
CVE-2014-3625
Medium
FALSE
De kwetsbaarheid is van toepassing op de component spring-web-mvc

—
CVE-2016-9878
CVE-2016-9878
High
FALSE
De kwetsbaarheid is van toepassing op de component spring-web-mvc

—
CVE-2018-1270
CVE-2018-1270
High
FALSE
Voor spring-expression / spring-messages

—
CVE-2018-1271
CVE-2018-1271
Medium
FALSE
De kwetsbaarheid is van toepassing op de component 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
—
—
Laag
TRUE

struts2-config-browser-plugin:2.3.30
SONATYPE-2016-0104
—
—
Medium
TRUE

spring-tx:3.0.5
—
CVE-2011-2730
—
High
FALSE
De kwetsbaarheid is niet van toepassing op spring-tx

—
CVE-2011-2894
—
High
FALSE
De kwetsbaarheid is niet van toepassing op spring-tx

—
CVE-2013-4152
—
Medium
FALSE
De kwetsbaarheid is niet van toepassing op spring-tx

—
CVE-2013-6429
—
Medium
FALSE
De kwetsbaarheid is niet van toepassing op spring-tx

—
CVE-2013-6430
—
Medium
FALSE
De kwetsbaarheid is niet van toepassing op spring-tx

—
CVE-2013-7315
—
Medium
FALSE
De kwetsbaarheid is niet van toepassing op spring-tx

—
CVE-2014-0054
—
Medium
FALSE
De kwetsbaarheid is niet van toepassing op spring-tx

—
CVE-2014-0225
—
High
FALSE
De kwetsbaarheid is niet van toepassing op spring-tx

—
CVE-2014-1904
—
Medium
FALSE
De kwetsbaarheid is niet van toepassing op spring-tx

—
CVE-2014-3625
—
Medium
FALSE
De kwetsbaarheid is niet van toepassing op spring-tx

—
CVE-2016-9878
—
High
FALSE
De kwetsbaarheid is niet van toepassing op spring-tx

—
CVE-2018-1270
—
High
FALSE
De kwetsbaarheid is niet van toepassing op spring-tx

—
CVE-2018-1271
—
Medium
FALSE
De kwetsbaarheid is niet van toepassing op spring-tx

—
CVE-2018-1272
—
Medium
FALSE
De kwetsbaarheid is niet van toepassing op spring-tx

struts-core:1.3.8
—
CVE-2011-5057 (OSSINDEX)

Medium
FOLSE
Kwetsbaarheid voor Struts 2

—
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
High
FALSE
Kwetsbaarheid voor Struts 2

—
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
Medium
FALSE
Kwetsbaarheid voor Struts 2

—
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
High
FALSE
Kwetsbaarheid voor Struts 2

CVE-2016-1182
3VE-2016-1182
—
High
TRUE

—
—
CVE-2011-5057
Medium
FALSE
Kwetsbaarheid voor Struts 2

—
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
High
FALSE
Kwetsbaarheid voor Struts 2

—
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
Medium
FALSE
Kwetsbaarheid voor Struts 2

CVE-2015-0899
CVE-2015-0899
—
High
TRUE

—
CVE-2012-0394
CVE-2012-0394
Medium
FALSE
Kwetsbaarheid voor Struts 2

—
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
High
FALSE
Kwetsbaarheid voor Struts 2

—
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
High
FALSE
Kwetsbaarheid voor Struts 2

—
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
High
FOLSE
Kwetsbaarheid voor Struts 2

—
CVE-2013-2115
CVE-2013-2115
High
FOLSE
Kwetsbaarheid voor Struts 2

—
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
High
FOLSE
Kwetsbaarheid voor Struts 2

—
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
High
FOLSE
Kwetsbaarheid voor Struts 2

CVE-2014-0114
CVE-2014-0114
—
High
TRUE

—
CVE-2015-2992
CVE-2015-2992
Medium
FALSE
Kwetsbaarheid voor Struts 2

—
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
High
FALSE
Kwetsbaarheid voor Struts 2

CVE-2016-1181
CVE-2016-1181
—
High
TRUE

—
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
High
FALSE
Kwetsbaarheid voor Struts 2

xwork-core:2.3.30
CVE-2017-9804
—
—
High
TRUE

SONATYPE-2017-0173
—
—
High
TRUE

CVE-2017-7672
—
—
High
FALSE
Dubbel voor 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
Duplicaat voor CVE-2018-1327

—
CVE-2017-9804
—
High
TRUE

—
CVE-2017-9805
CVE-2017-9805
High
TRUE

CVE-2016-4003
—
—
Medium
FALSE
Van toepassing op Apache Struts 2.x tot 2.3.28, terwijl de versie 2.3.30 is. Desondanks geldt, volgens de beschrijving, dat de CVE van toepassing is op alle versies van Struts 2, mits JRE 1.7 of lager wordt gebruikt. Het lijkt erop dat men hier extra voorzichtig wilde zijn, maar het lijkt meer op een FALSE melding.

—
CVE-2018-1327
CVE-2018-1327
High
TRUE

CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
High
TRUE
De kwetsbaarheid die door aanvallers werd benut bij Equifax in 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
Voor struts2-core

—
CVE-2013-2115
—
High
FALSE
Voor struts2-core

—
CVE-2014-0114
—
High
FALSE
Voor commons-beanutils

—
CVE-2015-0899
—
High
FALSE
Niet van toepassing op taglib

—
CVE-2015-2992
—
Medium
FALSE
Van toepassing op struts2-core

—
CVE-2016-1181
—
High
FALSE
Niet van toepassing op taglib

—
CVE-2016-1182
—
High
FALSE
Niet van toepassing op taglib

struts-tiles-1.3.8
—
CVE-2012-0394
—
Medium
FALSE
Voor struts2-core

—
CVE-2013-2115
—
High
FALSE
Voor struts2-core

—
CVE-2014-0114
—
High
FALSE
Onder commons-beanutils

—
CVE-2015-0899
—
High
FALSE
Niet van toepassing op tiles

—
CVE-2015-2992
—
Medium
FALSE
Voor struts2-core

—
CVE-2016-1181
—
High
FALSE
Niet van toepassing op taglib

—
CVE-2016-1182
—
High
FALSE
Niet van toepassing op taglib

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster