DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

Betydningen av analyse av tredjeparts programvarekomponenter (Software Composition Analysis - SCA) i utviklingsprosessen øker med utgivelsen av årlige rapporter om sårbarhetene til åpen kildekode-biblioteker, som er publisert av Synopsys, Sonatype, Snyk og White Source . Ifølge rapporten State of Open Source Security Vulnerabilities 2020 Antallet identifiserte sårbarheter med åpen kildekode i 2019 økte nesten 1.5 ganger sammenlignet med året før, mens åpen kildekode-komponenter brukes av 60 % til 80 % av prosjektene. På uavhengig grunnlag er SCA-prosesser en egen praksis for OWASP SAMM og BSIMM som en indikator på modenhet, og i første halvdel av 2020 ga OWASP ut den nye OWASP Software Component Verification Standard (SCVS), som gir beste praksis for å verifisere tredje- partskomponenter i forsyningskjeden BY.

DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

En av de mest illustrerende sakene skjedde med Equifax i mai 2017. Ukjente angripere innhentet informasjon om 143 millioner amerikanere, inkludert fullt navn, adresser, personnummer og førerkort. I 209 000 saker inneholdt dokumentene også informasjon om ofrenes bankkort. Denne lekkasjen oppsto som et resultat av utnyttelse av en kritisk sårbarhet i Apache Struts 2 (CVE-2017-5638), mens rettelsen ble utgitt tilbake i mars 2017. Selskapet hadde to måneder på seg til å installere oppdateringen, men ingen brydde seg om den.

Denne artikkelen vil diskutere spørsmålet om å velge et verktøy for å utføre SCA fra synspunktet om kvaliteten på analyseresultatene. En funksjonell sammenligning av verktøyene vil også bli gitt. Prosessen med integrering i CI/CD og integrasjonsfunksjoner vil bli overlatt til påfølgende publikasjoner. Et bredt spekter av verktøy ble presentert av OWASP på nettstedet ditt, men i den aktuelle anmeldelsen skal vi kun berøre det mest populære open source-verktøyet Dependency Check, den litt mindre kjente open source-plattformen Dependency Track og Enterprise-løsningen Sonatype Nexus IQ. Vi vil også forstå hvordan disse løsningene fungerer og sammenligne resultatene oppnådd for falske positive.

DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

Prinsippet om drift

Avhengighetssjekk er et verktøy (CLI, maven, jenkins-modul, ant) ​​som analyserer prosjektfiler, samler inn deler av informasjon om avhengigheter (pakkenavn, gruppeid, spesifikasjonstittel, versjon...), bygger en CPE-linje (Common Platform Enumeration) , Pakke URL ( PURL) og identifiserer sårbarheter for CPE/PURL fra databaser (NVD, Sonatype OSS Index, NPM Audit API...), hvoretter den bygger en engangsrapport i HTML, JSON, XML-format...

La oss se på hvordan CPE ser ut:

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

  • Del: Indikasjon på at komponenten er relatert til applikasjonen (a), operativsystem (o), maskinvare (h) (påkrevd)
  • Leverandør: Produktprodusentens navn (obligatorisk)
  • Produkt: Produktnavn (obligatorisk)
  • Versjon: Komponentversjon (foreldet vare)
  • Oppdatering: Pakkeoppdatering
  • Utgave: Eldre versjon (avviklet vare)
  • Språk: Språk definert i RFC-5646
  • SW-utgave: Programvareversjon
  • Mål SW: Programvaremiljø som produktet opererer i
  • Mål HW: Maskinvaremiljøet som produktet opererer i
  • Annen: Leverandør- eller produktinformasjon

Et eksempel på CPE ser slik ut:

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

Linjen betyr at CPE versjon 2.3 beskriver applikasjonskomponenten fra produsenten pivotal_software med tittelen spring_framework versjon 3.0.0. Hvis vi åpner en sårbarhet CVE-2014-0225 i NVD kan vi se en omtale av denne CPE. Det første problemet du umiddelbart bør være oppmerksom på er at CVE i NVD, ifølge CPE, rapporterer et problem i rammeverket, og ikke i en spesifikk komponent. Det vil si at hvis utviklere er tett knyttet til rammeverket, og den identifiserte sårbarheten ikke påvirker de modulene som utviklerne bruker, vil en sikkerhetsspesialist på en eller annen måte måtte demontere denne CVE og tenke på å oppdatere.

URL-en brukes også av SCA-verktøy. Pakkens URL-format er som følger:

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

  • Opplegg: Det vil alltid være 'pkg' som indikerer at dette er en pakke-URL (påkrevd)
  • Type: Pakkens "type" eller "protokollen" til pakken, for eksempel maven, npm, nuget, gem, pypi, etc. (Obligatorisk vare)
  • navnerom: Noen navneprefikser, for eksempel en Maven-gruppe-ID, Docker-bildeeier, GitHub-bruker eller organisasjon. Valgfritt og avhenger av typen.
  • Navn: Pakkenavn (påkrevd)
  • Versjon: Pakkeversjon
  • Kvalifisering: Ytterligere kvalifikasjonsdata for pakken, som OS, arkitektur, distribusjon osv. Valgfritt og typespesifikk.
  • Underbane: Ekstra bane i pakken i forhold til pakkeroten

