DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

Betydelsen av analys av tredjepartsprogramvara (pĂ„ engelska Software Composition Analysis — SCA) under utvecklingsprocessen ökar i takt med Ă„rliga rapporter om sĂ„rbarheter i öppen kĂ€llkod som publiceras av företag som Synopsys, Sonatype, Snyk, White Source. Enligt rapporten TillstĂ„ndet för sĂ„rbarheter inom öppen kĂ€llkod 2020 ökar antalet identifierade sĂ„rbarheter inom öppen kĂ€llkod 2019 nĂ€stan 1,5 gĂ„nger jĂ€mfört med föregĂ„ende Ă„r, medan komponenter med öppen kĂ€llkod anvĂ€nds i 60 % till 80 % av projekten. Om man hĂ€nvisar till oberoende Ă„sikter Ă€r SCA-processer en separat praxis inom OWASP SAMM och BSIMM som en indikator för mognad, och under första halvan av 2020 publicerade OWASP en ny standard, OWASP Software Component Verification Standard (SCVS), som tillhandahĂ„ller bĂ€sta praxis för kontroll av tredjeparts komponenter i mjukvaruleveranskedjan.

DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

Ett av de mest illustrativa fallen intrÀffade med företaget Equifax i maj 2017. OkÀnda angripare fick tillgÄng till information om 143 miljoner amerikaner, inklusive fullstÀndiga namn, adresser, socialförsÀkringsnummer och körkort. I 209 000 fall förekom Àven information om de drabbades bankkort i dokumenten. Denna lÀcka intrÀffade till följd av utnyttjandet av en kritisk sÄrbarhet i Apache Struts 2 (CVE-2017-5638), trots att en fix hade slÀppts redan i mars 2017. Företaget hade tvÄ mÄnader pÄ sig att installera uppdateringen, men ingen tog sig an detta.

I denna artikel kommer vi att diskutera frÄgan om val av verktyg för att genomföra SCA ur perspektivet av analysens kvalitet. Vi kommer ocksÄ att ge en funktionell jÀmförelse av verktygen. Processen för integration i CI/CD och integrationsmöjligheterna lÀmnar vi Ät framtida publikationer. En omfattande lista med verktyg presenterades av OWASP pÄ sin webbplats, men inom ramen för denna översikt kommer vi att beröra endast det mest populÀra open source-verktyget Dependency Check, den nÄgot mindre kÀnda open source-plattformen Dependency Track och företagslösningen Sonatype Nexus IQ. Vi kommer ocksÄ att undersöka hur dessa lösningar fungerar och jÀmföra resultaten gÀllande falska positiva resultat.

DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

Arbetsprincip.

Dependency Check — Ă€r ett verktyg (CLI, maven, jenkins modul, ant) som analyserar projektfiler, samlar fragment av information om beroenden (paketnamn, groupid, specifications titel, version
), bygger en CPE-strĂ€ng — (Common Platform Enumeration), Package URL (PURL) och identifierar sĂ„rbarheter för CPE/PURL frĂ„n databaser (NVD, Sonatype OSS Index, NPM Audit API
), och skapar en engĂ„ngsrapport i formatet HTML, JSON, XML


LÄt oss titta pÄ hur en CPE ser ut:

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

  • Part: Ange om komponenten tillhör en applikation (a), operativsystem (o), hĂ„rdvara (h) (Obligatoriskt fĂ€lt)
  • Vendor: Namnet pĂ„ produktens tillverkare (Obligatoriskt fĂ€lt)
  • Product: Produktnamn (Obligatoriskt fĂ€lt)
  • Version: Version av komponenten (Utdaterat fĂ€lt)
  • Update: Paketuppdatering
  • Edition: Arvversion (Utdaterat fĂ€lt)
  • Language: SprĂ„k som definieras i RFC-5646
  • SW Edition: Programvaruversion
  • Target SW: Den programmiljö dĂ€r produkten körs
  • Target HW: Den hĂ„rdvarumiljö dĂ€r produkten körs
  • Other: Information om leverantören eller produkten

Exemplet pÄ CPE ser ut sÄ hÀr:

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

StrĂ€ngen betyder att CPE version 2.3 beskriver en applikationskomponent frĂ„n tillverkaren pivotal_software med namnet spring_framework version 3.0.0. Om vi öppnar sĂ„rbarheten CVE-2014-0225 i NVD kan vi se referensen till denna CPE. Det första problemet som omedelbart bör mĂ€rkas — CVE i NVD, enligt CPE, meddelar om ett problem i ramverket, inte i den specifika komponenten. Det innebĂ€r att om utvecklarna Ă€r starkt kopplade till ramverket och den identifierade sĂ„rbarheten inte rör de moduler som utvecklarna anvĂ€nder, kommer sĂ€kerhetsspecialisten pĂ„ nĂ„got sĂ€tt att behöva granska denna CVE och tĂ€nka pĂ„ en uppdatering.

URL:en anvÀnds ocksÄ av SCA-verktyg. Formatet för paketets URL Àr som följer:

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

  • Scheme: Kommer alltid att vara 'pkg', som indikerar att det Ă€r en paket-URL (Obligatoriskt fĂ€lt)
  • Type: "Typ" av paket eller "protokoll" av paket, till exempel maven, npm, nuget, gem, pypi osv. (Obligatoriskt fĂ€lt)
  • Namespace: Ett visst prefix av namn, sĂ„som Maven-grupp-ID, Ă€gare av Docker-bild, anvĂ€ndare eller organisation pĂ„ GitHub. Valfritt och varierar beroende pĂ„ typ.
  • Namn: Paketnamn (Obligatoriskt fĂ€lt)
  • Version: Paketversion
  • Qualifiers: Ytterligare kvalifikationsuppgifter för paketet, sĂ„som operativsystem, arkitektur, distribution osv. Obligatorisk och beroende av typ av punkt.
  • Underkatalog: Ytterligare sökvĂ€g i paketet i förhĂ„llande till paketets rot

