Značaj analize softverskih komponenti trećih strana (Software Composition Analysis - SCA) u procesu razvoja raste objavljivanjem godišnjih izvještaja o ranjivosti biblioteka otvorenog koda, koje objavljuju Synopsys, Sonatype, Snyk i White Source. . Prema izvještaju
Jedan od najilustrativnijih slučajeva
U ovom članku će se raspravljati o pitanju izbora alata za provođenje SCA sa stanovišta kvaliteta rezultata analize. Također će biti pružena funkcionalna usporedba alata. Proces integracije u CI/CD i integracijske mogućnosti biće ostavljeni za naredne publikacije. OWASP je predstavio širok spektar alata
Kako to radi
Pogledajmo kako CPE izgleda:
cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other
- Dio: Indikacija da se komponenta odnosi na aplikaciju (a), operativni sistem (o), hardver (h) (obavezno)
- Prodavac: Naziv proizvođača proizvoda (obavezno)
- proizvod: Naziv proizvoda (obavezno)
- verzija: Verzija komponente (zastarjela stavka)
- update: Ažuriranje paketa
- Izdanje: Naslijeđena verzija (zastarjela stavka)
- Jezik: Jezik definiran u RFC-5646
- SW izdanje: Verzija softvera
- Cilj SW: Softversko okruženje u kojem proizvod radi
- Target HW: Hardversko okruženje u kojem proizvod radi
- Ostalo: Informacije o dobavljaču ili proizvodu
Primjer CPE izgleda ovako:
cpe:2.3:a:pivotal_software:spring_framework:3.0.0:*:*:*:*:*:*:*
Linija znači da CPE verzija 2.3 opisuje komponentu aplikacije proizvođača pivotal_software
sa 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
- Šema: 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 imena: Neki prefiks imena, kao što je ID grupe Maven, vlasnik Docker slike, korisnik GitHub-a ili organizacija. Opciono i zavisi od vrste.
- ime: Naziv paketa (obavezno)
- verzija: Verzija paketa
- kvalifikacije: Dodatni kvalifikacioni podaci za paket, kao što su OS, arhitektura, distribucija, itd. Opciono i specifično za tip.
- Subpath: Dodatna putanja 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 BOM mogao 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 inventarizaciju softverskih komponenti u lancu snabdevanja, na primer, za obezbeđivanje softvera kupcu. 2014. je čak predložen zakon u Sjedinjenim Državama
Vraćajući se na SCA, Dependency Track ima gotove integracije sa platformama za obaveštenja kao što je Slack, sistemima 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 pruža informacije o licencama (zbog podrške za SPDX).
Ako govorimo konkretno o kvaliteti SCA, onda postoji suštinska razlika.
Dependency Track ne prihvata projekat kao ulaz, već BOM. To znači da ako želimo testirati projekat, prvo moramo generirati bom.xml, na primjer koristeći CycloneDX. Dakle, Dependency Track direktno zavisi od CycloneDX. Istovremeno, omogućava prilagođavanje. Ovo je napisao OZON tim
Hajde da sumiramo neke od funkcionalnih karakteristika, a takođe razmotrimo podržane jezike za analizu:
Jezik
Nexus IQ
Provjera zavisnosti
Dependency Track
Java
+
+
+
C / C ++
+
+
-
C#
+
+
-
.Net
+
+
+
erlang
-
-
+
JavaScript (NodeJS)
+
+
+
PHP
+
+
+
piton
+
+
+
Rubin
+
+
+
Perl
-
-
-
Scala
+
+
+
Cilj C
+
+
-
brz
+
+
-
R
+
-
-
Go
+
+
+
Funkcionalnost
Funkcionalnost
Nexus IQ
Provjera zavisnosti
Dependency Track
Mogućnost da se osigura da su komponente korištene u izvornom kodu provjerene na licenciranu čistoću
+
-
+
Mogućnost skeniranja i analiziranja ranjivosti i čistoće licence za Docker slike
+ Integracija sa Clair
-
-
Mogućnost konfigurisanja sigurnosnih politika za korištenje biblioteka otvorenog koda
+
-
-
Mogućnost skeniranja spremišta otvorenog koda u potrazi za ranjivim komponentama
+ 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 Sonatype baza podataka
+ Sonatype OSS, NPM javni savjetnici
+ Sonatype OSS, NPM Public Advisors, 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 politikama
+
-
-
Preporuke za ispravljanje ranjivosti, dostupnost linkova za popravke
+
+- (zavisi od opisa u javnim bazama podataka)
+- (zavisi od opisa u javnim bazama podataka)
Rangiranje otkrivenih ranjivosti prema ozbiljnosti
+
+
+
Model pristupa zasnovan na ulozi
+
-
+
CLI podrška
+
+
+- (samo za CycloneDX)
Uzorkovanje/sortiranje ranjivosti prema definisanim kriterijumima
+
-
+
Kontrolna tabla prema statusu aplikacije
+
-
+
Izrada izvještaja u PDF formatu
+
-
-
Generisanje izveštaja u JSONCSV formatu
+
+
-
Podrška za ruski jezik
-
-
-
Integracijske mogućnosti
Integracija
Nexus IQ
Provjera zavisnosti
Dependency Track
LDAP/Active Directory integracija
+
-
+
Integracija sa sistemom kontinuirane integracije Bamboo
+
-
-
Integracija sa sistemom kontinuirane integracije TeamCity
+
-
-
Integracija sa sistemom kontinuirane integracije GitLab
+
+- (kao dodatak za GitLab)
+
Integracija sa sistemom kontinuirane integracije Jenkins
+
+
+
Dostupnost dodataka za IDE
+ IntelliJ, Eclipse, Visual Studio
-
-
Podrška za prilagođenu integraciju putem web-servisa (API) alata
+
-
+
Provjera zavisnosti
Prvi početak
Pokrenimo Provjeru zavisnosti na namjerno ranjivoj aplikaciji
Za ovo ćemo koristiti
mvn org.owasp:dependency-check-maven:check
Kao rezultat, ovisnost-check-report.html će se pojaviti u ciljnom direktoriju.
Hajde da otvorimo fajl. Nakon sažetih informacija o ukupnom broju ranjivosti, možemo vidjeti informacije o ranjivosti sa visokim nivoom ozbiljnosti i pouzdanosti, s naznakom paketa, CPE-a i broja CVE-ova.
Slede detaljnije informacije, posebno na osnovu kojih je doneta odluka (dokazi), odnosno određeni BOM.
Zatim slijedi CPE, PURL i CVE opis. Inače, preporuke za korekciju nisu uključene zbog njihovog odsustva u bazi podataka NVD.
Da biste sistematski pregledali rezultate skeniranja, možete konfigurirati Nginx s minimalnim postavkama ili poslati rezultirajuće nedostatke sistemu za upravljanje defektima koji podržava konektore za provjeru zavisnosti. Na primjer, Defect Dojo.
Dependency Track
postavljanje
Dependency Track je, zauzvrat, web-bazirana platforma sa prikaznim grafovima, tako da se ovdje ne pojavljuje goruće pitanje pohranjivanja defekata u rješenje 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 login i lozinku, a zatim dolazimo na Dashboard. Sljedeće što ćemo uraditi je kreirati projekat za testnu aplikaciju u Javi Početna/Projekti → Kreiraj projekat . Uzmimo DVJA kao primjer.
Budući da praćenje zavisnosti može prihvatiti samo BOM kao ulaz, ovaj BOM se mora dohvatiti. Hajde da iskoristimo prednost
mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom
Dobijamo bom.xml i učitavamo fajl u kreirani projekat DVJA → Zavisnosti → Prenesi BOM.
Idemo na Administracija → Analizatori. Razumijemo da imamo samo omogućen interni analizator, koji uključuje NVD. Povežimo i Sonatype OSS Index.
Tako dobijamo sledeću sliku za naš projekat:
Također na listi možete pronaći jednu ranjivost primjenjivu na Sonatype OSS:
Glavno razočaranje je bilo to što Dependency Track više ne prihvata xml izvještaje Provjere zavisnosti. Najnovije podržane verzije integracije Provjere zavisnosti bile su 1.0.0 - 4.0.2, dok sam ja testirao 5.3.2.
ovdje
Nexus IQ
Prvi početak
Instalacija Nexus IQ dolazi iz arhive
Nakon što se prijavite na konzolu, morate kreirati organizaciju i aplikaciju.
Kao što možete vidjeti, podešavanje u slučaju IQ-a je nešto složenije, jer također moramo kreirati politike koje su primjenjive za različite “faze” (dev, build, stage, release). Ovo je neophodno da bi se blokirale ranjive komponente dok se kreću kroz cevovod bliže proizvodnji ili da bi se blokirale čim uđu u Nexus Repo kada ih preuzmu programeri.
Da biste osjetili razliku između otvorenog koda i preduzeća, izvršimo 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>
Pratite URL do generiranog izvještaja u IQ web sučelju:
Ovdje možete vidjeti sva kršenja pravila koja ukazuju na različite nivoe značaja (od informacija do kritičnih za sigurnost). Slovo D pored komponente znači da je komponenta direktna zavisnost, a slovo T pored komponente znači da je komponenta tranzitivna zavisnost, odnosno da je tranzitivna.
Usput, izvještaj
Ako otvorimo jedno od kršenja Nexus IQ pravila, možemo vidjeti opis komponente, kao i Version Graph, koji prikazuje lokaciju trenutne verzije na vremenskom grafikonu, kao i u kom trenutku ranjivost prestaje da se javlja biti ranjiv. Visina svijeća na grafikonu pokazuje popularnost korištenja ove komponente.
Ako odete u sekciju ranjivosti i proširite CVE, možete pročitati opis ove ranjivosti, preporuke za eliminaciju, kao i razlog zašto je ova komponenta prekršena, odnosno prisustvo klase DiskFileitem.class
.
Hajde da sumiramo samo one koje se odnose na Java komponente treće strane, uklanjajući js komponente. U zagradama navodimo broj ranjivosti koje su pronađene izvan NVD-a.
Ukupan Nexus IQ:
- Skenirane ovisnosti: 62
- Ranjive zavisnosti: 16
- Pronađene ranjivosti: 42 (8 sonatype db)
Potpuna provjera ovisnosti:
- Skenirane ovisnosti: 47
- Ranjive zavisnosti: 13
- Pronađene ranjivosti: 91 (14 sonatype oss)
Totalna evidencija zavisnosti:
- Skenirane ovisnosti: 59
- Ranjive zavisnosti: 10
- Pronađene ranjivosti: 51 (1 sonatype oss)
U narednim koracima analiziraćemo dobijene rezultate i utvrditi koja od ovih ranjivosti je pravi nedostatak, a koja lažno pozitivna.
Odricanje od odgovornosti
Ova recenzija nije neosporna istina. Autor nije imao za cilj da izdvoji poseban instrument na pozadini drugih. Poenta pregleda je bila da se pokažu mehanizmi rada SCA alata i načini provjere njihovih rezultata.
Poređenje rezultata
Uslovi:
Lažno pozitivan za ranjivost komponenti treće strane je:
- CVE neusklađenost sa identifikovanom komponentom
- Na primjer, ako je ranjivost identificirana u okviru struts2, a alat ukazuje na komponentu okvira struts-tiles, na koju se ova ranjivost ne odnosi, onda je to lažno pozitivno
- CVE neusklađenost sa identifikovanom verzijom komponente
- Na primjer, ranjivost je vezana za Python verziju > 3.5 i alat označava verziju 2.7 kao ranjivu - ovo je lažno pozitivno, budući da se ranjivost u stvari odnosi samo na granu proizvoda 3.x
- Duplikat CVE
- Na primjer, ako SCA specificira CVE koji omogućava RCE, tada SCA specificira CVE za istu komponentu koja se primjenjuje na Cisco proizvode na koje utiče taj RCE. U ovom slučaju će biti lažno pozitivan.
- Na primjer, CVE je pronađen u komponenti spring-web, nakon čega SCA ukazuje na isti CVE u drugim komponentama Spring Frameworka, dok CVE nema nikakve veze sa drugim komponentama. U ovom slučaju će biti lažno pozitivan.
Predmet istraživanja bio je Open Source projekat DVJA. Studija je uključivala samo java komponente (bez js-a).
Rezime rezultata
Idemo direktno na rezultate ručnog pregleda identifikovanih ranjivosti. Kompletan izvještaj za svaki CVE može se naći u Dodatku.
Rezime rezultata za sve ranjivosti:
Parametar
Nexus IQ
Provjera zavisnosti
Dependency Track
Ukupne identifikovane ranjivosti
42
91
51
Pogrešno identifikovane ranjivosti (lažno pozitivne)
2 (4.76%)
62 (68,13%)
29 (56.86%)
Nisu pronađene relevantne ranjivosti (lažno negativno)
10
20
27
Rezime rezultata po komponentama:
Parametar
Nexus IQ
Provjera zavisnosti
Dependency Track
Ukupno identifikovane komponente
62
47
59
Ukupno ranjive komponente
16
13
10
Pogrešno identificirane ranjive komponente (lažno pozitivno)
1
5
0
Pogrešno identificirane ranjive komponente (lažno pozitivno)
0
6
6
Napravimo vizuelne grafikone za procjenu omjera lažno pozitivnih i lažno negativnih prema ukupnom broju ranjivosti. Komponente su označene horizontalno, a ranjivosti identifikovane u njima su označene vertikalno.
Poređenja radi, sličnu studiju proveo je tim Sonatype testirajući projekat od 1531 komponente koristeći OWASP Dependency Check. Kao što vidimo, odnos buke i tačnih odgovora je uporediv sa našim rezultatima.
izvor:
Pogledajmo neke CVE-ove iz naših rezultata skeniranja da bismo razumjeli razlog za ove rezultate.
Pročitajte više
No.1
Hajde da prvo pogledamo neke zanimljive tačke o Sonatype Nexus IQ.
Nexus IQ ukazuje na problem sa deserijalizacijom sa mogućnošću izvođenja RCE-a u Spring Framework-u 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. U početku se čini da postoji dupliciranje ranjivosti u više CVE-ova. Jer, ako pogledate CVE-2016-1000027 i CVE-2011-2894 u bazi podataka NVD-a, čini se da je sve očigledno
Komponenta
Ranjivost
spring-web:3.0.5
CVE-2016-1000027
spring-context:3.0.5
CVE-2011-2894
spring-core:3.0.5
CVE-2011-2894
Opis
Opis
Sam CVE-2011-2894 je prilično poznat. U izvještaju RemoteInvocationSerializingExporter
u CVE-2011-2894, ranjivost je uočena u HttpInvokerServiceExporter
. Evo šta nam Nexus IQ kaže:
Međutim, u NVD-u ne postoji ništa slično, zbog čega Provjera zavisnosti i Praćenje zavisnosti dobijaju lažno negativne.
Takođe iz opisa CVE-2011-2894 može se shvatiti da je ranjivost zaista prisutna iu spring-context:3.0.5 i spring-core:3.0.5. Potvrdu za to možete pronaći u članku osobe koja je pronašla ovu ranjivost.
No.2
Komponenta
Ranjivost
rezultat
struts2-core: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 to prijavljuje. U opisu ranjivosti postoji napomena:
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 najgorim.
3
Komponenta
Ranjivost
rezultat
xwork-core:2.3.30
CVE-2017-9804
ISTINITO
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
, sa CVE-2017-9804 koji potiče iz CVE-2017-7672. Prisustvo druge ranjivosti ne nosi nikakvo korisno opterećenje osim činjenice da je njena ozbiljnost porasla na Visoku, tako da je možemo smatrati nepotrebnom bukom.
Sve u svemu, nisu pronađeni drugi lažno pozitivni rezultati za Nexus IQ.
No.4
Postoji nekoliko stvari koje IQ izdvajaju od ostalih rješenja.
Komponenta
Ranjivost
rezultat
spring-web:3.0.5
CVE-2020-5398
ISTINITO
CVE u NVD 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 CVE opis u Nexus IQ , tada ćemo vidjeti sljedeće:
Savjetodavna obavijest o odstupanju: Tim za istraživanje sigurnosti Sonatype otkrio je da je ova ranjivost uvedena u verziji 3.0.2.RELEASE, a ne u 5.0.x kao što je navedeno u upozorenju.
Nakon toga slijedi PoC za ovu ranjivost, u kojoj se navodi da je prisutna u verziji 3.0.5.
Lažno negativan se šalje u provjeru zavisnosti i praćenje zavisnosti.
No.5
Pogledajmo lažno pozitivan rezultat za provjeru zavisnosti i praćenje zavisnosti.
Provjera zavisnosti 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 ovi CVE-i ne odnose. 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, što je Dewpendency up ” 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. Ovo je zbog činjenice da je ono što je zajedničko ovim CVE-ovima i komponentama samo okvir, zbog čega je Dependency Check to smatrao ranjivom.
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 su pronašli mnogo ranjivosti koje su zapravo primjenjive na struts2-core, što je u suštini zaseban okvir. U ovom slučaju, Nexus IQ je ispravno shvatio sliku iu CVE-ovima koje je izdao je naznačilo da je struts-core došao do kraja života i da je potrebno preći na struts2-core.
No.6
U nekim situacijama, nepravedno je tumačiti očiglednu grešku Provjere zavisnosti i Praćenja zavisnosti. Konkretno, CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225 i Provjera ovisnosti pripisano spring-core:3.0.5 zapravo pripada spring-web:3.0.5. U isto vrijeme, neke od ovih CVE-ova je također pronašao Nexus IQ, međutim, IQ ih je ispravno identificirao u drugoj komponenti. Budući da ove ranjivosti nisu pronađene u spring jezgru, ne može se tvrditi da one nisu u okvirima u principu i open source alati su s pravom ukazali na ove ranjivosti (samo im je malo nedostajalo).
nalazi
Kao što vidimo, određivanje pouzdanosti identifikovanih ranjivosti ručnim pregledom ne daje jednoznačne rezultate, zbog čega se javljaju kontroverzna pitanja. Rezultati su da Nexus IQ rješenje ima najmanju stopu lažnih pozitivnih rezultata i najveću preciznost.
Prije svega, to je zbog činjenice da je Sonatype tim proširio opis svake CVE ranjivosti iz NVD-a u svojim bazama podataka, navodeći ranjivosti za određenu verziju komponenti sve do klase ili funkcije, provodeći dodatna istraživanja (npr. , provjeravanje ranjivosti na starijim verzijama softvera).
Važan uticaj na rezultate imaju i one ranjivosti koje nisu bile uključene u NVD, ali su ipak prisutne u bazi podataka Sonatype sa oznakom SONATYPE. Prema izvještaju
Kao rezultat toga, Dependency Check proizvodi mnogo buke, propuštajući neke ranjive komponente. Dependency Track proizvodi manje šuma i detektuje veliki broj komponenti, što vizuelno ne šteti očima u web interfejsu.
Međutim, praksa pokazuje da bi open source trebao postati prvi korak ka zrelom DevSecOps-u. Prva stvar o kojoj biste trebali razmišljati kada integrirate SCA u razvoj su procesi, odnosno razmišljanje zajedno sa menadžmentom i srodnim odjelima o tome kako bi idealni procesi trebali izgledati u vašoj organizaciji. Može se ispostaviti da će za vašu organizaciju na početku Dependency Check ili Dependency Track pokriti sve poslovne potrebe, a Enterprise rješenja će biti logičan nastavak zbog sve veće složenosti aplikacija koje se razvijaju.
Dodatak A: Rezultati komponenti
Legenda:
- Visoki—visoki i kritični nivoi ranjivosti u komponenti
- Srednji — Ranjivosti srednjeg nivoa kritičnosti u komponenti
- TAČNO — Istina pozitivno pitanje
- FALSE — Lažno pozitivno pitanje
Komponenta
Nexus IQ
Provjera zavisnosti
Dependency Track
rezultat
dom4j: 1.6.1
visok
visok
visok
ISTINITO
log4j-core: 2.3
visok
visok
visok
ISTINITO
log4j: 1.2.14
visok
visok
-
ISTINITO
Zajedničke kolekcije:3.1
visok
visok
visok
ISTINITO
commons-fileupload:1.3.2
visok
visok
visok
ISTINITO
commons-beanutils:1.7.0
visok
visok
visok
ISTINITO
commons-codec:1:10
srednji
-
-
ISTINITO
mysql-konektor-java:5.1.42
visok
visok
visok
ISTINITO
spring-expression:3.0.5
visok
komponenta nije pronađena
ISTINITO
spring-web:3.0.5
visok
komponenta nije pronađena
visok
ISTINITO
spring-context:3.0.5
srednji
komponenta nije pronađena
-
ISTINITO
spring-core:3.0.5
srednji
visok
visok
ISTINITO
struts2-config-browser-plugin:2.3.30
srednji
-
-
ISTINITO
spring-tx:3.0.5
-
visok
-
FALSE
struts-core:1.3.8
visok
visok
visok
ISTINITO
xwork-core: 2.3.30
visok
-
-
ISTINITO
struts2-core: 2.3.30
visok
visok
visok
ISTINITO
struts-taglib:1.3.8
-
visok
-
FALSE
podupirači-pločice-1.3.8
-
visok
-
FALSE
Dodatak B: Rezultati ranjivosti
Legenda:
- Visoki—visoki i kritični nivoi ranjivosti u komponenti
- Srednji — Ranjivosti srednjeg nivoa kritičnosti u komponenti
- TAČNO — Istina pozitivno pitanje
- FALSE — Lažno pozitivno pitanje
Komponenta
Nexus IQ
Provjera zavisnosti
Dependency Track
Težina
rezultat
komentar
dom4j: 1.6.1
CVE-2018-1000632
CVE-2018-1000632
CVE-2018-1000632
visok
ISTINITO
CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
visok
ISTINITO
log4j-core: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
visok
ISTINITO
CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
nizak
ISTINITO
log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571
-
visok
ISTINITO
-
CVE-2020-9488
-
nizak
ISTINITO
SONATYPE-2010-0053
-
-
visok
ISTINITO
Zajedničke kolekcije: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
ISTINITO
commons-fileupload:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
visok
ISTINITO
SONATYPE-2014-0173
-
-
srednji
ISTINITO
commons-beanutils:1.7.0
CVE-2014-0114
CVE-2014-0114
CVE-2014-0114
visok
ISTINITO
-
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
ISTINITO
mysql-konektor-java:5.1.42
CVE-2018-3258
CVE-2018-3258
CVE-2018-3258
visok
ISTINITO
CVE-2019-2692
CVE-2019-2692
-
srednji
ISTINITO
-
CVE-2020-2875
-
srednji
FALSE
Ista ranjivost kao CVE-2019-2692, ali sa napomenom "napadi mogu značajno uticati 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
ISTINITO
spring-expression:3.0.5
CVE-2018-1270
komponenta nije pronađena
-
visok
ISTINITO
CVE-2018-1257
-
-
srednji
ISTINITO
spring-web:3.0.5
CVE-2016-1000027
komponenta nije pronađena
-
visok
ISTINITO
CVE-2014-0225
-
CVE-2014-0225
visok
ISTINITO
CVE-2011-2730
-
-
visok
ISTINITO
-
-
CVE-2013-4152
srednji
ISTINITO
CVE-2018-1272
-
-
visok
ISTINITO
CVE-2020-5398
-
-
visok
ISTINITO
Ilustrativan primjer u korist IQ-a: „Sonatype istraživački tim za sigurnost otkrio je da je ova ranjivost uvedena u verziji 3.0.2.RELEASE, a ne u 5.0.x kako je navedeno u savjetu.“
CVE-2013-6429
-
-
srednji
ISTINITO
CVE-2014-0054
-
CVE-2014-0054
srednji
ISTINITO
CVE-2013-6430
-
-
srednji
ISTINITO
spring-context:3.0.5
CVE-2011-2894
komponenta nije pronađena
-
srednji
ISTINITO
spring-core:3.0.5
-
CVE-2011-2730
CVE-2011-2730
visok
ISTINITO
CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
srednji
ISTINITO
-
-
CVE-2013-4152
srednji
FALSE
Duplikat iste ranjivosti u spring-web
-
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-web
-
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 prolećni izraz/prolećne poruke
-
CVE-2018-1271
CVE-2018-1271
srednji
FALSE
Ranjivost se odnosi na komponentu spring-web-mvc
-
CVE-2018-1272
CVE-2018-1272
visok
ISTINITO
CVE-2014-3578
CVE-2014-3578 (OSSINDEX)
CVE-2014-3578
srednji
ISTINITO
SONATYPE-2015-0327
-
-
nizak
ISTINITO
struts2-config-browser-plugin:2.3.30
SONATYPE-2016-0104
-
-
srednji
ISTINITO
spring-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
struts-core: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
ISTINITO
-
-
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
ISTINITO
-
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
ISTINITO
-
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
ISTINITO
-
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
visok
FALSE
Ranjivost na Struts 2
xwork-core:2.3.30
CVE-2017-9804
-
-
visok
ISTINITO
SONATYPE-2017-0173
-
-
visok
ISTINITO
CVE-2017-7672
-
-
visok
FALSE
Duplikat CVE-2017-9804
SONATYPE-2016-0127
-
-
visok
ISTINITO
struts2-core:2.3.30
-
CVE-2016-6795
CVE-2016-6795
visok
ISTINITO
-
CVE-2017-9787
CVE-2017-9787
visok
ISTINITO
-
CVE-2017-9791
CVE-2017-9791
visok
ISTINITO
-
CVE-2017-9793
-
visok
FALSE
Duplikat CVE-2018-1327
-
CVE-2017-9804
-
visok
ISTINITO
-
CVE-2017-9805
CVE-2017-9805
visok
ISTINITO
CVE-2016-4003
-
-
srednji
FALSE
Primjenjivo na Apache Struts 2.x do 2.3.28, što je verzija 2.3.30. Međutim, na osnovu opisa, CVE važi za bilo koju verziju Struts 2 ako se koristi JRE 1.7 ili manje. Navodno su nas ovdje odlučili preosigurati, ali više liči na LAŽ
-
CVE-2018-1327
CVE-2018-1327
visok
ISTINITO
CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
visok
ISTINITO
Ista ranjivost koju su Equifax hakeri iskoristili 2017
CVE-2017-12611
CVE-2017-12611
-
visok
ISTINITO
CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
visok
ISTINITO
struts-taglib:1.3.8
-
CVE-2012-0394
-
srednji
FALSE
Za struts2-core
-
CVE-2013-2115
-
visok
FALSE
Za struts2-core
-
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 struts2-core
-
CVE-2013-2115
-
visok
FALSE
Za struts2-core
-
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 struts2-core
-
CVE-2016-1181
-
visok
FALSE
Ne odnosi se na taglib
-
CVE-2016-1182
-
visok
FALSE
Ne odnosi se na taglib
izvor: www.habr.com