For eksempel:

pkg:golang/google.golang.org/genproto#googleapis/api/annotations
pkg:maven/org.apache.commons/[email protected]
pkg:pypi/[email protected]

Avhengighetsspor — en lokal nettplattform som godtar ferdiglagde stykklister (BOM) CycloneDX и SPDX, det vil si ferdige spesifikasjoner om eksisterende avhengigheter. Dette er en XML-fil som beskriver avhengighetene - navn, hashes, pakke-url, utgiver, lisens. Deretter analyserer Dependency Track stykklisten, ser på CVE-ene som er tilgjengelige for de identifiserte avhengighetene fra sårbarhetsdatabasen (NVD, Sonatype OSS Index...), hvoretter det bygger grafer, beregner beregninger, og regelmessig oppdaterer data om sårbarhetsstatusen til komponenter. .

Et eksempel på hvordan en stykkliste kan se ut i XML-format:

<?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 brukes ikke bare som inngangsparametere for Dependency Track, men også for inventering av programvarekomponenter i forsyningskjeden, for eksempel for å levere programvare til en kunde. I 2014 ble det til og med foreslått en lov i USA "Cyber ​​Supply Chain Management and Transparency Act of 2014", som uttalte at ved kjøp av programvare, enhver stat. Institusjonen må be om en stykkliste for å hindre bruk av sårbare komponenter, men loven har ennå ikke trådt i kraft.

Tilbake til SCA har Dependency Track ferdige integrasjoner med varslingsplattformer som Slack, sårbarhetsstyringssystemer som Kenna Security. Det er også verdt å si at Dependency Track blant annet identifiserer utdaterte versjoner av pakker og gir informasjon om lisenser (grunnet SPDX-støtte).

Hvis vi snakker spesifikt om kvaliteten på SCA, så er det en grunnleggende forskjell.

Dependency Track godtar ikke prosjektet som input, men heller stykklisten. Dette betyr at hvis vi ønsker å teste prosjektet, må vi først generere bom.xml, for eksempel ved hjelp av CycloneDX. Dermed er Dependency Track direkte avhengig av CycloneDX. Samtidig gir det mulighet for tilpasning. Dette er hva OZON-teamet skrev CycloneDX-modul for å sette sammen BOM-filer for Golang-prosjekter for videre skanning gjennom Dependency Track.

Nexus IQ er en kommersiell SCA-løsning fra Sonatype, som er en del av Sonatype-økosystemet, som også inkluderer Nexus Repository Manager. Nexus IQ kan godta som input både krigsarkiver (for java-prosjekter) via nettgrensesnittet eller API, og BOM, hvis organisasjonen din ennå ikke har byttet fra CycloneDX til en ny løsning. I motsetning til åpen kildekode-løsninger refererer IQ ikke bare til CP/PURL til den identifiserte komponenten og den tilhørende sårbarheten i databasen, men tar også hensyn til egen forskning, for eksempel navnet på den sårbare funksjonen eller klassen. Mekanismene til IQ vil bli diskutert senere i analysen av resultatene.

La oss oppsummere noen av de funksjonelle funksjonene, og også vurdere de støttede språkene for analyse:

Språk
Nexus IQ
Avhengighetssjekk
Avhengighetsspor

Java
+
+
+

C / C ++
+
+
-

C#
+
+
-

. Net
+
+
+

erlang
-
-
+

JavaScript (NodeJS)
+
+
+

PHP
+
+
+

Python
+
+
+

Rubin
+
+
+

Perl
-
-
-

Skala
+
+
+

Mål C
+
+
-

Swift
+
+
-

R
+
-
-

Go
+
+
+

funksjonalitet

funksjonalitet
Nexus IQ
Avhengighetssjekk
Avhengighetsspor

Evnen til å sikre at komponentene som brukes i kildekoden kontrolleres for lisensiert renhet
+
-
+

Evne til å skanne og analysere for sårbarheter og lisensrenslighet for Docker-bilder
+ Integrasjon med Clair
-
-

Evne til å konfigurere sikkerhetspolicyer for å bruke åpen kildekode-biblioteker
+
-
-

Evne til å skanne åpen kildekodelagre for sårbare komponenter
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS
-
+ Hex, RubyGems, Maven, NPM, Nuget, Pypi

Tilgjengelighet av en spesialisert forskningsgruppe
+
-
-

Drift med lukket sløyfe
+
+
+

Bruke tredjeparts databaser
+ Lukket Sonatype-database
+ Sonatype OSS, NPM offentlige rådgivere
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, støtte for sin egen sårbarhetsdatabase

Evne til å filtrere åpen kildekode-komponenter når du prøver å laste inn i utviklingssløyfen i henhold til konfigurerte policyer
+
-
-

Anbefalinger for å fikse sårbarheter, tilgjengelighet av lenker til rettelser
+
+- (avhenger av beskrivelsen i offentlige databaser)
+- (avhenger av beskrivelsen i offentlige databaser)

Rangering av oppdagede sårbarheter etter alvorlighetsgrad
+
+
+

Rollebasert tilgangsmodell
+
-
+

CLI-støtte
+
+
+- (kun for CycloneDX)