Till exempel:

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 — en plattform för lokala installationer som tar emot fĂ€rdiga Bill of Materials (BOM) skapade CycloneDX och SPDX, det vill sĂ€ga fĂ€rdiga specifikationer över befintliga beroenden. Detta Ă€r en XML-fil med beskrivning av beroenden — namn, hash, paket-url, utgivare, licens. DĂ€refter analyserar Dependency Track BOM:en, kontrollerar förekomsten av identifierade beroenden mot CVE-databasen (NVD, Sonatype OSS Index
), dĂ€refter bygger den grafer, berĂ€knar mĂ€tvĂ€rden och uppdaterar kontinuerligt information om sĂ„rbarhetsstatusen för komponenterna.

Exempel pÄ hur en BOM kan se ut i XML-format:

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
    
      

BOM kan anvĂ€ndas inte bara som inparametrar för Dependency Track, utan ocksĂ„ för att inventera programkomponenter i leveranskedjan, till exempel för att tillhandahĂ„lla programvara till kunden. År 2014 lades till och med ett lagförslag fram i USA «Cyber Supply Chain Management and Transparency Act of 2014», vilket angav att nĂ€r programvara köptes skulle varje statlig myndighet begĂ€ra en BOM för att förhindra anvĂ€ndning av sĂ„rbara komponenter, men pĂ„ grund av detta trĂ€dde lagen aldrig i kraft.

Återkommande till SCA har Dependency Track fĂ€rdiga integrationer med meddelandeplattformar som Slack och sĂ„rbarhetshanteringssystem som Kenna Security. Det bör ocksĂ„ nĂ€mnas att Dependency Track dessutom identifierar förĂ„ldrade versioner av paket och tillhandahĂ„ller information om licenser (genom stöd för SPDX).

NÀr det gÀller kvaliteten pÄ SCA finns det en grundlÀggande skillnad.

Dependency Track tar inte emot projekt som indata, utan tar emot BOM. Det innebÀr att om vi vill kontrollera projektet mÄste vi först generera bom.xml, till exempel med hjÀlp av CycloneDX. PÄ sÄ sÀtt Àr Dependency Track direkt beroende av CycloneDX. Samtidigt ger det möjligheter till anpassning. Till exempel har OZON-teamet skrivit modulen CycloneDX för att bygga BOM-filer för projekt i Golang med syfte att senare skanna via Dependency Track.

Nexus IQ Àr en kommersiell SCA-lösning frÄn Sonatype, som Àr en del av Sonatype-ekosystemet dÀr Àven Nexus Repository Manager ingÄr. Nexus IQ kan ta emot bÄde war-arkiv (för Java-projekt) via webbgrÀnssnitt eller API, samt BOM, om din organisation inte har fÄtt tid att omstrukturera frÄn CycloneDX till den nya lösningen. Till skillnad frÄn open source-lösningar tar IQ hÀnsyn till inte bara CP/PURL för den identifierade komponenten och motsvarande sÄrbarhet i databasen, utan Àven egna undersökningar, till exempel namnet pÄ den sÄrbara funktionen eller klassen. Mekanismerna för IQ kommer att behandlas senare nÀr vi analyserar resultaten.

LÄt oss sammanfatta nÄgra slutsatser angÄende funktionella egenskaper samt gÄ igenom de stödda sprÄken för analys:

SprÄk
Nexus IQ
Dependency Check
Dependency Track

Java
+
+
+

C/C++
+
+
—

C#
+
+
—

.Net
+
+
+

Erlang
—
—
+

JavaScript (NodeJS)
+
+
+

PHP
+
+
+

Python
+
+
+

Ruby
+
+
+

Perl
—
—
—

Scala
+
+
+

Objective C
+
+
—

Swift
+
+
—

R
+
—
—

Go
+
+
+

Funktionella möjligheter

Funktionella möjligheter
Nexus IQ
Dependency Check
Dependency Track

Möjlighet att sÀkerstÀlla granskning av komponenter som anvÀnds i kÀllkoden för licensrenhet
+
—
+

Möjlighet till skanning och analys av sÄrbarheter och licensrenhet för Docker-avbilder
+ Integration med Clair
—
—

Möjlighet att konfigurera sÀkerhetspolicyer för att anvÀnda bibliotek med öppen kÀllkod
+
—
—

Möjlighet att skanna offentliga kÀllkodsförvar efter sÄrbara komponenter
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS
—
+ Hex, RubyGems, Maven, NPM, Nuget, Pypi

NĂ€rvaro av en specialiserad forskargrupp
+
—
—

Arbete i ett slutet system
+
+
+

AnvÀndning av externa databaser
+ Sluten databas frÄn Sonatype
+ Sonatype OSS, NPM Public Advisors
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, stöd för egen sÄrbarhetsdatabas

Möjlighet att filtrera komponenter med öppen kÀllkod vid försök att ladda upp till utvecklingskonturen enligt konfigurerade policyer
+
—
—

Rekommendationer för att ÄtgÀrda sÄrbarheter, inklusive lÀnkar för ÄtgÀrder
+
+- (beror pÄ beskrivningen i offentliga databaser)
+- (beror pÄ beskrivningen i offentliga databaser)

