Važnost analize softverskih komponenti trećih strana (Software Composition Analysis - SCA) u procesu razvoja raste s objavom godišnjih izvješća o ranjivostima open source biblioteka koje objavljuju Synopsys, Sonatype, Snyk i White Source . Prema izvješću
Jedan od najilustrativnijih slučajeva
Ovaj članak će raspravljati o pitanju odabira alata za provođenje SCA sa stajališta kvalitete rezultata analize. Također će biti pružena funkcionalna usporedba alata. Proces integracije u CI/CD i mogućnosti integracije bit će ostavljeni za sljedeće publikacije. OWASP je predstavio široku paletu alata
Princip rada
Pogledajmo kako CPE izgleda:
cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other
- Dio: Naznaka da se komponenta odnosi na aplikaciju (a), operativni sustav (o), hardver (h) (obavezno)
- Prodavač: Ime proizvođača proizvoda (obavezno)
- Proizvod: Naziv proizvoda (obavezno)
- Verzija: Verzija komponente (zastarjela stavka)
- Update: Ažuriranje paketa
- Izdanje: Stara verzija (zastarjela stavka)
- Jezik: Jezik definiran u RFC-5646
- SW izdanje: Verzija softvera
- Ciljani SW: Softversko okruženje u kojem proizvod radi
- Ciljani HW: Hardversko okruženje u kojem proizvod radi
- Ostalo: Podaci o dobavljaču ili proizvodu
Primjer CPE-a izgleda ovako:
cpe:2.3:a:pivotal_software:spring_framework:3.0.0:*:*:*:*:*:*:*
Redak znači da CPE verzija 2.3 opisuje aplikacijsku komponentu proizvođača pivotal_software
s naslovom spring_framework
verzija 3.0.0. Ako otvorimo ranjivost
URL također koriste SCA alati. Format URL-a paketa je sljedeći:
scheme:type/namespace/name@version?qualifiers#subpath
- Shema: Uvijek će postojati 'pkg' koji označava da je ovo URL paketa (obavezno)
- Tip: "Tip" paketa ili "protokol" paketa, kao što su maven, npm, nuget, gem, pypi itd. (Obavezna stavka)
- Prostor: Neki prefiks imena, kao što je ID Maven grupe, vlasnik Docker slike, GitHub korisnik ili organizacija. Opcionalno i ovisi o vrsti.
- Ime: Naziv paketa (obavezno)
- Verzija: Verzija paketa
- Kvalifikacije: Dodatni podaci o kvalifikaciji za paket, kao što su OS, arhitektura, distribucija, itd. Neobavezni i specifični za vrstu.
- Podput: Dodatna staza u paketu u odnosu na korijen paketa
Na primjer:
pkg:golang/google.golang.org/genproto#googleapis/api/annotations
pkg:maven/org.apache.commons/[email protected]
pkg:pypi/[email protected]
Primjer kako bi sastavnica mogla izgledati u XML formatu:
<?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 se može koristiti ne samo kao ulazni parametri za Dependency Track, već i za popis komponenti softvera u opskrbnom lancu, na primjer, za pružanje softvera kupcu. U 2014. čak je predložen zakon u Sjedinjenim Državama
Vraćajući se na SCA, Dependency Track ima gotove integracije s platformama za obavijesti kao što je Slack, sustavima za upravljanje ranjivostima kao što je Kenna Security. Također je vrijedno reći da Dependency Track, između ostalog, identificira zastarjele verzije paketa i daje informacije o licencama (zbog SPDX podrške).
Ako govorimo konkretno o kvaliteti SCA, onda postoji temeljna razlika.
Dependency Track ne prihvaća projekt kao ulaz, već BOM. To znači da ako želimo testirati projekt, prvo moramo generirati bom.xml, na primjer pomoću CycloneDX-a. Stoga je Dependency Track izravno ovisan o CycloneDX-u. Istodobno omogućuje prilagodbu. Ovo piše OZON tim
Sažmimo neke od funkcionalnih značajki, a također razmotrimo podržane jezike za analizu:
Jezik
Nexus IQ
Provjera ovisnosti
Staza ovisnosti
Java
+
+
+
C / C ++
+
+
-
C#
+
+
-
.Neto
+
+
+
erlang
-
-
+
JavaScript (NodeJS)
+
+
+
PHP
+
+
+
Piton
+
+
+
Rubin
+
+
+
Perl
-
-
-
Skala
+
+
+
Cilj C
+
+
-
Brz
+
+
-
R
+
-
-
Go
+
+
+
funkcionalnost
funkcionalnost
Nexus IQ
Provjera ovisnosti
Staza ovisnosti
Sposobnost da se osigura da komponente korištene u izvornom kodu budu provjerene za licenciranu čistoću
+
-
+
Sposobnost skeniranja i analiziranja ranjivosti i čistoće licence za Docker slike
+ Integracija s Clairom
-
-
Mogućnost konfiguriranja sigurnosnih pravila za korištenje biblioteka otvorenog koda
+
-
-
Sposobnost skeniranja repozitorija otvorenog koda za ranjive komponente
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS
-
+ Hex, RubyGems, Maven, NPM, Nuget, Pypi
Dostupnost specijalizirane istraživačke grupe
+
-
-
Rad u zatvorenoj petlji
+
+
+
Korištenje baza podataka trećih strana
+ Zatvorena baza podataka Sonatype
+ Sonatype OSS, NPM javni savjetnici
+ Sonatype OSS, NPM javni savjetnici, RetireJS, VulnDB, podrška za vlastitu bazu podataka ranjivosti
Mogućnost filtriranja komponenti otvorenog koda pri pokušaju učitavanja u razvojnu petlju prema konfiguriranim pravilima
+
-
-
Preporuke za popravljanje ranjivosti, dostupnost poveznica na popravke
+
+- (ovisi o opisu u javnim bazama podataka)
+- (ovisi o opisu u javnim bazama podataka)
Rangiranje otkrivenih ranjivosti prema ozbiljnosti
+
+
+
Model pristupa temeljen na ulogama
+
-
+
CLI podrška
+
+
+- (samo za CycloneDX)
Uzorkovanje/sortiranje ranjivosti prema definiranim kriterijima
+
-
+
Kontrolna ploča prema statusu aplikacije
+
-
+
Generiranje izvješća u PDF formatu
+
-
-
Generiranje izvješća u JSONCSV formatu
+
+
-
Podrška za ruski jezik
-
-
-
Mogućnosti integracije
integracija
Nexus IQ
Provjera ovisnosti
Staza ovisnosti
LDAP/Active Directory integracija
+
-
+
Integracija sa sustavom kontinuirane integracije Bamboo
+
-
-
Integracija sa sustavom kontinuirane integracije TeamCity
+
-
-
Integracija sa sustavom kontinuirane integracije GitLab
+
+- (kao dodatak za GitLab)
+
Integracija sa sustavom kontinuirane integracije Jenkins
+
+
+
Dostupnost dodataka za IDE
+ IntelliJ, Eclipse, Visual Studio
-
-
Podrška za prilagođenu integraciju putem web-usluga (API) alata
+
-
+
Provjera ovisnosti
Prvi početak
Pokrenimo Provjeru ovisnosti na namjerno ranjivoj aplikaciji
Za ovo ćemo koristiti
mvn org.owasp:dependency-check-maven:check
Kao rezultat toga, dependency-check-report.html će se pojaviti u ciljnom direktoriju.
Otvorimo datoteku. Nakon sažetih informacija o ukupnom broju ranjivosti, možemo vidjeti informacije o ranjivostima s visokom razinom ozbiljnosti i pouzdanosti, s naznakom paketa, CPE-a i broja CVE-ova.
Slijede detaljnije informacije, posebice temelj na kojem je odluka donesena (dokaz), odnosno određeni BOM.
Slijedi opis CPE, PURL i CVE. Usput, preporuke za ispravak nisu uključene jer ih nema u bazi podataka NVD-a.
Za sustavni pregled rezultata skeniranja, možete konfigurirati Nginx s minimalnim postavkama ili poslati nastale nedostatke sustavu za upravljanje nedostacima koji podržava konektore za provjeru ovisnosti. Na primjer, Defect Dojo.
Staza ovisnosti
Instalacija
Dependency Track je pak platforma temeljena na webu s prikaznim grafikonima, tako da se ovdje ne pojavljuje gorući problem pohranjivanja nedostataka u rješenju treće strane.
Podržane skripte za instalaciju su: Docker, WAR, Executable WAR.
Prvi početak
Idemo na URL pokrenute usluge. Prijavljujemo se preko admin/admin, mijenjamo prijavu i lozinku, a zatim dolazimo do nadzorne ploče. Sljedeća stvar koju ćemo učiniti jest izraditi projekt za testnu aplikaciju u Javi Početna/Projekti → Stvori projekt . Uzmimo DVJA kao primjer.
Budući da Dependency Track može prihvatiti samo BOM kao unos, ovaj se BOM mora dohvatiti. Iskoristimo
mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom
Dobivamo bom.xml i učitavamo datoteku u kreirani projekt DVJA → Zavisnosti → Upload BOM.
Idemo na Administracija → Analizatori. Razumijemo da imamo omogućen samo interni analizator, koji uključuje NVD. Povežimo i Sonatype OSS Index.
Dakle, dobili smo sljedeću sliku za naš projekt:
Također na popisu možete pronaći jednu ranjivost primjenjivu na Sonatype OSS:
Glavno razočarenje bilo je to što Dependency Track više ne prihvaća xml izvješća Dependency Check. Najnovije podržane verzije integracije Provjere ovisnosti bile su 1.0.0 - 4.0.2, dok sam ja testirao 5.3.2.
ovdje je
Nexus IQ
Prvi početak
Instalacija Nexusa IQ dolazi iz arhive
Nakon što se prijavite na konzolu, trebate kreirati organizaciju i aplikaciju.
Kao što vidite, postavljanje u slučaju IQ-a je nešto kompliciranije, jer također moramo kreirati pravila koja su primjenjiva za različite "faze" (dev, build, stage, release). Ovo je neophodno za blokiranje ranjivih komponenti dok se kreću kroz cjevovod bliže proizvodnji ili za njihovo blokiranje čim uđu u Nexus Repo kada ih programeri preuzmu.
Da bismo osjetili razliku između otvorenog koda i poduzeća, izvedimo isto skeniranje kroz Nexus IQ na isti način kroz 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>
Slijedite URL do generiranog izvješća u IQ web sučelju:
Ovdje možete vidjeti sva kršenja pravila koja označavaju različite razine važnosti (od informacija do sigurnosno kritičnih). Slovo D pored komponente znači da je komponenta Direct Dependency, a slovo T pored komponente znači da je komponenta Transitive Dependency, odnosno da je tranzitivna.
Usput, izvješće
Ako otvorimo jedno od kršenja pravila Nexus IQ-a, možemo vidjeti opis komponente, kao i Grafikon verzija, koji pokazuje lokaciju trenutne verzije na vremenskom grafikonu, kao i u kojem trenutku ranjivost prestaje biti ranjiv. Visina svijeća na grafikonu pokazuje popularnost korištenja ove komponente.
Ako odete na odjeljak ranjivosti i proširite CVE, možete pročitati opis ove ranjivosti, preporuke za uklanjanje, kao i razlog zašto je ova komponenta prekršena, odnosno prisutnost klase DiskFileitem.class
.
Sažejmo samo one koji se odnose na Java komponente trećih strana, uklanjajući js komponente. U zagradama navodimo broj ranjivosti koje su pronađene izvan NVD-a.
Ukupni Nexus IQ:
- Skenirane ovisnosti: 62
- Ranjive ovisnosti: 16
- Pronađene ranjivosti: 42 (8 sonatype db)
Ukupna provjera ovisnosti:
- Skenirane ovisnosti: 47
- Ranjive ovisnosti: 13
- Pronađene ranjivosti: 91 (14 sonatype oss)
Trag ukupne ovisnosti:
- Skenirane ovisnosti: 59
- Ranjive ovisnosti: 10
- Pronađene ranjivosti: 51 (1 sonatype oss)
U sljedećim koracima ćemo analizirati dobivene rezultate i otkriti koja je od ovih ranjivosti pravi nedostatak, a koja je lažno pozitivna.
Odricanje
Ova recenzija nije nepobitna istina. Autor nije imao cilj istaknuti poseban instrument na pozadini drugih. Svrha pregleda bila je pokazati mehanizme rada SCA alata i načine provjere njihovih rezultata.
Usporedba rezultata
Uvjeti:
Lažno pozitivno za ranjivosti komponente treće strane je:
- CVE neusklađenost s identificiranom komponentom
- Na primjer, ako je ranjivost identificirana u okviru struts2, a alat ukazuje na komponentu okvira struts-tiles na koju se ta ranjivost ne odnosi, tada je to lažno pozitivno
- Neusklađenost CVE-a s identificiranom verzijom komponente
- Na primjer, ranjivost je povezana s python verzijom > 3.5, a alat označava verziju 2.7 kao ranjivu - ovo je lažno pozitivno, budući da se ranjivost zapravo odnosi samo na granu proizvoda 3.x
- Duplikat CVE
- Na primjer, ako SCA navodi CVE koji omogućuje RCE, tada SCA navodi CVE za tu istu komponentu koja se primjenjuje na Cisco proizvode na koje utječe taj RCE. U ovom slučaju bit će lažno pozitivan.
- Na primjer, CVE je pronađen u spring-web komponenti, nakon čega SCA ukazuje na isti CVE u drugim komponentama Spring Frameworka, dok CVE nema nikakve veze s drugim komponentama. U ovom slučaju bit će lažno pozitivan.
Predmet istraživanja bio je Open Source projekt DVJA. Studija je uključivala samo java komponente (bez js-a).
Zbirni rezultati
Idemo odmah na rezultate ručnog pregleda identificiranih ranjivosti. Cijelo izvješće za svaki CVE može se pronaći u Dodatku.
Sažeti rezultati za sve ranjivosti:
Parametar
Nexus IQ
Provjera ovisnosti
Staza ovisnosti
Utvrđene su ukupne ranjivosti
42
91
51
Netočno identificirane ranjivosti (lažno pozitivno)
2 (4.76%)
62 (68,13%)
29 (56.86%)
Nisu pronađene relevantne ranjivosti (lažno negativno)
10
20
27
Zbirni rezultati po komponentama:
Parametar
Nexus IQ
Provjera ovisnosti
Staza ovisnosti
Ukupno identificirane komponente
62
47
59
Ukupno ranjive komponente
16
13
10
Netočno identificirane ranjive komponente (lažno pozitivno)
1
5
0
Netočno identificirane ranjive komponente (lažno pozitivno)
0
6
6
Izgradimo vizualne grafikone za procjenu omjera lažno pozitivnih i lažno negativnih u ukupnom broju ranjivosti. Komponente su označene vodoravno, a ranjivosti identificirane u njima su označene okomito.
Za usporedbu, sličnu studiju proveo je tim Sonatype testirajući projekt od 1531 komponente koristeći OWASP Dependency Check. Kao što vidimo, omjer šuma i točnih odgovora usporediv je s našim rezultatima.
Izvor:
Pogledajmo neke CVE-ove iz naših rezultata skeniranja kako bismo razumjeli razlog za te rezultate.
Više
№ 1
Prvo pogledajmo neke zanimljive točke o Sonatype Nexus IQ.
Nexus IQ ukazuje na problem deserijalizacije s mogućnošću izvođenja RCE-a u Spring Frameworku više puta. CVE-2016-1000027 u spring-web:3.0.5 prvi put, i CVE-2011-2894 u spring-context:3.0.5 i spring-core:3.0.5. Isprva se čini da postoji dupliciranje ranjivosti u više CVE-ova. Jer, ako pogledate CVE-2016-1000027 i CVE-2011-2894 u NVD bazi, čini se da je sve očito
sastavni dio
Ranjivost
proljeće-web:3.0.5
CVE-2016-1000027
proljeće-kontekst:3.0.5
CVE-2011-2894
opruga-jezgra:3.0.5
CVE-2011-2894
Opis
Opis
Sam CVE-2011-2894 prilično je poznat. U izvješću RemoteInvocationSerializingExporter
u CVE-2011-2894, ranjivost je uočena u HttpInvokerServiceExporter
. Evo što nam Nexus IQ govori:
Međutim, ne postoji ništa slično u NVD-u, zbog čega Provjera ovisnosti i Praćenje ovisnosti dobivaju lažno negativne rezultate.
Također iz opisa CVE-2011-2894 može se razumjeti da je ranjivost doista prisutna iu spring-context:3.0.5 i spring-core:3.0.5. Potvrda za to može se naći u članku osobe koja je pronašla ovu ranjivost.
№ 2
sastavni dio
Ranjivost
Rezultirati
podupirači2-jezgra:2.3.30
CVE-2016-4003
FALSE
Ako proučimo ranjivost CVE-2016-4003, shvatit ćemo da je popravljena u verziji 2.3.28, međutim, Nexus IQ nam je prijavljuje. Postoji napomena u opisu ranjivosti:
Odnosno, ranjivost postoji samo u kombinaciji sa zastarjelom verzijom JRE-a, na koju su nas odlučili upozoriti. Ipak, ovo smatramo lažno pozitivnim, iako ne i najgorim.
Ne. 3
sastavni dio
Ranjivost
Rezultirati
xwork-core:2.3.30
CVE-2017-9804
TRUE
xwork-core:2.3.30
CVE-2017-7672
FALSE
Ako pogledamo opise CVE-2017-9804 i CVE-2017-7672, shvatit ćemo da je problem URLValidator class
, s CVE-2017-9804 koji proizlazi iz CVE-2017-7672. Prisutnost druge ranjivosti ne nosi nikakvo korisno opterećenje osim činjenice da je njezina ozbiljnost povećana na Visoku, pa je možemo smatrati nepotrebnom bukom.
Općenito, nisu pronađeni drugi lažno pozitivni rezultati za Nexus IQ.
№ 4
Nekoliko je stvari po kojima se IQ izdvaja od ostalih rješenja.
sastavni dio
Ranjivost
Rezultirati
proljeće-web:3.0.5
CVE-2020-5398
TRUE
CVE u NVD-u navodi da se odnosi samo na verzije 5.2.x prije 5.2.3, 5.1.x prije 5.1.13 i verzije 5.0.x prije 5.0.16, međutim, ako pogledamo opis CVE-a u Nexusu IQ , tada ćemo vidjeti sljedeće:
Savjetodavna obavijest o odstupanju: Sonatype sigurnosni istraživački tim je otkrio da je ova ranjivost uvedena u verziji 3.0.2.RELEASE, a ne 5.0.x kako je navedeno u upozorenju.
Nakon toga slijedi PoC za ovu ranjivost, koji navodi da je prisutna u verziji 3.0.5.
Lažno negativan se šalje u Provjeru ovisnosti i Praćenje ovisnosti.
№ 5
Pogledajmo lažno pozitivno za Provjeru ovisnosti i Praćenje ovisnosti.
Provjera ovisnosti ističe se po tome što odražava one CVE-ove koji se primjenjuju na cijeli okvir u NVD-u na one komponente na koje se ti CVE-ovi ne primjenjuju. Ovo se odnosi na CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, koja je Provjera ovisnosti “zeznula ” na struts-taglib:1.3.8 i struts-tiles-1.3.8. Ove komponente nemaju nikakve veze s onim što je opisano u CVE-u - obrada zahtjeva, provjera valjanosti stranice i tako dalje. To je zbog činjenice da je ono što je zajedničko tim CVE-ovima i komponentama samo okvir, zbog čega ga je Dependency Check smatrao ranjivošću.
Ista situacija je sa spring-tx:3.0.5, a slična situacija sa struts-core:1.3.8. Za struts-core, Dependency Check i Dependency Track pronašli su puno ranjivosti koje su zapravo primjenjive na struts2-core, koji je u biti zaseban okvir. U ovom slučaju, Nexus IQ je ispravno shvatio sliku i u CVE-ovima koje je izdao, naznačio je da je struts-core došao do kraja životnog vijeka i da je potrebno prijeći na struts2-core.
№ 6
U nekim situacijama nije pošteno tumačiti očitu pogrešku Provjera ovisnosti i Praćenja ovisnosti. Konkretno CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, koja provjera ovisnosti i praćenje ovisnosti pripisano spring-core:3.0.5 zapravo pripada spring-web:3.0.5. U isto vrijeme, neke od tih CVE-ova također je pronašao Nexus IQ, međutim, IQ ih je ispravno identificirao s drugom komponentom. Budući da ove ranjivosti nisu pronađene u spring-core-u, ne može se tvrditi da one nisu u okviru u načelu, a alati otvorenog koda s pravom su ukazali na te ranjivosti (samo su malo promašili).
Zaključci
Kao što vidimo, određivanje pouzdanosti identificiranih ranjivosti ručnim pregledom ne daje jednoznačne rezultate, zbog čega se javljaju kontroverzna pitanja. Rezultati su da rješenje Nexus IQ ima najnižu stopu lažno pozitivnih rezultata i najveću točnost.
Prije svega, to je zbog činjenice da je tim Sonatype-a proširio opis za svaku CVE ranjivost iz NVD-a u svojim bazama podataka, navodeći ranjivosti za određenu verziju komponenti do klase ili funkcije, provodeći dodatna istraživanja (npr. , provjera ranjivosti na starijim verzijama softvera).
Važan utjecaj na rezultate imaju i one ranjivosti koje nisu bile uključene u NVD, ali su ipak prisutne u bazi podataka Sonatype s oznakom SONATYPE. Prema izvješću
Kao rezultat toga, Provjera ovisnosti proizvodi mnogo buke, nedostajući neke ranjive komponente. Dependency Track proizvodi manje buke i detektira veliki broj komponenti, što vizualno ne boli oči u web sučelju.
Međutim, praksa pokazuje da bi otvoreni kod trebao postati prvi korak prema zrelom DevSecOps-u. Prva stvar o kojoj biste trebali razmišljati kada integrirate SCA u razvoj su procesi, odnosno razmišljati zajedno s menadžmentom i povezanim odjelima o tome kako bi idealni procesi trebali izgledati u vašoj organizaciji. Može se ispostaviti da će za vašu organizaciju isprva Dependency Check ili Dependency Track pokriti sve poslovne potrebe, a da će Enterprise rješenja biti logičan nastavak zbog sve veće složenosti aplikacija koje se razvijaju.
Dodatak A: Rezultati komponente
Simboli:
- Visoka—ranjivosti visoke i kritične razine u komponenti
- Srednje — Ranjivosti srednje razine kritičnosti u komponenti
- TRUE — Istinski pozitivan problem
- FALSE — Lažno pozitivan problem
sastavni dio
Nexus IQ
Provjera ovisnosti
Staza ovisnosti
Rezultirati
dom4j: 1.6.1
visok
visok
visok
TRUE
log4j-jezgra: 2.3
visok
visok
visok
TRUE
log4j: 1.2.14
visok
visok
-
TRUE
zajedničke zbirke: 3.1
visok
visok
visok
TRUE
commons-fileupload:1.3.2
visok
visok
visok
TRUE
commons-beanutils:1.7.0
visok
visok
visok
TRUE
commons-codec:1:10
Srednji
-
-
TRUE
mysql-connector-java:5.1.42
visok
visok
visok
TRUE
proljeće-izraz:3.0.5
visok
komponenta nije pronađena
TRUE
proljeće-web:3.0.5
visok
komponenta nije pronađena
visok
TRUE
proljeće-kontekst:3.0.5
Srednji
komponenta nije pronađena
-
TRUE
opruga-jezgra:3.0.5
Srednji
visok
visok
TRUE
struts2-config-browser-plugin:2.3.30
Srednji
-
-
TRUE
proljeće-tx:3.0.5
-
visok
-
FALSE
podupirači-jezgra:1.3.8
visok
visok
visok
TRUE
xwork-core: 2.3.30
visok
-
-
TRUE
podupirači2-jezgra: 2.3.30
visok
visok
visok
TRUE
struts-taglib:1.3.8
-
visok
-
FALSE
podupirači-pločice-1.3.8
-
visok
-
FALSE
Dodatak B: Rezultati ranjivosti
Simboli:
- Visoka—ranjivosti visoke i kritične razine u komponenti
- Srednje — Ranjivosti srednje razine kritičnosti u komponenti
- TRUE — Istinski pozitivan problem
- FALSE — Lažno pozitivan problem
sastavni dio
Nexus IQ
Provjera ovisnosti
Staza ovisnosti
Ozbiljnost
Rezultirati
Komentirati
dom4j: 1.6.1
CVE-2018-1000632
CVE-2018-1000632
CVE-2018-1000632
visok
TRUE
CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
visok
TRUE
log4j-jezgra: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
visok
TRUE
CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
Nizak
TRUE
log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571
-
visok
TRUE
-
CVE-2020-9488
-
Nizak
TRUE
SONATYPE-2010-0053
-
-
visok
TRUE
zajedničke zbirke: 3.1
-
CVE-2015-6420
CVE-2015-6420
visok
FALSE
Duplikati RCE(OSSINDEX)
-
CVE-2017-15708
CVE-2017-15708
visok
FALSE
Duplikati RCE(OSSINDEX)
SONATYPE-2015-0002
RCE (OSSINDEX)
RCE(OSSINDEX)
visok
TRUE
commons-fileupload:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
visok
TRUE
SONATYPE-2014-0173
-
-
Srednji
TRUE
commons-beanutils:1.7.0
CVE-2014-0114
CVE-2014-0114
CVE-2014-0114
visok
TRUE
-
CVE-2019-10086
CVE-2019-10086
visok
FALSE
Ranjivost se odnosi samo na verzije 1.9.2+
commons-codec:1:10
SONATYPE-2012-0050
-
-
Srednji
TRUE
mysql-connector-java:5.1.42
CVE-2018-3258
CVE-2018-3258
CVE-2018-3258
visok
TRUE
CVE-2019-2692
CVE-2019-2692
-
Srednji
TRUE
-
CVE-2020-2875
-
Srednji
FALSE
Ista ranjivost kao CVE-2019-2692, ali s napomenom "napadi mogu značajno utjecati na dodatne proizvode"
-
CVE-2017-15945
-
visok
FALSE
Nije relevantno za mysql-connector-java
-
CVE-2020-2933
-
Nizak
FALSE
Duplikat CVE-2020-2934
CVE-2020-2934
CVE-2020-2934
-
Srednji
TRUE
proljeće-izraz:3.0.5
CVE-2018-1270
komponenta nije pronađena
-
visok
TRUE
CVE-2018-1257
-
-
Srednji
TRUE
proljeće-web:3.0.5
CVE-2016-1000027
komponenta nije pronađena
-
visok
TRUE
CVE-2014-0225
-
CVE-2014-0225
visok
TRUE
CVE-2011-2730
-
-
visok
TRUE
-
-
CVE-2013-4152
Srednji
TRUE
CVE-2018-1272
-
-
visok
TRUE
CVE-2020-5398
-
-
visok
TRUE
Ilustrativan primjer u korist IQ-a: "Tim za istraživanje sigurnosti Sonatype otkrio je da je ova ranjivost uvedena u verziji 3.0.2.RELEASE, a ne 5.0.x kako je navedeno u uputama."
CVE-2013-6429
-
-
Srednji
TRUE
CVE-2014-0054
-
CVE-2014-0054
Srednji
TRUE
CVE-2013-6430
-
-
Srednji
TRUE
proljeće-kontekst:3.0.5
CVE-2011-2894
komponenta nije pronađena
-
Srednji
TRUE
opruga-jezgra:3.0.5
-
CVE-2011-2730
CVE-2011-2730
visok
TRUE
CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
Srednji
TRUE
-
-
CVE-2013-4152
Srednji
FALSE
Duplikat iste ranjivosti u spring-webu
-
CVE-2013-4152
-
Srednji
FALSE
Ranjivost se odnosi na komponentu spring-web
-
CVE-2013-6429
CVE-2013-6429
Srednji
FALSE
Ranjivost se odnosi na komponentu spring-web
-
CVE-2013-6430
-
Srednji
FALSE
Ranjivost se odnosi na komponentu spring-web
-
CVE-2013-7315
CVE-2013-7315
Srednji
FALSE
SPLIT iz CVE-2013-4152. + Ranjivost se odnosi na komponentu spring-web
-
CVE-2014-0054
CVE-2014-0054
Srednji
FALSE
Ranjivost se odnosi na komponentu spring-web
-
CVE-2014-0225
-
visok
FALSE
Ranjivost se odnosi na komponentu spring-web
-
-
CVE-2014-0225
visok
FALSE
Duplikat iste ranjivosti u spring-webu
-
CVE-2014-1904
CVE-2014-1904
Srednji
FALSE
Ranjivost se odnosi na komponentu spring-web-mvc
-
CVE-2014-3625
CVE-2014-3625
Srednji
FALSE
Ranjivost se odnosi na komponentu spring-web-mvc
-
CVE-2016-9878
CVE-2016-9878
visok
FALSE
Ranjivost se odnosi na komponentu spring-web-mvc
-
CVE-2018-1270
CVE-2018-1270
visok
FALSE
Za proljetni izraz/proljetne poruke
-
CVE-2018-1271
CVE-2018-1271
Srednji
FALSE
Ranjivost se odnosi na komponentu spring-web-mvc
-
CVE-2018-1272
CVE-2018-1272
visok
TRUE
CVE-2014-3578
CVE-2014-3578 (OSSINDEX)
CVE-2014-3578
Srednji
TRUE
SONATYPE-2015-0327
-
-
Nizak
TRUE
struts2-config-browser-plugin:2.3.30
SONATYPE-2016-0104
-
-
Srednji
TRUE
proljeće-tx:3.0.5
-
CVE-2011-2730
-
visok
FALSE
Ranjivost nije specifična za spring-tx
-
CVE-2011-2894
-
visok
FALSE
Ranjivost nije specifična za spring-tx
-
CVE-2013-4152
-
Srednji
FALSE
Ranjivost nije specifična za spring-tx
-
CVE-2013-6429
-
Srednji
FALSE
Ranjivost nije specifična za spring-tx
-
CVE-2013-6430
-
Srednji
FALSE
Ranjivost nije specifična za spring-tx
-
CVE-2013-7315
-
Srednji
FALSE
Ranjivost nije specifična za spring-tx
-
CVE-2014-0054
-
Srednji
FALSE
Ranjivost nije specifična za spring-tx
-
CVE-2014-0225
-
visok
FALSE
Ranjivost nije specifična za spring-tx
-
CVE-2014-1904
-
Srednji
FALSE
Ranjivost nije specifična za spring-tx
-
CVE-2014-3625
-
Srednji
FALSE
Ranjivost nije specifična za spring-tx
-
CVE-2016-9878
-
visok
FALSE
Ranjivost nije specifična za spring-tx
-
CVE-2018-1270
-
visok
FALSE
Ranjivost nije specifična za spring-tx
-
CVE-2018-1271
-
Srednji
FALSE
Ranjivost nije specifična za spring-tx
-
CVE-2018-1272
-
Srednji
FALSE
Ranjivost nije specifična za spring-tx
podupirači-jezgra:1.3.8
-
CVE-2011-5057 (OSSINDEX)
Srednji
FASLE
Ranjivost na Struts 2
-
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
visok
FALSE
Ranjivost na Struts 2
-
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
Srednji
FALSE
Ranjivost na Struts 2
-
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
visok
FALSE
Ranjivost na Struts 2
CVE-2016-1182
3VE-2016-1182
-
visok
TRUE
-
-
CVE-2011-5057
Srednji
FALSE
Ranjivost na Struts 2
-
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
visok
FALSE
Ranjivost na Struts 2
-
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
Srednji
FALSE
Ranjivost na Struts 2
CVE-2015-0899
CVE-2015-0899
-
visok
TRUE
-
CVE-2012-0394
CVE-2012-0394
Srednji
FALSE
Ranjivost na Struts 2
-
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
visok
FALSE
Ranjivost na Struts 2
-
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
visok
FALSE
Ranjivost na Struts 2
-
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
visok
FASLE
Ranjivost na Struts 2
-
CVE-2013-2115
CVE-2013-2115
visok
FASLE
Ranjivost na Struts 2
-
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
visok
FASLE
Ranjivost na Struts 2
-
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
visok
FASLE
Ranjivost na Struts 2
CVE-2014-0114
CVE-2014-0114
-
visok
TRUE
-
CVE-2015-2992
CVE-2015-2992
Srednji
FALSE
Ranjivost na Struts 2
-
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
visok
FALSE
Ranjivost na Struts 2
CVE-2016-1181
CVE-2016-1181
-
visok
TRUE
-
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
visok
FALSE
Ranjivost na Struts 2
xwork-core:2.3.30
CVE-2017-9804
-
-
visok
TRUE
SONATYPE-2017-0173
-
-
visok
TRUE
CVE-2017-7672
-
-
visok
FALSE
Duplikat CVE-2017-9804
SONATYPE-2016-0127
-
-
visok
TRUE
podupirači2-jezgra:2.3.30
-
CVE-2016-6795
CVE-2016-6795
visok
TRUE
-
CVE-2017-9787
CVE-2017-9787
visok
TRUE
-
CVE-2017-9791
CVE-2017-9791
visok
TRUE
-
CVE-2017-9793
-
visok
FALSE
Duplikat CVE-2018-1327
-
CVE-2017-9804
-
visok
TRUE
-
CVE-2017-9805
CVE-2017-9805
visok
TRUE
CVE-2016-4003
-
-
Srednji
FALSE
Primjenjivo na Apache Struts 2.x do 2.3.28, što je verzija 2.3.30. Međutim, na temelju opisa, CVE je valjan za bilo koju verziju Strutsa 2 ako se koristi JRE 1.7 ili stariji. Očito su nas ovdje odlučili reosigurati, ali više izgleda kao LAŽ
-
CVE-2018-1327
CVE-2018-1327
visok
TRUE
CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
visok
TRUE
Ista ranjivost koju su hakeri Equifaxa iskoristili 2017
CVE-2017-12611
CVE-2017-12611
-
visok
TRUE
CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
visok
TRUE
struts-taglib:1.3.8
-
CVE-2012-0394
-
Srednji
FALSE
Za podupirače2-jezgre
-
CVE-2013-2115
-
visok
FALSE
Za podupirače2-jezgre
-
CVE-2014-0114
-
visok
FALSE
Za commons-beanutils
-
CVE-2015-0899
-
visok
FALSE
Ne odnosi se na taglib
-
CVE-2015-2992
-
Srednji
FALSE
Odnosi se na struts2-core
-
CVE-2016-1181
-
visok
FALSE
Ne odnosi se na taglib
-
CVE-2016-1182
-
visok
FALSE
Ne odnosi se na taglib
podupirači-pločice-1.3.8
-
CVE-2012-0394
-
Srednji
FALSE
Za podupirače2-jezgre
-
CVE-2013-2115
-
visok
FALSE
Za podupirače2-jezgre
-
CVE-2014-0114
-
visok
FALSE
Pod commons-beanutils
-
CVE-2015-0899
-
visok
FALSE
Ne odnosi se na pločice
-
CVE-2015-2992
-
Srednji
FALSE
Za podupirače2-jezgre
-
CVE-2016-1181
-
visok
FALSE
Ne odnosi se na taglib
-
CVE-2016-1182
-
visok
FALSE
Ne odnosi se na taglib
Izvor: www.habr.com