Prøvetaking/sortering av sårbarheter etter definerte kriterier
+
-
+

Dashboard etter applikasjonsstatus
+
-
+

Generer rapporter i PDF-format
+
-
-

Genererer rapporter i JSONCSV-format
+
+
-

Støtte for russisk språk
-
-
-

Integrasjonsevner

integrering
Nexus IQ
Avhengighetssjekk
Avhengighetsspor

LDAP/Active Directory-integrasjon
+
-
+

Integrasjon med kontinuerlig integreringssystem Bamboo
+
-
-

Integrasjon med kontinuerlig integrasjonssystem TeamCity
+
-
-

Integrasjon med kontinuerlig integrasjonssystem GitLab
+
+- (som en plugin for GitLab)
+

Integrasjon med kontinuerlig integreringssystem Jenkins
+
+
+

Tilgjengelighet av plugins for IDE
+ IntelliJ, Eclipse, Visual Studio
-
-

Støtte for tilpasset integrasjon via web-tjenester (API) av verktøyet
+
-
+

Avhengighetssjekk

Første start

La oss kjøre avhengighetssjekk på en bevisst sårbar applikasjon DVJA.

Til dette vil vi bruke Avhengighetssjekk Maven Plugin:

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

Som et resultat vil dependency-check-report.html vises i målkatalogen.

DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

La oss åpne filen. Etter oppsummert informasjon om det totale antallet sårbarheter, kan vi se informasjon om sårbarheter med høy grad av alvorlighetsgrad og konfidens, som indikerer pakken, CPE og antall CVEer.

Deretter kommer mer detaljert informasjon, spesielt grunnlaget for beslutningen (bevis), det vil si en viss stykkliste.

DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

Deretter kommer CPE-, PURL- og CVE-beskrivelsen. Forresten, anbefalinger for korrigering er ikke inkludert på grunn av deres fravær i NVD-databasen.

DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

For å systematisk se skanneresultater kan du konfigurere Nginx med minimale innstillinger, eller sende de resulterende defektene til et defektbehandlingssystem som støtter koblinger til avhengighetssjekk. For eksempel Defect Dojo.

Avhengighetsspor

Installasjon

Dependency Track er på sin side en nettbasert plattform med visningsgrafer, så det presserende problemet med å lagre feil i en tredjepartsløsning dukker ikke opp her.
De støttede skriptene for installasjon er: Docker, WAR, Executable WAR.

Første start

Vi går til URL-en til den kjørende tjenesten. Vi logger inn via admin/admin, endrer innlogging og passord, og kommer så til Dashboard. Det neste vi skal gjøre er å lage et prosjekt for en testapplikasjon i Java i Hjem/Prosjekter → Opprett prosjekt . La oss ta DVJA som et eksempel.

DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

Siden Dependency Track kun kan akseptere stykkliste som input, må denne stykklisten hentes. La oss dra nytte CycloneDX Maven Plugin:

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

Vi henter bom.xml og laster filen i det opprettede prosjektet DVJA → Avhengigheter → Last opp stykkliste.

La oss gå til Administrasjon → Analysatorer. Vi forstår at vi bare har Internal Analyzer aktivert, som inkluderer NVD. La oss også koble til Sonatype OSS Index.

DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

Dermed får vi følgende bilde for prosjektet vårt:

DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

Også i listen kan du finne en sårbarhet som gjelder Sonatype OSS:

DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

Den største skuffelsen var at Dependency Track ikke lenger godtar Dependency Check xml-rapporter. De siste støttede versjonene av Dependency Check-integrasjonen var 1.0.0 - 4.0.2, mens jeg testet 5.3.2.

Her video (og her) da det fortsatt var mulig.

Nexus IQ

Første start

Installasjon av Nexus IQ kommer fra arkivene til dokumentasjon, men vi bygde et Docker-bilde for disse formålene.

Etter å ha logget på konsollen, må du opprette en organisasjon og applikasjon.

DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

Som du kan se, er oppsettet for IQ noe mer komplisert, fordi vi også må lage policyer som gjelder for forskjellige "stadier" (dev, build, stage, release). Dette er nødvendig for å blokkere sårbare komponenter når de beveger seg gjennom rørledningen nærmere produksjon, eller for å blokkere dem så snart de kommer inn i Nexus Repo når de lastes ned av utviklere.

For å føle forskjellen mellom åpen kildekode og bedrift, la oss utføre den samme skanningen gjennom Nexus IQ på samme måte gjennom Maven-plugin, etter å ha opprettet en testapplikasjon i NexusIQ-grensesnittet 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>

Følg URL-en til den genererte rapporten i IQ-nettgrensesnittet:

DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

Her kan du se alle brudd på retningslinjene som indikerer ulike betydningsnivåer (fra info til sikkerhetskritisk). Bokstaven D ved siden av komponenten betyr at komponenten er direkte avhengighet, og bokstaven T ved siden av komponenten betyr at komponenten er transitiv avhengighet, det vil si at den er transitiv.

Forresten rapporten State of Open Source Security Report 2020 fra Snyk rapporterer at mer enn 70 % av åpen kildekode-sårbarheter oppdaget i Node.js, Java og Ruby er i transitive avhengigheter.