Rankning av upptÀckta sÄrbarheter efter kritikalitet
+
+
+

Rollmodell för Ätkomst
+
—
+

Stöd för kommandoradsgrÀnssnitt (CLI)
+
+
+- (endast för CycloneDX)

Utdragning / sortering av sÄrbarheter enligt angivna kriterier
+
—
+

Dashboard för appstatus
+
—
+

Generera rapporter i PDF-format
+
—
—

Generera rapporter i JSONCSV-format
+
+
—

Stöd för ryska sprÄket
—
—
—

Integrationsmöjligheter

Integration
Nexus IQ
Dependency Check
Dependency Track

Integration med LDAP/Active Directory
+
—
+

Integration med kontinuerlig integrationssystem (continous integration) Bamboo
+
—
—

Integration med kontinuerlig integrationssystem (continous integration) TeamCity
+
—
—

Integration med kontinuerlig integrationssystem (continous integration) GitLab
+
+- (i form av en plugin för GitLab)
+

Integration med kontinuerlig integrationssystem (continous integration) Jenkins
+
+
+

TillgÄng till plugins för IDE
+ IntelliJ, Eclipse, Visual Studio
—
—

Stöd för anpassad integration via webbtjÀnster (API)
+
—
+

Dependency Check

Första körning

Vi kör Dependency Check pÄ en avsiktligt sÄrbar applikation DVJA.

För detta anvÀnder vi Dependency Check Maven Plugin:

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

Som ett resultat kommer dependency-check-report.html att visas i target-katalogen.

DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

Vi öppnar filen. Efter sammanfattningen av det totala antalet sÄrbarheter kan vi se information om sÄrbarheter med hög severitet och förtroende med referens till paket, CPE, och antal CVE.

DÀrefter följer mer detaljerad information, sÀrskilt den grund pÄ vilken beslutet fattades (evidence), det vill sÀga nÄgon form av BOM.

DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

Vidare finns CPE, PURL och beskrivning av CVE. Rekommendationer för ÄtgÀrder hÀrmed bifogas tyvÀrr inte pÄ grund av deras frÄnvaro i NVD-databasen.

DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

För att systematiskt granska resultaten av skanningen kan Nginx konfigureras med minimala instÀllningar, eller sÄ kan de upptÀckta defekterna skickas till ett defektstyrningssystem som har anslutningar till Dependency Check. Till exempel, Defect Dojo.

Dependency Track

Installation

Dependency Track Àr i sin tur en webbplattform med visande grafer, sÄ den brÀnnande frÄgan om lagring av defekter i en extern lösning Àr hÀr inte aktuell.
För installation finns följande stödda scenarier: Docker, WAR, Executable WAR.

Första körning

Vi gĂ„r till URL:en för den startade tjĂ€nsten. Loggar in med admin/admin, Ă€ndrar sitt anvĂ€ndarnamn och lösenord, och hamnar pĂ„ Dashboard. NĂ€sta steg Ă€r att skapa ett projekt för den testapplikationen pĂ„ Java i Home/Projects → Create Project . Som exempel tar vi DVJA.

DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

Eftersom Dependency Track endast kan ta emot BOM som indata mÄste vi fÄ tag pÄ denna BOM. Vi anvÀnder CycloneDX Maven Plugin:

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

Vi fĂ„r bom.xml och laddar upp filen i det skapade projektet DVJA → Dependencies → Ladda upp BOM.

Vi gĂ„r till Administration → Analyzers. Vi inser att endast Internal Analyzer Ă€r aktiverad, som inkluderar NVD. Vi kopplar Ă€ven in Sonatype OSS Index.

DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

PÄ sÄ sÀtt fÄr vi följande bild för vÄrt projekt:

DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

I listan finns ocksÄ en sÄrbarhet kopplad till Sonatype OSS:

DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

Den största besvikelsen var att Dependency Track inte lĂ€ngre accepterar xml-rapporter frĂ„n Dependency Check. De senaste stödda versionerna för integration med Dependency Check var 1.0.0 – 4.0.2, medan jag testade 5.3.2.

HÀr Àr video (och hÀr), nÀr detta fortfarande var möjligt.

Nexus IQ

Första körning

Installation av Nexus IQ sker frÄn arkiv genom dokumentationen, men för dessa ÀndamÄl har vi byggt en Docker-bild.

Efter inloggning i konsolen mÄste en Organisation och en Applikation skapas.

DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

Som man kan se Àr instÀllningarna för IQ nÄgot mer komplicerade, eftersom vi ocksÄ mÄste skapa policyer som Àr tillÀmpliga för olika 'steg' (dev, build, stage, release). Detta Àr nödvÀndigt för att blockera sÄrbara komponenter nÀr vi gÄr framÄt i pipelinen mot produktion, eller blockera dem sÄ snart de hamnar i Nexus Repo vid nedladdning av utvecklarna.

För att förstÄ skillnaden mellan öppen kÀllkod och enterprise, kommer vi att göra en liknande skanning genom Nexus IQ som vi gjorde genom Maven-plugin, efter att först ha skapat en testapplikation i NexusIQ-grÀnssnittet dvja-test-and-compare:

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

Vi gÄr till URL:en för den genererade rapporten i IQ:s webbgrÀnssnitt:

DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

HÀr kan vi se alla policyövertrÀdelser med angivande av olika nivÄer av allvarlighet (frÄn Info till Security Critical). Bokstaven D bredvid komponenten innebÀr att komponenten Àr en Direct Dependency, medan bokstaven T bredvid komponenten betyder att den Àr en Transitive Dependency.