Hvis vi åpner et av bruddene på Nexus IQ-retningslinjene, kan vi se en beskrivelse av komponenten, samt en versjonsgraf, som viser plasseringen av den gjeldende versjonen i tidsgrafen, samt på hvilket tidspunkt sårbarheten opphører. være sårbar. Høyden på lysene på grafen viser populariteten til å bruke denne komponenten.

DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

Hvis du går til sårbarhetsdelen og utvider CVE, kan du lese en beskrivelse av denne sårbarheten, anbefalinger for eliminering, samt årsaken til at denne komponenten ble krenket, det vil si tilstedeværelsen av klassen DiskFileitem.class.

DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

La oss bare oppsummere de som er relatert til tredjeparts Java-komponenter, og fjerner js-komponentene. I parentes angir vi antall sårbarheter som ble funnet utenfor NVD.

Total Nexus IQ:

  • Skannet avhengigheter: 62
  • Sårbare avhengigheter: 16
  • Sårbarheter funnet: 42 (8 sonatype db)

Total avhengighetssjekk:

  • Skannet avhengigheter: 47
  • Sårbare avhengigheter: 13
  • Sårbarheter funnet: 91 (14 sonatype oss)

Total avhengighetsspor:

  • Skannet avhengigheter: 59
  • Sårbare avhengigheter: 10
  • Sårbarheter funnet: 51 (1 sonatype oss)

I de neste trinnene vil vi analysere resultatene som er oppnådd og finne ut hvilke av disse sårbarhetene som er en reell defekt og som er en falsk positiv.

Ansvarsfraskrivelse

Denne anmeldelsen er ikke en udiskutabel sannhet. Forfatteren hadde ikke som mål å fremheve et eget virkemiddel mot andres bakgrunn. Hensikten med gjennomgangen var å vise mekanismene for drift av SCA-verktøy og måter å sjekke resultatene på.

Sammenligning av resultater

Vilkår og betingelser:

En falsk positiv for sårbarheter i tredjepartskomponenter er:

  • CVE-mismatch til identifisert komponent
  • For eksempel, hvis en sårbarhet er identifisert i struts2-rammeverket, og verktøyet peker på en komponent av struts-tiles-rammeverket, som denne sårbarheten ikke gjelder, så er dette en falsk positiv
  • CVE samsvarer ikke med den identifiserte versjonen av komponenten
  • For eksempel er sårbarheten knyttet til python-versjon > 3.5 og verktøyet markerer versjon 2.7 som sårbar - dette er en falsk positiv, siden sårbarheten faktisk bare gjelder 3.x-produktgrenen
  • Dupliser CVE
  • For eksempel, hvis SCA spesifiserer en CVE som aktiverer en RCE, spesifiserer SCA en CVE for den samme komponenten som gjelder for Cisco-produkter som er berørt av den RCE. I dette tilfellet vil den være falsk positiv.
  • For eksempel ble en CVE funnet i en spring-web-komponent, hvoretter SCA peker på den samme CVE i andre komponenter i Spring Framework, mens CVE ikke har noe med andre komponenter å gjøre. I dette tilfellet vil den være falsk positiv.

Formålet med studien var Open Source-prosjektet DVJA. Studien involverte kun java-komponenter (uten js).

Oppsummeringsresultater

La oss gå rett til resultatene av en manuell gjennomgang av identifiserte sårbarheter. Den fullstendige rapporten for hver CVE finnes i vedlegget.

Oppsummeringsresultater for alle sårbarheter:

Parameter
Nexus IQ
Avhengighetssjekk
Avhengighetsspor

Totale sårbarheter identifisert
42
91
51

Feil identifiserte sårbarheter (falsk positiv)
2 (4.76%)
62 (68,13%)
29 (56.86%)

Ingen relevante sårbarheter funnet (falsk negativ)
10
20
27

Sammendrag av resultater etter komponent:

Parameter
Nexus IQ
Avhengighetssjekk
Avhengighetsspor

Totalt identifisert komponenter
62
47
59

Totalt sårbare komponenter
16
13
10

Feil identifiserte sårbare komponenter (falsk positiv)
1
5
0

Feil identifiserte sårbare komponenter (falsk positiv)
0
6
6

La oss bygge visuelle grafer for å evaluere forholdet mellom falske positive og falske negative til det totale antallet sårbarheter. Komponenter er merket horisontalt, og sårbarheter identifisert i dem er merket vertikalt.

DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

Til sammenligning ble en lignende studie utført av Sonatype-teamet som testet et prosjekt med 1531 komponenter ved bruk av OWASP Dependency Check. Som vi kan se, er forholdet mellom støy og korrekte svar sammenlignbart med resultatene våre.

DevSecOps: prinsipper for drift og sammenligning av SCA. Del en
Kilde: www.sonatype.com/why-precision-matters-ebook

La oss se på noen CVE-er fra skanneresultatene våre for å forstå årsaken til disse resultatene.

Mer

№ 1

La oss først se på noen interessante punkter om Sonatype Nexus IQ.

Nexus IQ påpeker et problem med deserialisering med muligheten til å utføre RCE i Spring Framework flere ganger. CVE-2016-1000027 i spring-web:3.0.5 første gang, og CVE-2011-2894 i spring-context:3.0.5 og spring-core:3.0.5. Til å begynne med ser det ut til at det er duplisering av sårbarhet på tvers av flere CVE-er. For hvis du ser på CVE-2016-1000027 og CVE-2011-2894 i NVD-databasen, ser det ut til at alt er åpenbart

komponent
Sårbarhet

spring-web:3.0.5
CVE-2016-1000027

vårkontekst:3.0.5
CVE-2011-2894

fjærkjerne:3.0.5
CVE-2011-2894

beskrivelse CVE-2011-2894 fra NVD:
DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

beskrivelse CVE-2016-1000027 fra NVD:
DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

CVE-2011-2894 i seg selv er ganske kjent. I rapporten White Source 2011 denne CVE ble anerkjent som en av de vanligste. Beskrivelser for CVE-2016-100027 er i prinsippet få i NVD, og ​​det ser ut til å kun gjelde for Spring Framework 4.1.4. La oss ta en titt på referanse og her blir alt mer eller mindre klart. Fra Holdbare artikler Vi forstår at i tillegg til sårbarheten i RemoteInvocationSerializingExporter i CVE-2011-2894 er sårbarheten observert i HttpInvokerServiceExporter. Dette er hva Nexus IQ forteller oss:

DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

Imidlertid er det ingenting som dette i NVD, og ​​det er grunnen til at Dependency Check og Dependency Track hver mottar falsk negativ.

Også fra beskrivelsen av CVE-2011-2894 kan det forstås at sårbarheten faktisk er tilstede i både spring-context:3.0.5 og spring-core:3.0.5. Bekreftelse på dette finner du i en artikkel fra personen som fant denne sårbarheten.

№ 2

komponent
Sårbarhet
Resultat

stivere2-kjerne:2.3.30
CVE-2016-4003
FALSK

Hvis vi studerer sårbarheten CVE-2016-4003, vil vi forstå at den ble fikset i versjon 2.3.28, men Nexus IQ rapporterer det til oss. Det er en merknad i beskrivelsen av sårbarheten:

DevSecOps: prinsipper for drift og sammenligning av SCA. Del en

Det vil si at sårbarheten eksisterer kun i forbindelse med en utdatert versjon av JRE, som de bestemte seg for å advare oss om. Ikke desto mindre anser vi dette som falskt positivt, selv om det ikke er det verste.

# 3

komponent
Sårbarhet
Resultat

xwork-core:2.3.30
CVE-2017-9804
TRUE

xwork-core:2.3.30
CVE-2017-7672
FALSK

Hvis vi ser på beskrivelsene av CVE-2017-9804 og CVE-2017-7672, vil vi forstå at problemet er URLValidator class, med CVE-2017-9804 som stammer fra CVE-2017-7672. Tilstedeværelsen av den andre sårbarheten har ingen nyttig belastning annet enn det faktum at alvorlighetsgraden har økt til Høy, så vi kan vurdere det som unødvendig støy.

Totalt sett ble det ikke funnet andre falske positiver for Nexus IQ.

№ 4

Det er flere ting som gjør at IQ skiller seg ut fra andre løsninger.

komponent
Sårbarhet
Resultat

spring-web:3.0.5
CVE-2020-5398
TRUE

CVE i NVD sier at det kun gjelder versjoner 5.2.x før 5.2.3, 5.1.x før 5.1.13, og versjoner 5.0.x før 5.0.16, men hvis vi ser på CVE-beskrivelsen i Nexus IQ , så vil vi se følgende:
Advisory Deviation Notice: Sonatypes sikkerhetsforskningsteam oppdaget at dette sikkerhetsproblemet ble introdusert i versjon 3.0.2.RELEASE og ikke 5.0.x som angitt i veiledningen.

Dette etterfølges av en PoC for denne sårbarheten, som sier at den er til stede i versjon 3.0.5.

Falsk negativ sendes til Dependency Check og Dependency Track.

№ 5

La oss se på falsk positiv for Dependency Check og Dependency Track.

Dependency Check skiller seg ut ved at den reflekterer de CVE-ene som gjelder for hele rammeverket i NVD for de komponentene som disse CVE-ene ikke gjelder. Dette gjelder CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, hvilken avhengighetssjekk ” til struts-taglib:1.3.8 og struts-tiles-1.3.8. Disse komponentene har ingenting å gjøre med det som er beskrevet i CVE - forespørselsbehandling, sidevalidering og så videre. Dette skyldes det faktum at det som disse CVE-ene og komponentene har til felles, kun er rammeverket, og det er derfor Dependency Check anså det som en sårbarhet.

Samme situasjon er med spring-tx:3.0.5, og en lignende situasjon med struts-core:1.3.8. For struts-core har Dependency Check og Dependency Track funnet mange sårbarheter som faktisk gjelder for struts2-core, som egentlig er et eget rammeverk. I dette tilfellet forsto Nexus IQ bildet riktig, og i CVE-ene den utstedte, indikerte det at struts-core hadde nådd slutten av livet, og det var nødvendig å flytte til struts2-core.

№ 6