Förresten, rapporten State of Open Source Security Report 2020 frÄn Snyk rapporterar att över 70% av de öppen kÀllkods-sÄrbarheter som upptÀckts i Node.js, Java och Ruby finns i transitiva beroenden.

Om vi öppnar ett av brotten mot Nexus IQs policy kan vi se en beskrivning av komponenten samt Version Graph, som visar var den aktuella versionen ligger pÄ tidslinjen, samt nÀr sÄrbarheten slutar vara sÄrbar. Höjden pÄ staplarna i grafen visar populariteten av att anvÀnda denna komponent.

DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

Om vi gÄr till avsnittet för sÄrbarheter och vecklar ut CVE, kan vi lÀsa beskrivningen av denna sÄrbarhet, rekommendationerna för ÄtgÀrd samt orsaken till att denna komponent klassificerades som ett brott, det vill sÀga förekomsten av klassen DiskFileitem.class.

DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

LÄt oss sammanfatta enbart de som rör tredjeparts Java-komponenter och ta bort js-komponenterna. I parentes anger vi antalet sÄrbarheter som har hittats utanför NVD.

Totalt Nexus IQ:

  • GenomgĂ„ngna beroenden: 62
  • SĂ„rbara beroenden: 16
  • Hittade sĂ„rbarheter: 42 (8 sonatype db)

Totalt Dependency Check:

  • GenomgĂ„ngna beroenden: 47
  • SĂ„rbara beroenden: 13
  • Hittade sĂ„rbarheter: 91 (14 sonatype oss)

Totalt Dependency Track:

  • GenomgĂ„ngna beroenden: 59
  • SĂ„rbara beroenden: 10
  • Hittade sĂ„rbarheter: 51 (1 sonatype oss)

I nÀsta steg kommer vi att analysera de resultat vi har fÄtt och ta reda pÄ vilka av dessa sÄrbarheter som Àr verkliga defekter och vilka som Àr falska positiva.

Disclaimer

Denna granskning Àr inte en oemotsÀglig sanning. För författaren var mÄlet inte att lyfta fram ett enskilt verktyg i förhÄllande till andra. Syftet med granskningen var att visa hur SCA-verktygen fungerar och hur man verifierar deras resultat.

JÀmförelse av resultat

Villkor:

En falsk positiv i förhÄllande till sÄrbarheter i tredjeparts komponenter Àr:

  • Mismatch mellan CVE och den identifierade komponenten
  • Till exempel, om en sĂ„rbarhet har identifierats i struts2-ramverket, men verktyget pekar pĂ„ komponenten struts-tiles, som inte Ă€r relevant för denna sĂ„rbarhet, dĂ„ Ă€r det en falsk positiv.
  • Mismatch mellan CVE och den identifierade versionen av komponenten
  • Till exempel, om sĂ„rbarheten Ă€r knuten till versionen python > 3.5 och verktyget markerar version 2.7 som sĂ„rbar, Ă€r det en falsk positiv, eftersom sĂ„rbarheten faktiskt enbart gĂ€ller produktversionen 3.x.
  • Duplicering av CVE
  • Till exempel, om SCA pekade pĂ„ en CVE som möjliggör RCE och sedan anger samma komponent med en CVE som Ă€r tillĂ€mplig pĂ„ Cisco-produkter som Ă€r sĂ„rbara för denna RCE, dĂ„ Ă€r det en falsk positiv.
  • Till exempel, CVE hittades i komponenten spring-web, varefter SCA pekar pĂ„ samma CVE i andra komponenter av ramverket Spring Framework, medan CVE inte har nĂ„got att göra med andra komponenter. I sĂ„ fall blir det en falsk positiv.

Forskningsobjektet valdes till Open Source-projektet DVJA. Endast java-komponenter deltog i studien (utan js).

Sammanfattande resultat

LÄt oss gÄ direkt till resultaten av den manuella genomgÄngen av de identifierade sÄrbarheterna. Den fullstÀndiga rapporten för varje CVE kan ses i Bilagan.

Sammanfattande resultat för alla sÄrbarheter:

Parameter
Nexus IQ
Dependency Check
Dependency Track

Totalt upptÀckta sÄrbarheter
42
91
51

Felaktigt identifierade sÄrbarheter (falsk positiv)
2(4.76%)
62(68,13%)
29(56.86%)

Inga relevanta sÄrbarheter upptÀcktes (falsk negativ)
10
20
27

Sammanfattande resultat per komponent:

Parameter
Nexus IQ
Dependency Check
Dependency Track

Totalt upptÀckta komponenter
62
47
59

Totalt sÄrbara komponenter
16
13
10

Felaktigt identifierade sÄrbara komponenter (falska positiva)
1
5
0

Felaktigt identifierade sÄrbara komponenter (falska positiva)
0
6
6

Vi bygger visuella grafer för att bedöma förhÄllandet mellan falska positiva och falska negativa i förhÄllande till det totala antalet sÄrbarheter. Horisontellt visas komponenterna, och vertikalt de identifierade sÄrbarheterna.

DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

För jÀmförelse har ett liknande forskningsprojekt genomförts av Sonatype för att testa ett projekt som bestÄr av 1531 komponenter med hjÀlp av OWASP Dependency Check. Som vi kan se Àr förhÄllandet mellan brus och korrekta trÀffar överensstÀmmande med vÄra resultat.

DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett
KĂ€lla: www.sonatype.com/why-precision-matters-ebook