I noen situasjoner er det urettferdig å tolke en åpenbar feil i avhengighetssjekk og avhengighetssporing. Spesielt CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, hvilke sporingskontroller og avhengighet tilskrevet spring-core:3.0.5 tilhører faktisk spring-web:3.0.5. Samtidig ble noen av disse CVE-ene også funnet av Nexus IQ, men IQ identifiserte dem riktig til en annen komponent. Fordi disse sårbarhetene ikke ble funnet i spring-core, kan det ikke hevdes at de ikke er i rammeverket i prinsippet, og open source-verktøy påpekte med rette disse sårbarhetene (de bommet bare litt).

Funn

Som vi kan se, gir det ikke entydige resultater å bestemme påliteligheten til identifiserte sårbarheter ved manuell gjennomgang, og det er grunnen til at kontroversielle problemer oppstår. Resultatene er at Nexus IQ-løsningen har den laveste antallet falske positiver og den høyeste nøyaktigheten.

For det første skyldes dette at Sonatype-teamet utvidet beskrivelsen for hver CVE-sårbarhet fra NVD i databasene, og indikerte sårbarhetene for en bestemt versjon av komponentene ned til klassen eller funksjonen, og utførte ytterligere undersøkelser (for eksempel , sjekker sårbarheter på eldre programvareversjoner).

En viktig innflytelse på resultatene spilles også av de sårbarhetene som ikke var inkludert i NVD, men som likevel finnes i Sonatype-databasen med SONATYPE-merket. Ifølge rapporten State of Open Source Security Vulnerabilities 2020 45 % av oppdagede sårbarheter med åpen kildekode rapporteres ikke til NVD. I følge WhiteSource-databasen ender bare 29 % av alle åpen kildekode-sårbarheter rapportert utenfor NVD opp publisert der, og det er derfor det er viktig å se etter sårbarheter i andre kilder også.

Som et resultat produserer Dependency Check mye støy, og mangler noen sårbare komponenter. Dependency Track produserer mindre støy og oppdager et stort antall komponenter, noe som ikke visuelt skader øynene i webgrensesnittet.

Praksis viser imidlertid at åpen kildekode bør bli de første skrittene mot modne DevSecOps. Det første du bør tenke på når du integrerer SCA i utvikling er prosesser, nemlig å tenke sammen med ledelsen og relaterte avdelinger om hvordan ideelle prosesser skal se ut i din organisasjon. Det kan vise seg at for din organisasjon vil Dependency Check eller Dependency Track først dekke alle forretningsbehov, og Enterprise-løsninger vil være en logisk fortsettelse på grunn av den økende kompleksiteten til applikasjonene som utvikles.

Vedlegg A: Komponentresultater
Legend:

  • Svakheter på høyt og kritisk nivå i komponenten
  • Middels — Sårbarheter med middels kritikalitetsnivå i komponenten
  • TRUE — Ekte positiv sak
  • FALSE — Falsk positiv sak

komponent
Nexus IQ
Avhengighetssjekk
Avhengighetsspor
Resultat

dom4j: 1.6.1
Høy
Høy
Høy
TRUE

log4j-kjerne: 2.3
Høy
Høy
Høy
TRUE

log4j: 1.2.14
Høy
Høy
-
TRUE

fellessamlinger:3.1
Høy
Høy
Høy
TRUE

commons-fileupload:1.3.2
Høy
Høy
Høy
TRUE

commons-beanutils:1.7.0
Høy
Høy
Høy
TRUE

commons-codec:1:10
Medium
-
-
TRUE

mysql-connector-java:5.1.42
Høy
Høy
Høy
TRUE

fjæruttrykk:3.0.5
Høy
komponent ikke funnet

TRUE

spring-web:3.0.5
Høy
komponent ikke funnet
Høy
TRUE

vårkontekst:3.0.5
Medium
komponent ikke funnet
-
TRUE

fjærkjerne:3.0.5
Medium
Høy
Høy
TRUE

struts2-config-browser-plugin:2.3.30
Medium
-
-
TRUE

spring-tx:3.0.5
-
Høy
-
FALSK

stag-kjerne:1.3.8
Høy
Høy
Høy
TRUE

xwork-core: 2.3.30
Høy
-
-
TRUE

struts2-core: 2.3.30
Høy
Høy
Høy
TRUE

struts-taglib:1.3.8
-
Høy
-
FALSK

stag-fliser-1.3.8
-
Høy
-
FALSK

Vedlegg B: Sårbarhetsresultater
Legend:

  • Svakheter på høyt og kritisk nivå i komponenten
  • Middels — Sårbarheter med middels kritikalitetsnivå i komponenten
  • TRUE — Ekte positiv sak
  • FALSE — Falsk positiv sak

komponent
Nexus IQ
Avhengighetssjekk
Avhengighetsspor
Alvorlighetsgrad
Resultat
Kommentar

dom4j: 1.6.1
CVE-2018-1000632
CVE-2018-1000632
CVE-2018-1000632
Høy
TRUE

CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
Høy
TRUE

log4j-kjerne: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
Høy
TRUE

CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
Lav
TRUE

log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571
-
Høy
TRUE

-
CVE-2020-9488
-
Lav
TRUE

SONATYPE-2010-0053
-
-
Høy
TRUE

fellessamlinger:3.1
-
CVE-2015-6420
CVE-2015-6420
Høy
FALSK
Duplikater RCE(OSSINDEX)

-
CVE-2017-15708
CVE-2017-15708
Høy
FALSK
Duplikater RCE(OSSINDEX)

SONATYPE-2015-0002
RCE (OSSINDEX)
RCE(OSSINDEX)
Høy
TRUE

commons-fileupload:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
Høy
TRUE

SONATYPE-2014-0173
-
-
Medium
TRUE

commons-beanutils:1.7.0
CVE-2014-0114
CVE-2014-0114
CVE-2014-0114
Høy
TRUE

-
CVE-2019-10086
CVE-2019-10086
Høy
FALSK
Sårbarheten gjelder kun versjon 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
Høy
TRUE

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

-
CVE-2020-2875
-
Medium
FALSK
Den samme sårbarheten som CVE-2019-2692, men med merknaden "angrep kan påvirke ytterligere produkter betydelig"

-
CVE-2017-15945
-
Høy
FALSK
Ikke relevant for mysql-connector-java

-
CVE-2020-2933
-
Lav
FALSK
Duplikat av CVE-2020-2934

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

fjæruttrykk:3.0.5
CVE-2018-1270
komponent ikke funnet
-
Høy
TRUE

CVE-2018-1257
-
-
Medium
TRUE

spring-web:3.0.5
CVE-2016-1000027
komponent ikke funnet
-
Høy
TRUE

CVE-2014-0225
-
CVE-2014-0225
Høy
TRUE

CVE-2011-2730
-
-
Høy
TRUE

-
-
CVE-2013-4152
Medium
TRUE

CVE-2018-1272
-
-
Høy
TRUE

CVE-2020-5398
-
-
Høy
TRUE
Et illustrerende eksempel til fordel for IQ: "Sonatypes sikkerhetsforskningsteam oppdaget at denne sårbarheten ble introdusert i versjon 3.0.2.RELEASE og ikke 5.0.x som angitt i meldingen."

CVE-2013-6429
-
-
Medium
TRUE

CVE-2014-0054
-
CVE-2014-0054
Medium
TRUE

CVE-2013-6430
-
-
Medium
TRUE

vårkontekst:3.0.5
CVE-2011-2894
komponent ikke funnet
-
Medium
TRUE

fjærkjerne:3.0.5
-
CVE-2011-2730
CVE-2011-2730
Høy
TRUE

CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
Medium
TRUE

-
-
CVE-2013-4152
Medium
FALSK
Duplikat av samme sårbarhet i spring-web

-
CVE-2013-4152
-
Medium
FALSK
Sårbarheten er relatert til spring-web-komponenten

-
CVE-2013-6429
CVE-2013-6429
Medium
FALSK
Sårbarheten er relatert til spring-web-komponenten

-
CVE-2013-6430
-
Medium
FALSK
Sårbarheten er relatert til spring-web-komponenten

-
CVE-2013-7315
CVE-2013-7315
Medium
FALSK
SPLIT fra CVE-2013-4152. + Sårbarheten er relatert til spring-web-komponenten

-
CVE-2014-0054
CVE-2014-0054
Medium
FALSK
Sårbarheten er relatert til spring-web-komponenten

-
CVE-2014-0225
-
Høy
FALSK
Sårbarheten er relatert til spring-web-komponenten

-
-
CVE-2014-0225
Høy
FALSK
Duplikat av samme sårbarhet i spring-web

-
CVE-2014-1904
CVE-2014-1904
Medium
FALSK
Sårbarheten er relatert til spring-web-mvc-komponenten

-
CVE-2014-3625
CVE-2014-3625
Medium
FALSK
Sårbarheten er relatert til spring-web-mvc-komponenten

-
CVE-2016-9878
CVE-2016-9878
Høy
FALSK
Sårbarheten er relatert til spring-web-mvc-komponenten

-
CVE-2018-1270
CVE-2018-1270
Høy
FALSK
For vår-uttrykk/vår-meldinger

-
CVE-2018-1271
CVE-2018-1271
Medium
FALSK
Sårbarheten er relatert til spring-web-mvc-komponenten

-
CVE-2018-1272
CVE-2018-1272
Høy
TRUE

CVE-2014-3578
CVE-2014-3578 (OSSINDEX)
CVE-2014-3578
Medium
TRUE

SONATYPE-2015-0327
-
-
Lav
TRUE

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

spring-tx:3.0.5
-
CVE-2011-2730
-
Høy
FALSK
Sårbarheten er ikke spesifikk for spring-tx

-
CVE-2011-2894
-
Høy
FALSK
Sårbarheten er ikke spesifikk for spring-tx

-
CVE-2013-4152
-
Medium
FALSK
Sårbarheten er ikke spesifikk for spring-tx

-
CVE-2013-6429
-
Medium
FALSK
Sårbarheten er ikke spesifikk for spring-tx

-
CVE-2013-6430
-
Medium
FALSK
Sårbarheten er ikke spesifikk for spring-tx

-
CVE-2013-7315
-
Medium
FALSK
Sårbarheten er ikke spesifikk for spring-tx

-
CVE-2014-0054
-
Medium
FALSK
Sårbarheten er ikke spesifikk for spring-tx

-
CVE-2014-0225
-
Høy
FALSK
Sårbarheten er ikke spesifikk for spring-tx