LÄt oss titta pÄ nÄgra CVE frÄn resultaten av vÄr skanning för att förstÄ orsaken till dessa resultat.

LĂ€s mer

Nr 1

LÄt oss först gÄ igenom nÄgra intressanta punkter frÄn Sonatype Nexus IQ.

Nexus IQ indikerar ett problem med deserialisering som möjliggör RCE i Spring Framework flera gÄnger. CVE-2016-1000027 i spring-web:3.0.5 för första gÄngen, och CVE-2011-2894 i spring-context:3.0.5 och spring-core:3.0.5. Inledningsvis verkar det som om sÄrbarheten duppliceras över flera CVE. Om man tittar pÄ CVE-2016-1000027 och CVE-2011-2894 i NVD-databasen verkar allt uppenbart.

Komponent
SÄrbarhet

spring-web:3.0.5
CVE-2016-1000027

spring-context:3.0.5
CVE-2011-2894

spring-core:3.0.5
CVE-2011-2894

Beskrivning CVE-2011-2894 frÄn NVD:
DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

Beskrivning CVE-2016-1000027 frÄn NVD:
DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

CVE-2011-2894 Àr ganska kÀnd i sig. I rapporten White Source för 2011 erkÀndes denna CVE som en av de vanligaste. Det finns ganska lite information för CVE-2016-100027 i NVD, och den verkar bara vara tillÀmplig pÄ Spring Framework 4.1.4. LÄt oss titta pÄ referens och hÀr blir det mer eller mindre klart. FrÄn artikeln Tenable förstÄr vi att utöver sÄrbarheten i RemoteInvocationSerializingExporter i CVE-2011-2894 finns det ocksÄ en sÄrbarhet i HttpInvokerServiceExporter. Det hÀr sÀger Nexus IQ till oss:

DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

ÄndĂ„ finns inget liknande i NVD, vilket gör att Dependency Check och Dependency Track fĂ„r falska negativa.

Även frĂ„n beskrivningen av CVE-2011-2894 kan vi förstĂ„ att sĂ„rbarheten faktiskt finns i spring-context:3.0.5 och spring-core:3.0.5. BekrĂ€ftelse pĂ„ detta kan hittas i artikeln av den som upptĂ€ckte sĂ„rbarheten.

Nr 2

Komponent
SÄrbarhet
Resultat

struts2-core:2.3.30
CVE-2016-4003
FALSK

Om vi studerar sÄrbarheten CVE-2016-4003, sÄ förstÄr vi att den ÄtgÀrdades redan i version 2.3.28, men ÀndÄ rapporterar Nexus IQ om den. I sÄrbarhetsbeskrivningen finns en anmÀrkning:

DevSecOps: arbetsprinciper och jÀmförelse av SCA. Del ett

Det vill sĂ€ga, sĂ„rbarheten finns endast i samband med en förĂ„ldrad version av JRE, vilket vi fick information om. ÄndĂ„ anser vi att detta Ă€r en falsk positiv, Ă€ven om det inte Ă€r det mest alarmerande.

Nr 3

Komponent
SÄrbarhet
Resultat

xwork-core:2.3.30
CVE-2017-9804
SANN

xwork-core:2.3.30
CVE-2017-7672
FALSK

Om vi tittar pÄ beskrivningen för CVE-2017-9804 och CVE-2017-7672, sÄ förstÄr vi att problemet ligger i URLValidator class, och CVE-2017-9804 hÀrstammar frÄn CVE-2017-7672. Förekomsten av den andra sÄrbarheten medför ingen nyttig belastning förutom att dess allvarlighetsgrad ökade till hög, sÄ detta kan ses som onödig störning.

Generellt har inga andra falska positiva för Nexus IQ hittats.

Nr 4

Det finns nÄgra punkter som sÀrskiljer IQ frÄn andra lösningar.

Komponent
SÄrbarhet
Resultat

spring-web:3.0.5
CVE-2020-5398
SANN

CVE i NVD rapporterar att det endast Àr tillÀmpligt för versioner 5.2.x upp till 5.2.3, 5.1.x upp till 5.1.13, och versioner 5.0.x upp till 5.0.16, men om vi ser pÄ CVE-beskrivningen i Nexus IQ kommer vi att se följande:
Advisory Deviation Notice: Sonatype sÀkerhetsforskningsgrupp upptÀckte att denna sÄrbarhet introducerades i version 3.0.2.RELEASE och inte 5.0.x som anges i meddelandet.

Efter detta följer en PoC för denna sÄrbarhet, som rapporterar att den finns i version 3.0.5.

Falska negativa skickas till Dependency Check och Dependency Track.

Nr 5

LÄt oss titta pÄ falska positiva för Dependency Check och Dependency Track.

Dependency Check framhĂ€vs av att den speglar de CVE som gĂ€ller för hela ramverket i NVD, i de komponenter dĂ€r dessa CVE inte Ă€r tillĂ€mpliga. Detta gĂ€ller CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, som Dependency Check "kopplade" till struts-taglib:1.3.8 och struts-tiles-1.3.8. Dessa komponenter har inget att göra med vad som beskrivs i CVE — hantering av förfrĂ„gningar, validering av sidor och sĂ„ vidare. Detta beror pĂ„ att det enda som förenar dessa CVE och komponenterna Ă€r ramverket, vilket Ă€r anledningen till att Dependency Check bedömde detta som en sĂ„rbarhet.

Samma situation med spring-tx:3.0.5, och en liknande situation med struts-core:1.3.8. För struts-core har Dependency Check och Dependency Track hittat mÄnga sÄrbarheter som egentligen gÀller struts2-core, som i grund och botten Àr ett separat ramverk. I detta fall förstod Nexus IQ bilden korrekt och angav i de CVE som den gav att struts-core har nÄtt slutet av livet och att man bör övergÄ till struts2-core.

№6

I vissa situationer Àr det orÀttvist att tolka den uppenbara felet i Dependency Check och Dependency Track. SÀrskilt CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, som Dependency Check och Dependency Track hÀnför till spring-core:3.0.5, gÀller faktiskt spring-web:3.0.5. Samtidigt har Nexus IQ hittat nÄgra av dessa CVE, men IQ har korrekt identifierat dem för en annan komponent. Det faktum att dessa sÄrbarheter inte hittades i spring-core innebÀr inte att de inte finns i ramverket i allmÀnhet, och open source-verktyg har rimligt nog pekat pÄ dessa sÄrbarheter (de missade bara lite).

Slutsatser

Som vi kan se ger en manuell granskning av riktigheten av de identifierade sÄrbarheterna inget entydigt resultat, vilket skapar tvetydiga situationer. Resultaten visar att Nexus IQ-lösningen har den lÀgsta graden av falska positiva och den största noggrannheten.

Detta beror frÀmst pÄ att Sonatype-teamet har utökat beskrivningen för varje CVE-sÄrbarhet frÄn NVD i sina databaser, och angivit med exakthet till klass eller funktion av sÄrbarheten för varje version av komponenten, efter att ha genomfört ytterligare forskning (till exempel genom att kontrollera sÄrbarheter i Àldre versioner av programvaran).

Även sĂ„rbarheterna som inte har kommit in i NVD, men Ă€ndĂ„ finns i Sonatype-databasen med SONATYPE-mĂ€rkning, har en betydande inverkan pĂ„ resultaten. Enligt rapporten TillstĂ„ndet för sĂ„rbarheter inom öppen kĂ€llkod 2020 angĂ„ende 45 % av de upptĂ€ckta sĂ„rbarheterna med öppen kĂ€llkod rapporteras inte i NVD. Enligt WhiteSources databas publiceras endast 29 % av alla sĂ„rbarheter med öppen kĂ€llkod, registrerade utanför NVD, i slutĂ€ndan i den, sĂ„ det Ă€r viktigt att ocksĂ„ söka efter sĂ„rbarheter i andra kĂ€llor.

Som ett resultat ger Dependency Check en stor mÀngd brus, dÀr den missar en del sÄrbara komponenter. Dependency Track ger mindre brus och identifierar ett stort antal komponenter, vilket visuellt Àr mindre störande i webbgrÀnssnittet.

ÄndĂ„ visar praktiken att det Ă€r open source som bör vara det första steget mot en mogen DevSecOps. Det första man bör övervĂ€ga för att integrera SCA i utvecklingen Ă€r processerna, det vill sĂ€ga att tillsammans med ledningen och berörda avdelningar diskutera hur de ideala processerna bör se ut i organisationen. Det kan hĂ€nda att det visar sig att Dependency Check eller Dependency Track till en början kommer att möta alla affĂ€rens behov, medan företagslösningar kommer att vara en logisk fortsĂ€ttning pĂ„ grund av den vĂ€xande komplexiteten hos de utvecklade applikationerna.

Bilaga A. Resultat relaterade till komponenterna
Beteckningar:

  • High — sĂ„rbarheter av hög och kritisk nivĂ„ i komponenten
  • Medium — sĂ„rbarheter av medelhög kritikalitet i komponenten
  • TRUE — Korrekt identifierad sĂ„rbarhet (True positive issue)
  • FALSE — Falsk positiv (False positive issue)

Komponent
Nexus IQ
Dependency Check
Dependency Track
Resultat

dom4j: 1.6.1
Hög
Hög
Hög
SANN

log4j-core: 2.3
Hög
Hög
Hög
SANN

log4j: 1.2.14
Hög
Hög
—
SANN

commons-collections:3.1
Hög
Hög
Hög
SANN

commons-fileupload:1.3.2
Hög
Hög
Hög
SANN

commons-beanutils:1.7.0
Hög
Hög
Hög
SANN

commons-codec:1:10
Medium
—
—
SANN

mysql-connector-java:5.1.42
Hög
Hög
Hög
SANN

spring-expression:3.0.5
Hög
komponenten hittades inte

SANN

spring-web:3.0.5
Hög
komponenten hittades inte
Hög
SANN

spring-context:3.0.5
Medium
komponenten hittades inte
—
SANN

spring-core:3.0.5
Medium
Hög
Hög
SANN

struts2-config-browser-plugin:2.3.30
Medium
—
—
SANN

spring-tx:3.0.5
—
Hög
—
FALSK

struts-core:1.3.8
Hög
Hög
Hög
SANN

xwork-core: 2.3.30
Hög
—
—
SANN

struts2-core: 2.3.30
Hög
Hög
Hög
SANN

struts-taglib:1.3.8
—
Hög
—
FALSK

struts-tiles-1.3.8
—
Hög
—
FALSK

Bilaga B. Resultat relaterade till sÄrbarheterna
Beteckningar:

  • High — sĂ„rbarheter av hög och kritisk nivĂ„ i komponenten
  • Medium — sĂ„rbarheter av medelhög kritikalitet i komponenten
  • TRUE — Korrekt identifierad sĂ„rbarhet (True positive issue)
  • FALSE — Falsk positiv (False positive issue)

Komponent
Nexus IQ
Dependency Check
Dependency Track
SvÄrighetsgrad
Resultat
Kommentar