-
CVE-2014-1904
-
Medium
FALSK
Sårbarheten er ikke spesifikk for spring-tx

-
CVE-2014-3625
-
Medium
FALSK
Sårbarheten er ikke spesifikk for spring-tx

-
CVE-2016-9878
-
Høy
FALSK
Sårbarheten er ikke spesifikk for spring-tx

-
CVE-2018-1270
-
Høy
FALSK
Sårbarheten er ikke spesifikk for spring-tx

-
CVE-2018-1271
-
Medium
FALSK
Sårbarheten er ikke spesifikk for spring-tx

-
CVE-2018-1272
-
Medium
FALSK
Sårbarheten er ikke spesifikk for spring-tx

stag-kjerne:1.3.8
-
CVE-2011-5057 (OSSINDEX)

Medium
FASLE
Sårbarhet for struts 2

-
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
Høy
FALSK
Sårbarhet for struts 2

-
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
Medium
FALSK
Sårbarhet for struts 2

-
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
Høy
FALSK
Sårbarhet for struts 2

CVE-2016-1182
3VE-2016-1182
-
Høy
TRUE

-
-
CVE-2011-5057
Medium
FALSK
Sårbarhet for struts 2

-
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
Høy
FALSK
Sårbarhet for struts 2

-
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
Medium
FALSK
Sårbarhet for struts 2

CVE-2015-0899
CVE-2015-0899
-
Høy
TRUE

-
CVE-2012-0394
CVE-2012-0394
Medium
FALSK
Sårbarhet for struts 2

-
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
Høy
FALSK
Sårbarhet for struts 2

-
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
Høy
FALSK
Sårbarhet for struts 2

-
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
Høy
FASLE
Sårbarhet for struts 2

-
CVE-2013-2115
CVE-2013-2115
Høy
FASLE
Sårbarhet for struts 2

-
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
Høy
FASLE
Sårbarhet for struts 2

-
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
Høy
FASLE
Sårbarhet for struts 2

CVE-2014-0114
CVE-2014-0114
-
Høy
TRUE

-
CVE-2015-2992
CVE-2015-2992
Medium
FALSK
Sårbarhet for struts 2

-
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
Høy
FALSK
Sårbarhet for struts 2

CVE-2016-1181
CVE-2016-1181
-
Høy
TRUE

-
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
Høy
FALSK
Sårbarhet for struts 2

xwork-core:2.3.30
CVE-2017-9804
-
-
Høy
TRUE

SONATYPE-2017-0173
-
-
Høy
TRUE

CVE-2017-7672
-
-
Høy
FALSK
Duplikat av CVE-2017-9804

SONATYPE-2016-0127
-
-
Høy
TRUE

stivere2-kjerne:2.3.30
-
CVE-2016-6795
CVE-2016-6795
Høy
TRUE

-
CVE-2017-9787
CVE-2017-9787
Høy
TRUE

-
CVE-2017-9791
CVE-2017-9791
Høy
TRUE

-
CVE-2017-9793
-
Høy
FALSK
Duplikat av CVE-2018-1327

-
CVE-2017-9804
-
Høy
TRUE

-
CVE-2017-9805
CVE-2017-9805
Høy
TRUE

CVE-2016-4003
-
-
Medium
FALSK
Gjelder for Apache Struts 2.x opp til 2.3.28, som er versjon 2.3.30. Basert på beskrivelsen er imidlertid CVE gyldig for enhver versjon av Struts 2 hvis JRE 1.7 eller mindre brukes. Tilsynelatende bestemte de seg for å gjenforsikre oss her, men det ser mer ut som FALSK

-
CVE-2018-1327
CVE-2018-1327
Høy
TRUE

CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
Høy
TRUE
Den samme sårbarheten som Equifax-hackere utnyttet i 2017

CVE-2017-12611
CVE-2017-12611
-
Høy
TRUE

CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
Høy
TRUE

struts-taglib:1.3.8
-
CVE-2012-0394
-
Medium
FALSK
For stivere 2-kjerne

-
CVE-2013-2115
-
Høy
FALSK
For stivere 2-kjerne

-
CVE-2014-0114
-
Høy
FALSK
For commons-beanutils

-
CVE-2015-0899
-
Høy
FALSK
Gjelder ikke taglib

-
CVE-2015-2992
-
Medium
FALSK
Refererer til struts2-core

-
CVE-2016-1181
-
Høy
FALSK
Gjelder ikke taglib

-
CVE-2016-1182
-
Høy
FALSK
Gjelder ikke taglib

stag-fliser-1.3.8
-
CVE-2012-0394
-
Medium
FALSK
For stivere 2-kjerne

-
CVE-2013-2115
-
Høy
FALSK
For stivere 2-kjerne

-
CVE-2014-0114
-
Høy
FALSK
Under commons-beanutils

-
CVE-2015-0899
-
Høy
FALSK
Gjelder ikke fliser

-
CVE-2015-2992
-
Medium
FALSK
For stivere 2-kjerne

-
CVE-2016-1181
-
Høy
FALSK
Gjelder ikke taglib

-
CVE-2016-1182
-
Høy
FALSK
Gjelder ikke taglib

Kilde: www.habr.com

Legg til en kommentar