dom4j: 1.6.1
CVE-2018-1000632
CVE-2018-1000632
CVE-2018-1000632
Hög
SANN

CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
Hög
SANN

log4j-core: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
Hög
SANN

CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
LÄg
SANN

log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571
—
Hög
SANN

—
CVE-2020-9488
—
LÄg
SANN

SONATYPE-2010-0053
—
—
Hög
SANN

commons-collections:3.1
—
CVE-2015-6420
CVE-2015-6420
Hög
FALSK
Dubbelkopiering av RCE(OSSINDEX)

—
CVE-2017-15708
CVE-2017-15708
Hög
FALSK
Dubbelkopiering av RCE(OSSINDEX)

SONATYPE-2015-0002
RCE (OSSINDEX)
RCE(OSSINDEX)
Hög
SANN

commons-fileupload:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
Hög
SANN

SONATYPE-2014-0173
—
—
Medium
SANN

commons-beanutils:1.7.0
CVE-2014-0114
CVE-2014-0114
CVE-2014-0114
Hög
SANN

—
CVE-2019-10086
CVE-2019-10086
Hög
FALSK
SÄrbarheten gÀller endast versioner 1.9.2+

commons-codec:1:10
SONATYPE-2012-0050
—
—
Medium
SANN

mysql-connector-java:5.1.42
CVE-2018-3258
CVE-2018-3258
CVE-2018-3258
Hög
SANN

CVE-2019-2692
CVE-2019-2692
—
Medium
SANN

—
CVE-2020-2875
—
Medium
FALSK
Samma sÄrbarhet som CVE-2019-2692, men med tillÀgget "attacker kan betydligt pÄverka ytterligare produkter"

—
CVE-2017-15945
—
Hög
FALSK
GĂ€ller inte mysql-connector-java

—
CVE-2020-2933
—
LÄg
FALSK
Dubbelkopiering av CVE-2020-2934

CVE-2020-2934
CVE-2020-2934
—
Medium
SANN

spring-expression:3.0.5
CVE-2018-1270
komponenten hittades inte
—
Hög
SANN

CVE-2018-1257
—
—
Medium
SANN

spring-web:3.0.5
CVE-2016-1000027
komponenten hittades inte
—
Hög
SANN

CVE-2014-0225
—
CVE-2014-0225
Hög
SANN

CVE-2011-2730
—
—
Hög
SANN

—
—
CVE-2013-4152
Medium
SANN

CVE-2018-1272
—
—
Hög
SANN

CVE-2020-5398
—
—
Hög
SANN
Ett exempel som stödjer IQ: "Sonatype sÀkerhetsforskningsgrupp upptÀckte att denna sÄrbarhet introducerades i version 3.0.2.RELEASE och inte 5.0.x som anges i meddelandet."

CVE-2013-6429
—
—
Medium
SANN

CVE-2014-0054
—
CVE-2014-0054
Medium
SANN

CVE-2013-6430
—
—
Medium
SANN

spring-context:3.0.5
CVE-2011-2894
komponenten hittades inte
—
Medium
SANN

spring-core:3.0.5
—
CVE-2011-2730
CVE-2011-2730
Hög
SANN

CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
Medium
SANN

—
—
CVE-2013-4152
Medium
FALSK
Dubbelkopiering av samma sÄrbarhet i spring-web

—
CVE-2013-4152
—
Medium
FALSK
SÄrbarheten gÀller komponenten spring-web

—
CVE-2013-6429
CVE-2013-6429
Medium
FALSK
SÄrbarheten gÀller komponenten spring-web

—
CVE-2013-6430
—
Medium
FALSK
SÄrbarheten gÀller komponenten spring-web

—
CVE-2013-7315
CVE-2013-7315
Medium
FALSK
SPLIT frÄn CVE-2013-4152. + SÄrbarheten gÀller komponenten spring-web

—
CVE-2014-0054
CVE-2014-0054
Medium
FALSK
SÄrbarheten gÀller komponenten spring-web

—
CVE-2014-0225
—
Hög
FALSK
SÄrbarheten gÀller komponenten spring-web

—
—
CVE-2014-0225
Hög
FALSK
Dubbelkopiering av samma sÄrbarhet i spring-web

—
CVE-2014-1904
CVE-2014-1904
Medium
FALSK
SÄrbarheten gÀller komponenten spring-web-mvc

—
CVE-2014-3625
CVE-2014-3625
Medium
FALSK
SÄrbarheten gÀller komponenten spring-web-mvc

—
CVE-2016-9878
CVE-2016-9878
Hög
FALSK
SÄrbarheten gÀller komponenten spring-web-mvc

—
CVE-2018-1270
CVE-2018-1270
Hög
FALSK
För spring-expression / spring-messages

—
CVE-2018-1271
CVE-2018-1271
Medium
FALSK
SÄrbarheten gÀller komponenten spring-web-mvc

—
CVE-2018-1272
CVE-2018-1272
Hög
SANN

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

SONATYPE-2015-0327
—
—
LÄg
SANN

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

spring-tx:3.0.5
—
CVE-2011-2730
—
Hög
FALSK
SÄrbarheten gÀller inte spring-tx

—
CVE-2011-2894
—
Hög
FALSK
SÄrbarheten gÀller inte spring-tx

—
CVE-2013-4152
—
Medium
FALSK
SÄrbarheten gÀller inte spring-tx

—
CVE-2013-6429
—
Medium
FALSK
SÄrbarheten gÀller inte spring-tx

—
CVE-2013-6430
—
Medium
FALSK
SÄrbarheten gÀller inte spring-tx

—
CVE-2013-7315
—
Medium
FALSK
SÄrbarheten gÀller inte spring-tx

—
CVE-2014-0054
—
Medium
FALSK
SÄrbarheten gÀller inte spring-tx

—
CVE-2014-0225
—
Hög
FALSK
SÄrbarheten gÀller inte spring-tx

—
CVE-2014-1904
—
Medium
FALSK
SÄrbarheten gÀller inte spring-tx

—
CVE-2014-3625
—
Medium
FALSK
SÄrbarheten gÀller inte spring-tx

—
CVE-2016-9878
—
Hög
FALSK
SÄrbarheten gÀller inte spring-tx

—
CVE-2018-1270
—
Hög
FALSK
SÄrbarheten gÀller inte spring-tx

—
CVE-2018-1271
—
Medium
FALSK
SÄrbarheten gÀller inte spring-tx

—
CVE-2018-1272
—
Medium
FALSK
SÄrbarheten gÀller inte spring-tx

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

Medium
FASLE
SÄrbarhet angÄende Struts 2

—
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
Hög
FALSK
SÄrbarhet angÄende Struts 2

—
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
Medium
FALSK
SÄrbarhet angÄende Struts 2

—
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
Hög
FALSK
SÄrbarhet angÄende Struts 2

CVE-2016-1182
3VE-2016-1182
—
Hög
SANN

—
—
CVE-2011-5057
Medium
FALSK
SÄrbarhet angÄende Struts 2

—
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
Hög
FALSK
SÄrbarhet angÄende Struts 2

—
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
Medium
FALSK
SÄrbarhet angÄende Struts 2

CVE-2015-0899
CVE-2015-0899
—
Hög
SANN

—
CVE-2012-0394
CVE-2012-0394
Medium
FALSK
SÄrbarhet angÄende Struts 2

—
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
Hög
FALSK
SÄrbarhet angÄende Struts 2

—
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
Hög
FALSK
SÄrbarhet angÄende Struts 2

—
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
Hög
FASLE
SÄrbarhet angÄende Struts 2

—
CVE-2013-2115
CVE-2013-2115
Hög
FASLE
SÄrbarhet angÄende Struts 2

—
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
Hög
FASLE
SÄrbarhet angÄende Struts 2

—
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
Hög
FASLE
SÄrbarhet angÄende Struts 2

CVE-2014-0114
CVE-2014-0114
—
Hög
SANN

—
CVE-2015-2992
CVE-2015-2992
Medium
FALSK
SÄrbarhet angÄende Struts 2

—
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
Hög
FALSK
SÄrbarhet angÄende Struts 2

CVE-2016-1181
CVE-2016-1181
—
Hög
SANN

—
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
Hög
FALSK
SÄrbarhet angÄende Struts 2

xwork-core:2.3.30
CVE-2017-9804
—
—
Hög
SANN

SONATYPE-2017-0173
—
—
Hög
SANN

CVE-2017-7672
—
—
Hög
FALSK
Dubbel till CVE-2017-9804

SONATYPE-2016-0127
—
—
Hög
SANN

struts2-core:2.3.30
—
CVE-2016-6795
CVE-2016-6795
Hög
SANN

—
CVE-2017-9787
CVE-2017-9787
Hög
SANN

—
CVE-2017-9791
CVE-2017-9791
Hög
SANN

—
CVE-2017-9793
—
Hög
FALSK
Duplikat till CVE-2018-1327

—
CVE-2017-9804
—
Hög
SANN

—
CVE-2017-9805
CVE-2017-9805
Hög
SANN

CVE-2016-4003
—
—
Medium
FALSK
TillĂ€mpligt för Apache Struts 2.x upp till 2.3.28, men detta Ă€r version 2.3.30. ÄndĂ„, enligt beskrivningen, gĂ€ller CVE för alla versioner av Struts 2 om JRE 1.7 eller lĂ€gre anvĂ€nds. Det verkar som att man ville vara pĂ„ den sĂ€kra sidan, men det kĂ€nns mer som en FALSE

—
CVE-2018-1327
CVE-2018-1327
Hög
SANN

CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
Hög
SANN
Den sÄrbarhet som utnyttjades av angriparna i Equifax 2017

CVE-2017-12611
CVE-2017-12611
—
Hög
SANN

CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
Hög
SANN

struts-taglib:1.3.8
—
CVE-2012-0394
—
Medium
FALSK
För struts2-core

—
CVE-2013-2115
—
Hög
FALSK
För struts2-core

—
CVE-2014-0114
—
Hög
FALSK
För commons-beanutils

—
CVE-2015-0899
—
Hög
FALSK
Inte relaterat till taglib

—
CVE-2015-2992
—
Medium
FALSK
Relaterat till struts2-core

—
CVE-2016-1181
—
Hög
FALSK
Inte relaterat till taglib

—
CVE-2016-1182
—
Hög
FALSK
Inte relaterat till taglib

struts-tiles-1.3.8
—
CVE-2012-0394
—
Medium
FALSK
För struts2-core

—
CVE-2013-2115
—
Hög
FALSK
För struts2-core

—
CVE-2014-0114
—
Hög
FALSK
Under commons-beanutils

—
CVE-2015-0899
—
Hög
FALSK
Inte relaterat till tiles

—
CVE-2015-2992
—
Medium
FALSK
För struts2-core

—
CVE-2016-1181
—
Hög
FALSK
Inte relaterat till taglib

—
CVE-2016-1182
—
Hög
FALSK
Inte relaterat till taglib

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster