Trešo pušu programmatūras komponentu analīzes nozīme (Software Composition Analysis — SCA) izstrādes procesā pieaug līdz ar ikgadējo ziņojumu izlaišanu par atvērtā pirmkoda bibliotēku ievainojamībām, ko publicē Synopsys, Sonatype, Snyk un White Source. . Saskaņā ar ziņojumu
Viens no ilustratīvākajiem gadījumiem
Šajā rakstā tiks apspriests jautājums par SCA veikšanas rīka izvēli no analīzes rezultātu kvalitātes viedokļa. Tiks nodrošināts arī instrumentu funkcionāls salīdzinājums. Integrācijas process CI/CD un integrācijas iespējas tiks atstāts nākamajām publikācijām. OWASP prezentēja plašu rīku klāstu
Kā tas darbojas
Apskatīsim, kā izskatās CPE:
cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other
- daļa: Norāde, ka komponents ir saistīts ar lietojumprogrammu (a), operētājsistēmu (o), aparatūru (h) (obligāti)
- Pārdevējs: Produkta ražotāja nosaukums (obligāts)
- Produkts: Produkta nosaukums (obligāts)
- Versija: Komponenta versija (novecojis vienums)
- Update: Pakotnes atjauninājums
- valodā: Mantotā versija (novecojis vienums)
- Valoda: Valoda definēta RFC-5646
- SW izdevums: Programmatūras versija
- Mērķa SW: Programmatūras vide, kurā produkts darbojas
- Mērķa HW: Aparatūras vide, kurā produkts darbojas
- Cits: Informācija par piegādātāju vai produktu
CPE piemērs izskatās šādi:
cpe:2.3:a:pivotal_software:spring_framework:3.0.0:*:*:*:*:*:*:*
Līnija nozīmē, ka CPE versija 2.3 apraksta lietojumprogrammas komponentu no ražotāja pivotal_software
ar virsrakstu spring_framework
versija 3.0.0. Ja mēs atveram ievainojamību
URL izmanto arī SCA rīki. Pakotnes URL formāts ir šāds:
scheme:type/namespace/name@version?qualifiers#subpath
- Shēma: Vienmēr būs “pkg”, kas norāda, ka šis ir pakotnes URL (obligāts)
- Tips: Pakas "tips" vai iepakojuma "protokols", piemēram, maven, npm, nuget, gem, pypi utt. (obligāti)
- Vārdtelpa: Daži nosaukuma prefiksi, piemēram, Maven grupas ID, Docker attēla īpašnieks, GitHub lietotājs vai organizācija. Pēc izvēles un atkarīgs no veida.
- nosaukums: Pakotnes nosaukums (obligāts)
- Versija: Pakas versija
- Kvalificējušies: Papildu pakotnes kvalifikācijas dati, piemēram, OS, arhitektūra, izplatīšana utt. Pēc izvēles un tipam.
- Apakšceļš: Papildu ceļš pakotnē attiecībā pret pakotnes sakni
Piemēram:
pkg:golang/google.golang.org/genproto#googleapis/api/annotations
pkg:maven/org.apache.commons/[email protected]
pkg:pypi/[email protected]
Piemērs tam, kā varētu izskatīties MK XML formātā:
<?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 var izmantot ne tikai kā Dependency Track ievades parametrus, bet arī programmatūras komponentu inventarizāciju piegādes ķēdē, piemēram, programmatūras nodrošināšanai klientam. 2014. gadā ASV pat tika ierosināts likums
Atgriežoties pie SCA, Dependency Track ir gatavas integrācijas ar paziņojumu platformām, piemēram, Slack, un ievainojamības pārvaldības sistēmām, piemēram, Kenna Security. Ir arī vērts teikt, ka Dependency Track, cita starpā, identificē novecojušas pakotņu versijas un sniedz informāciju par licencēm (pateicoties SPDX atbalstam).
Ja mēs runājam tieši par SCA kvalitāti, tad ir būtiska atšķirība.
Dependency Track nepieņem projektu kā ievadi, bet gan MK. Tas nozīmē, ka, ja mēs vēlamies pārbaudīt projektu, mums vispirms ir jāģenerē bom.xml, piemēram, izmantojot CycloneDX. Tādējādi Dependency Track ir tieši atkarīgs no CycloneDX. Tajā pašā laikā tas ļauj pielāgot. Tā rakstīja OZON komanda
Apkoposim dažas funkcionālās funkcijas, kā arī analizēsim atbalstītās valodas:
Valoda
Nexus IQ
Atkarības pārbaude
Atkarības trase
Java
+
+
+
C / C ++
+
+
Sākot no
C#
+
+
Sākot no
.Tīkls
+
+
+
Erlang
Sākot no
Sākot no
+
JavaScript (NodeJS)
+
+
+
PHP
+
+
+
Pitons
+
+
+
rubīns
+
+
+
Perl
Sākot no
Sākot no
Sākot no
Scala
+
+
+
Mērķis C
+
+
Sākot no
Swift kods
+
+
Sākot no
R
+
Sākot no
Sākot no
Go
+
+
+
Funkcionalitāte
Funkcionalitāte
Nexus IQ
Atkarības pārbaude
Atkarības trase
Iespēja nodrošināt, ka avota kodā izmantoto komponentu tīrība tiek pārbaudīta pēc licences
+
Sākot no
+
Iespēja skenēt un analizēt ievainojamības un licencēt Docker attēlu tīrību
+ Integrācija ar Clair
Sākot no
Sākot no
Spēja konfigurēt drošības politikas, lai izmantotu atvērtā pirmkoda bibliotēkas
+
Sākot no
Sākot no
Iespēja skenēt atvērtā pirmkoda repozitorijus, lai atrastu neaizsargātus komponentus
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS
Sākot no
+ Hex, RubyGems, Maven, NPM, Nuget, Pypi
Specializētas pētniecības grupas pieejamība
+
Sākot no
Sākot no
Slēgtā cikla darbība
+
+
+
Izmantojot trešās puses datu bāzes
+ Slēgta Sonatype datu bāze
+ Sonatype OSS, NPM Public Advisors
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, atbalsts savai ievainojamību datubāzei
Iespēja filtrēt atvērtā pirmkoda komponentus, mēģinot ielādēt izstrādes ciklā saskaņā ar konfigurētām politikām
+
Sākot no
Sākot no
Ievainojamību novēršanas ieteikumi, labojumu saišu pieejamība
+
+- (atkarīgs no apraksta publiskajās datu bāzēs)
+- (atkarīgs no apraksta publiskajās datu bāzēs)
Atklāto ievainojamību sakārtošana pēc smaguma pakāpes
+
+
+
Uz lomu balstīts piekļuves modelis
+
Sākot no
+
CLI atbalsts
+
+
+- (tikai CycloneDX)
Ievainojamību paraugu ņemšana/šķirošana pēc noteiktiem kritērijiem
+
Sākot no
+
Informācijas panelis pēc lietojumprogrammas statusa
+
Sākot no
+
Pārskatu ģenerēšana PDF formātā
+
Sākot no
Sākot no
Pārskatu ģenerēšana JSONCSV formātā
+
+
Sākot no
Krievu valodas atbalsts
Sākot no
Sākot no
Sākot no
Integrācijas iespējas
Integrācija
Nexus IQ
Atkarības pārbaude
Atkarības trase
LDAP/Active Directory integrācija
+
Sākot no
+
Integrācija ar nepārtrauktas integrācijas sistēmu Bamboo
+
Sākot no
Sākot no
Integrācija ar nepārtrauktas integrācijas sistēmu TeamCity
+
Sākot no
Sākot no
Integrācija ar nepārtrauktas integrācijas sistēmu GitLab
+
+- (kā GitLab spraudnis)
+
Integrācija ar nepārtrauktas integrācijas sistēmu Jenkins
+
+
+
IDE spraudņu pieejamība
+ IntelliJ, Eclipse, Visual Studio
Sākot no
Sākot no
Atbalsts pielāgotai integrācijai, izmantojot rīka tīmekļa pakalpojumus (API).
+
Sākot no
+
Atkarības pārbaude
Pirmais sākums
Palaidīsim atkarības pārbaudi apzināti ievainojamai lietojumprogrammai
Šim nolūkam mēs izmantosim
mvn org.owasp:dependency-check-maven:check
Rezultātā dependency-check-report.html tiks parādīts mērķa direktorijā.
Atvērsim failu. Pēc kopsavilkuma informācijas par kopējo ievainojamību skaitu, mēs varam redzēt informāciju par ievainojamībām ar augstu smaguma un pārliecības līmeni, norādot paketi, CPE un CVE skaitu.
Tālāk ir sniegta sīkāka informācija, jo īpaši pamatojums, uz kura tika pieņemts lēmums (pierādījumi), tas ir, noteikta BOM.
Tālāk seko CPE, PURL un CVE apraksts. Starp citu, ieteikumi labošanai nav iekļauti to trūkuma dēļ NVD datu bāzē.
Lai sistemātiski skatītu skenēšanas rezultātus, varat konfigurēt Nginx ar minimāliem iestatījumiem vai nosūtīt radušos defektus uz defektu pārvaldības sistēmu, kas atbalsta savienotājus uz atkarības pārbaudi. Piemēram, Defect Dojo.
Atkarības trase
Uzstādīšana
Dependency Track savukārt ir tīmekļa platforma ar displeja grafikiem, tāpēc aktuāla problēma par defektu saglabāšanu trešās puses risinājumā šeit nerodas.
Instalēšanai atbalstītie skripti ir: Docker, WAR, Executable WAR.
Pirmais sākums
Mēs pārejam uz darbojošā pakalpojuma URL. Mēs piesakāmies, izmantojot admin/admin, mainām pieteikumvārdu un paroli un pēc tam nonākam informācijas panelī. Nākamā lieta, ko mēs darīsim, ir izveidot projektu Java testa lietojumprogrammai Sākums/Projekti → Izveidot projektu . Ņemsim par piemēru DVJA.
Tā kā Dependency Track var pieņemt tikai MK kā ievadi, šī MK ir jāizgūst. Izmantosim priekšrocības
mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom
Mēs iegūstam bom.xml un ielādējam failu izveidotajā projektā DVJA → Atkarības → Augšupielādēt MK.
Dosimies uz Administrēšana → Analizatori. Mēs saprotam, ka mums ir iespējots tikai iekšējais analizators, kas ietver NVD. Savienosim arī Sonatype OSS Index.
Tādējādi mēs iegūstam šādu mūsu projekta attēlu:
Sarakstā varat atrast arī vienu ievainojamību, kas attiecas uz Sonatype OSS:
Galvenā vilšanās bija tā, ka Dependency Track vairs nepieņem Dependency Check xml pārskatus. Atkarības pārbaudes integrācijas jaunākās atbalstītās versijas bija 1.0.0–4.0.2, kamēr es testēju 5.3.2.
šeit ir
Nexus IQ
Pirmais sākums
Nexus IQ instalēšana nāk no arhīviem
Pēc pieteikšanās konsolē jums ir jāizveido organizācija un lietojumprogramma.
Kā redzat, iestatīšana IQ gadījumā ir nedaudz sarežģītāka, jo mums ir arī jāizveido politikas, kas ir piemērojamas dažādiem “posmiem” (izstrādātājs, būve, stadija, izlaišana). Tas ir nepieciešams, lai bloķētu neaizsargātos komponentus, kad tie pārvietojas pa konveijeru tuvāk ražošanai, vai bloķētu tos, tiklīdz tie nonāk Nexus Repo, kad izstrādātāji tos lejupielādējuši.
Lai sajustu atšķirību starp atvērto avotu un uzņēmumu, veiksim to pašu skenēšanu, izmantojot Nexus IQ tādā pašā veidā 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>
Sekojiet ģenerētā pārskata vietrādim URL IQ tīmekļa saskarnē:
Šeit jūs varat redzēt visus politikas pārkāpumus, kas norāda uz dažādiem nozīmīguma līmeņiem (no informācijas līdz drošībai kritiski). Burts D blakus komponentam nozīmē, ka komponents ir tiešā atkarība, un burts T blakus komponentam nozīmē, ka komponents ir pārejas atkarība, tas ir, tas ir pārejošs.
Starp citu, ziņojums
Ja mēs atveram kādu no Nexus IQ politikas pārkāpumiem, mēs varam redzēt komponenta aprakstu, kā arī versiju diagrammu, kas parāda pašreizējās versijas atrašanās vietu laika grafikā, kā arī to, kurā brīdī ievainojamība beidz darboties. būt neaizsargātam. Sveču augstums grafikā parāda šī komponenta izmantošanas popularitāti.
Ja dodaties uz ievainojamību sadaļu un izvēršat CVE, varat izlasīt šīs ievainojamības aprakstu, ieteikumus tās novēršanai, kā arī iemeslu, kāpēc šis komponents tika pārkāpts, tas ir, klases klātbūtne. DiskFileitem.class
.
Apkoposim tikai tos, kas saistīti ar trešās puses Java komponentiem, noņemot js komponentus. Iekavās mēs norādām ievainojamību skaitu, kas tika atrastas ārpus NVD.
Kopējais Nexus IQ:
- Skenētās atkarības: 62
- Neaizsargātas atkarības: 16
- Atrastās ievainojamības: 42 (8 sonatype db)
Kopējā atkarības pārbaude:
- Skenētās atkarības: 47
- Neaizsargātas atkarības: 13
- Atrastās ievainojamības: 91 (14 sonatype oss)
Kopējā atkarības izsekošana:
- Skenētās atkarības: 59
- Neaizsargātas atkarības: 10
- Atrastās ievainojamības: 51 (1 sonatype oss)
Nākamajās darbībās mēs analizēsim iegūtos rezultātus un noskaidrosim, kura no šīm ievainojamībām ir reāls defekts un kura ir kļūdaini pozitīva.
Atruna
Šis pārskats nav neapstrīdama patiesība. Autorei nebija mērķa izcelt atsevišķu instrumentu uz citu fona. Pārskata mērķis bija parādīt SCA rīku darbības mehānismus un veidus, kā pārbaudīt to rezultātus.
Rezultātu salīdzinājums
Noteikumi un nosacījumi:
Kļūdaini pozitīvs rezultāts trešās puses komponentu ievainojamībai ir:
- CVE neatbilstība identificētajam komponentam
- Piemēram, ja struts2 ietvarā ir identificēta ievainojamība un rīks norāda uz struts-tiles ietvara komponentu, uz kuru šī ievainojamība neattiecas, tas ir kļūdaini pozitīvs.
- CVE neatbilstība identificētajai komponenta versijai
- Piemēram, ievainojamība ir saistīta ar python versiju > 3.5, un rīks atzīmē versiju 2.7 kā ievainojamu — tas ir kļūdaini pozitīvs rādītājs, jo faktiski ievainojamība attiecas tikai uz 3.x produkta atzaru.
- CVE dublikāts
- Piemēram, ja SCA norāda CVE, kas iespējo RCE, tad SCA norāda CVE šim pašam komponentam, kas attiecas uz Cisco produktiem, kurus ietekmē šis RCE. Šajā gadījumā tas būs kļūdaini pozitīvs.
- Piemēram, pavasara tīmekļa komponentā tika atrasts CVE, pēc kura SCA norāda uz to pašu CVE citos Spring Framework komponentos, savukārt CVE nav nekāda sakara ar citiem komponentiem. Šajā gadījumā tas būs kļūdaini pozitīvs.
Pētījuma objekts bija Open Source projekts DVJA. Pētījumā tika iesaistīti tikai java komponenti (bez js).
Rezultātu kopsavilkums
Pāriesim tieši uz identificēto ievainojamību manuālās pārskatīšanas rezultātiem. Pilnu pārskatu par katru CVE var atrast pielikumā.
Kopsavilkuma rezultāti par visām ievainojamībām:
Parametrs
Nexus IQ
Atkarības pārbaude
Atkarības trase
Kopējais identificēto ievainojamību skaits
42
91
51
Nepareizi identificētas ievainojamības (viltus pozitīva)
2 (4.76%)
62 (68,13%)
29 (56.86%)
Nav atrasta neviena atbilstoša ievainojamība (viltus negatīvs)
10
20
27
Rezultātu kopsavilkums pa komponentiem:
Parametrs
Nexus IQ
Atkarības pārbaude
Atkarības trase
Kopējais identificēto komponentu skaits
62
47
59
Kopējais neaizsargāto komponentu skaits
16
13
10
Nepareizi identificētas neaizsargātās sastāvdaļas (viltus pozitīvs)
1
5
0
Nepareizi identificētas neaizsargātās sastāvdaļas (viltus pozitīvs)
0
6
6
Izveidosim vizuālus grafikus, lai novērtētu viltus pozitīvo un viltus negatīvo attiecību pret kopējo ievainojamību skaitu. Komponenti ir atzīmēti horizontāli, un tajās identificētās ievainojamības ir atzīmētas vertikāli.
Salīdzinājumam līdzīgu pētījumu veica Sonatype komanda, pārbaudot 1531 komponenta projektu, izmantojot OWASP atkarības pārbaudi. Kā redzam, trokšņa attiecība pret pareizajām atbildēm ir salīdzināma ar mūsu rezultātiem.
Avots:
Apskatīsim dažus CVE no mūsu skenēšanas rezultātiem, lai saprastu šo rezultātu iemeslu.
vairāk
№ 1
Vispirms apskatīsim dažus interesantus punktus par Sonatype Nexus IQ.
Nexus IQ norāda uz problēmu, kas saistīta ar deserializāciju ar spēju vairākas reizes veikt RCE Spring Framework ietvaros. CVE-2016-1000027 pavasara tīmeklī: 3.0.5 pirmo reizi un CVE-2011-2894 pavasara kontekstā: 3.0.5 un spring-core: 3.0.5. Sākumā šķiet, ka vairākos CVE ir ievainojamība. Jo, paskatoties NVD datubāzē CVE-2016-1000027 un CVE-2011-2894, šķiet, ka viss ir acīmredzams
komponents
Neaizsargātība
pavasaris-tīmeklis:3.0.5
CVE-2016-1000027
pavasaris-konteksts:3.0.5
CVE-2011-2894
atsperes kodols: 3.0.5
CVE-2011-2894
Apraksts
Apraksts
CVE-2011-2894 pati par sevi ir diezgan slavena. Ziņojumā RemoteInvocationSerializingExporter
CVE-2011-2894 ievainojamība ir novērota HttpInvokerServiceExporter
. Lūk, ko Nexus IQ mums stāsta:
Tomēr NVD nekas tamlīdzīgs nav, tāpēc atkarības pārbaude un atkarības izsekojums saņem kļūdaini negatīvu informāciju.
Arī no CVE-2011-2894 apraksta var saprast, ka ievainojamība patiešām ir gan pavasara kontekstā: 3.0.5, gan pavasara kodolā: 3.0.5. Apstiprinājumu tam var atrast rakstā no personas, kura atrada šo ievainojamību.
№ 2
komponents
Neaizsargātība
Piedzīvojiet efektīvu rezultātu spēku
statņi2-kodolu: 2.3.30
CVE-2016-4003
FALSE
Ja izpētīsim ievainojamību CVE-2016-4003, sapratīsim, ka tā tika novērsta 2.3.28 versijā, tomēr Nexus IQ mums par to ziņo. Ievainojamības aprakstā ir piezīme:
Tas nozīmē, ka ievainojamība pastāv tikai kopā ar novecojušu JRE versiju, par kuru viņi nolēma mūs brīdināt. Tomēr mēs to uzskatām par viltus pozitīvu, lai gan ne par sliktāko.
№ 3
komponents
Neaizsargātība
Piedzīvojiet efektīvu rezultātu spēku
xwork-core: 2.3.30
CVE-2017-9804
TRUE
xwork-core: 2.3.30
CVE-2017-7672
FALSE
Ja aplūkosim CVE-2017-9804 un CVE-2017-7672 aprakstus, mēs sapratīsim, ka problēma ir URLValidator class
, ar CVE-2017-9804, kas izriet no CVE-2017-7672. Otrās ievainojamības klātbūtnei nav nekādas lietderīgas slodzes, izņemot to, ka tās smagums ir palielinājies līdz High, tāpēc mēs to varam uzskatīt par nevajadzīgu troksni.
Kopumā Nexus IQ netika atrasti citi viltus pozitīvi rezultāti.
№ 4
Ir vairākas lietas, kas izceļ IQ no citiem risinājumiem.
komponents
Neaizsargātība
Piedzīvojiet efektīvu rezultātu spēku
pavasaris-tīmeklis:3.0.5
CVE-2020-5398
TRUE
CVE NVD norāda, ka tas attiecas tikai uz versijām 5.2.x pirms 5.2.3, 5.1.x līdz 5.1.13 un versijām 5.0.x pirms 5.0.16, tomēr, ja skatāmies uz CVE aprakstu Nexus IQ , tad mēs redzēsim sekojošo:
Konsultatīvas novirzes paziņojums: Sonatype drošības izpētes grupa atklāja, ka šī ievainojamība tika ieviesta versijā 3.0.2.RELEASE, nevis 5.0.x, kā norādīts ieteikumā.
Tam seko šīs ievainojamības PoC, kas norāda, ka tā ir 3.0.5 versijā.
Viltus negatīvs tiek nosūtīts uz atkarības pārbaudi un atkarības izsekošanu.
№ 5
Apskatīsim atkarības pārbaudes un atkarības izsekošanas kļūdaini pozitīvu rezultātu.
Atkarības pārbaude izceļas ar to, ka tā atspoguļo tos CVE, kas attiecas uz visu ietvaru NVD, tiem komponentiem, uz kuriem šie CVE neattiecas. Tas attiecas uz CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, kas ir atkarīgas no pārbaudes. ” uz struts-taglib:1.3.8 un struts-tiles-1.3.8. Šiem komponentiem nav nekāda sakara ar CVE aprakstīto – pieprasījumu apstrāde, lapas validācija utt. Tas ir saistīts ar faktu, ka šiem CVE un komponentiem kopīgs ir tikai ietvars, tāpēc atkarības pārbaude to uzskatīja par ievainojamību.
Tāda pati situācija ir ar spring-tx:3.0.5, un līdzīga situācija ar statņiem-core:1.3.8. Attiecībā uz struts-core, Dependency Check un Dependency Track ir atrastas daudzas ievainojamības, kas faktiski ir piemērojamas struts2-core, kas būtībā ir atsevišķs ietvars. Šajā gadījumā Nexus IQ pareizi saprata attēlu un tā izdotajos CVE norādīja, ka struts-core ir sasniedzis mūža beigas un nepieciešams pāriet uz struts2-core.
№ 6
Dažās situācijās ir negodīgi interpretēt acīmredzamu atkarības pārbaudes un atkarības izsekošanas kļūdu. Jo īpaši CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, kuru atkarības pārbaude un atkarība attiecināts uz spring-core:3.0.5 faktiski pieder spring-web:3.0.5. Tajā pašā laikā dažus no šiem CVE atrada arī Nexus IQ, taču IQ tos pareizi identificēja ar citu komponentu. Tā kā šīs ievainojamības netika atrastas Spring-core, nevar apgalvot, ka tās principā neietilpst sistēmā, un atvērtā pirmkoda rīki pareizi norādīja uz šīm ievainojamībām (tās tikai nedaudz palaida garām).
Atzinumi
Kā redzam, identificēto ievainojamību uzticamības noteikšana manuāli pārskatot nedod viennozīmīgus rezultātus, tāpēc rodas strīdīgi jautājumi. Rezultātā Nexus IQ risinājumam ir viszemākais viltus pozitīvo rezultātu līmenis un visaugstākā precizitāte.
Pirmkārt, tas ir saistīts ar faktu, ka Sonatype komanda paplašināja katras CVE ievainojamības aprakstu no NVD savās datubāzēs, norādot ievainojamības konkrētai komponentu versijai līdz pat klasei vai funkcijai, veicot papildu pētījumus (piemēram, , pārbaudot vecāku programmatūras versiju ievainojamības).
Būtisku ietekmi uz rezultātiem spēlē arī tās ievainojamības, kuras nebija iekļautas NVD, bet tomēr atrodas Sonatype datubāzē ar SONATYPE zīmi. Saskaņā ar ziņojumu
Rezultātā atkarības pārbaude rada daudz trokšņu, un tajā trūkst dažu neaizsargātu komponentu. Dependency Track rada mazāk trokšņa un nosaka lielu skaitu komponentu, kas tīmekļa saskarnē vizuāli nekaitē acīm.
Tomēr prakse rāda, ka atvērtajam pirmkodam vajadzētu kļūt par pirmajiem soļiem ceļā uz nobriedušu DevSecOps. Pirmā lieta, par ko vajadzētu padomāt, integrējot SCA attīstībā, ir procesi, proti, kopā ar vadību un saistītajām nodaļām domāt par to, kādiem vajadzētu izskatīties ideāliem procesiem jūsu organizācijā. Var izrādīties, ka jūsu organizācijai sākotnēji Dependency Check vai Dependency Track aptvers visas biznesa vajadzības, un uzņēmuma risinājumi būs loģisks turpinājums, jo tiek izstrādātas arvien sarežģītākas lietojumprogrammas.
A pielikums: komponentu rezultāti
leģenda:
- Augsta — augsta un kritiska līmeņa ievainojamība komponentā
- Vidējs — vidēja kritiskuma līmeņa ievainojamības komponentā
- TRUE — patiesi pozitīva problēma
- FALSE — kļūdaini pozitīva problēma
komponents
Nexus IQ
Atkarības pārbaude
Atkarības trase
Piedzīvojiet efektīvu rezultātu spēku
dom4j: 1.6.1
augsts
augsts
augsts
TRUE
log4j kodols: 2.3
augsts
augsts
augsts
TRUE
log4j: 1.2.14
augsts
augsts
Sākot no
TRUE
kopīgās kolekcijas:3.1
augsts
augsts
augsts
TRUE
commons-fileupload:1.3.2
augsts
augsts
augsts
TRUE
commons-beanutils:1.7.0
augsts
augsts
augsts
TRUE
commons-kodeks: 1:10
vidējs
Sākot no
Sākot no
TRUE
mysql-connector-java: 5.1.42
augsts
augsts
augsts
TRUE
atsperes izteiksme:3.0.5
augsts
komponents nav atrasts
TRUE
pavasaris-tīmeklis:3.0.5
augsts
komponents nav atrasts
augsts
TRUE
pavasaris-konteksts:3.0.5
vidējs
komponents nav atrasts
Sākot no
TRUE
atsperes kodols: 3.0.5
vidējs
augsts
augsts
TRUE
struts2-config-browser-plugin:2.3.30
vidējs
Sākot no
Sākot no
TRUE
atspere-tx: 3.0.5
Sākot no
augsts
Sākot no
FALSE
statņi-kodols:1.3.8
augsts
augsts
augsts
TRUE
xwork-core: 2.3.30
augsts
Sākot no
Sākot no
TRUE
statņi 2 kodolu: 2.3.30
augsts
augsts
augsts
TRUE
struts-taglib:1.3.8
Sākot no
augsts
Sākot no
FALSE
statņi-flīzes-1.3.8
Sākot no
augsts
Sākot no
FALSE
B pielikums: Ievainojamības rezultāti
leģenda:
- Augsta — augsta un kritiska līmeņa ievainojamība komponentā
- Vidējs — vidēja kritiskuma līmeņa ievainojamības komponentā
- TRUE — patiesi pozitīva problēma
- FALSE — kļūdaini pozitīva problēma
komponents
Nexus IQ
Atkarības pārbaude
Atkarības trase
Smagums
Piedzīvojiet efektīvu rezultātu spēku
Komentēt
dom4j: 1.6.1
CVE-2018-1000632
CVE-2018-1000632
CVE-2018-1000632
augsts
TRUE
CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
augsts
TRUE
log4j kodols: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
augsts
TRUE
CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
Zems
TRUE
log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571
Sākot no
augsts
TRUE
Sākot no
CVE-2020-9488
Sākot no
Zems
TRUE
SONATĪPS-2010-0053
Sākot no
Sākot no
augsts
TRUE
kopīgās kolekcijas:3.1
Sākot no
CVE-2015-6420
CVE-2015-6420
augsts
FALSE
RCE dublikāti (OSSINDEX)
Sākot no
CVE-2017-15708
CVE-2017-15708
augsts
FALSE
RCE dublikāti (OSSINDEX)
SONATĪPS-2015-0002
RCE (OSSINDEX)
RCE (OSSINDEX)
augsts
TRUE
commons-fileupload:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
augsts
TRUE
SONATĪPS-2014-0173
Sākot no
Sākot no
vidējs
TRUE
commons-beanutils:1.7.0
CVE-2014-0114
CVE-2014-0114
CVE-2014-0114
augsts
TRUE
Sākot no
CVE-2019-10086
CVE-2019-10086
augsts
FALSE
Ievainojamība attiecas tikai uz versijām 1.9.2+
commons-kodeks: 1:10
SONATĪPS-2012-0050
Sākot no
Sākot no
vidējs
TRUE
mysql-connector-java: 5.1.42
CVE-2018-3258
CVE-2018-3258
CVE-2018-3258
augsts
TRUE
CVE-2019-2692
CVE-2019-2692
Sākot no
vidējs
TRUE
Sākot no
CVE-2020-2875
Sākot no
vidējs
FALSE
Tāda pati ievainojamība kā CVE-2019-2692, taču ar piezīmi “uzbrukumi var būtiski ietekmēt papildu produktus”
Sākot no
CVE-2017-15945
Sākot no
augsts
FALSE
Neattiecas uz mysql-connector-java
Sākot no
CVE-2020-2933
Sākot no
Zems
FALSE
CVE-2020-2934 dublikāts
CVE-2020-2934
CVE-2020-2934
Sākot no
vidējs
TRUE
atsperes izteiksme:3.0.5
CVE-2018-1270
komponents nav atrasts
Sākot no
augsts
TRUE
CVE-2018-1257
Sākot no
Sākot no
vidējs
TRUE
pavasaris-tīmeklis:3.0.5
CVE-2016-1000027
komponents nav atrasts
Sākot no
augsts
TRUE
CVE-2014-0225
Sākot no
CVE-2014-0225
augsts
TRUE
CVE-2011-2730
Sākot no
Sākot no
augsts
TRUE
Sākot no
Sākot no
CVE-2013-4152
vidējs
TRUE
CVE-2018-1272
Sākot no
Sākot no
augsts
TRUE
CVE-2020-5398
Sākot no
Sākot no
augsts
TRUE
Ilustratīvs piemērs par labu IQ: “Sonatype drošības izpētes komanda atklāja, ka šī ievainojamība tika ieviesta versijā 3.0.2.RELEASE, nevis 5.0.x, kā norādīts ieteikumā.”
CVE-2013-6429
Sākot no
Sākot no
vidējs
TRUE
CVE-2014-0054
Sākot no
CVE-2014-0054
vidējs
TRUE
CVE-2013-6430
Sākot no
Sākot no
vidējs
TRUE
pavasaris-konteksts:3.0.5
CVE-2011-2894
komponents nav atrasts
Sākot no
vidējs
TRUE
atsperes kodols: 3.0.5
Sākot no
CVE-2011-2730
CVE-2011-2730
augsts
TRUE
CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
vidējs
TRUE
Sākot no
Sākot no
CVE-2013-4152
vidējs
FALSE
Tās pašas ievainojamības dublikāts pavasara tīmeklī
Sākot no
CVE-2013-4152
Sākot no
vidējs
FALSE
Ievainojamība ir saistīta ar atsperes tīmekļa komponentu
Sākot no
CVE-2013-6429
CVE-2013-6429
vidējs
FALSE
Ievainojamība ir saistīta ar atsperes tīmekļa komponentu
Sākot no
CVE-2013-6430
Sākot no
vidējs
FALSE
Ievainojamība ir saistīta ar atsperes tīmekļa komponentu
Sākot no
CVE-2013-7315
CVE-2013-7315
vidējs
FALSE
SPLIT no CVE-2013-4152. + Ievainojamība ir saistīta ar pavasara tīmekļa komponentu
Sākot no
CVE-2014-0054
CVE-2014-0054
vidējs
FALSE
Ievainojamība ir saistīta ar atsperes tīmekļa komponentu
Sākot no
CVE-2014-0225
Sākot no
augsts
FALSE
Ievainojamība ir saistīta ar atsperes tīmekļa komponentu
Sākot no
Sākot no
CVE-2014-0225
augsts
FALSE
Tās pašas ievainojamības dublikāts pavasara tīmeklī
Sākot no
CVE-2014-1904
CVE-2014-1904
vidējs
FALSE
Ievainojamība ir saistīta ar komponentu spring-web-mvc
Sākot no
CVE-2014-3625
CVE-2014-3625
vidējs
FALSE
Ievainojamība ir saistīta ar komponentu spring-web-mvc
Sākot no
CVE-2016-9878
CVE-2016-9878
augsts
FALSE
Ievainojamība ir saistīta ar komponentu spring-web-mvc
Sākot no
CVE-2018-1270
CVE-2018-1270
augsts
FALSE
Pavasara izteiksmei/pavasara vēstījumiem
Sākot no
CVE-2018-1271
CVE-2018-1271
vidējs
FALSE
Ievainojamība ir saistīta ar komponentu spring-web-mvc
Sākot no
CVE-2018-1272
CVE-2018-1272
augsts
TRUE
CVE-2014-3578
CVE-2014-3578 (OSSINDEX)
CVE-2014-3578
vidējs
TRUE
SONATĪPS-2015-0327
Sākot no
Sākot no
Zems
TRUE
struts2-config-browser-plugin:2.3.30
SONATĪPS-2016-0104
Sākot no
Sākot no
vidējs
TRUE
atspere-tx: 3.0.5
Sākot no
CVE-2011-2730
Sākot no
augsts
FALSE
Ievainojamība nav raksturīga Spring-tx
Sākot no
CVE-2011-2894
Sākot no
augsts
FALSE
Ievainojamība nav raksturīga Spring-tx
Sākot no
CVE-2013-4152
Sākot no
vidējs
FALSE
Ievainojamība nav raksturīga Spring-tx
Sākot no
CVE-2013-6429
Sākot no
vidējs
FALSE
Ievainojamība nav raksturīga Spring-tx
Sākot no
CVE-2013-6430
Sākot no
vidējs
FALSE
Ievainojamība nav raksturīga Spring-tx
Sākot no
CVE-2013-7315
Sākot no
vidējs
FALSE
Ievainojamība nav raksturīga Spring-tx
Sākot no
CVE-2014-0054
Sākot no
vidējs
FALSE
Ievainojamība nav raksturīga Spring-tx
Sākot no
CVE-2014-0225
Sākot no
augsts
FALSE
Ievainojamība nav raksturīga Spring-tx
Sākot no
CVE-2014-1904
Sākot no
vidējs
FALSE
Ievainojamība nav raksturīga Spring-tx
Sākot no
CVE-2014-3625
Sākot no
vidējs
FALSE
Ievainojamība nav raksturīga Spring-tx
Sākot no
CVE-2016-9878
Sākot no
augsts
FALSE
Ievainojamība nav raksturīga Spring-tx
Sākot no
CVE-2018-1270
Sākot no
augsts
FALSE
Ievainojamība nav raksturīga Spring-tx
Sākot no
CVE-2018-1271
Sākot no
vidējs
FALSE
Ievainojamība nav raksturīga Spring-tx
Sākot no
CVE-2018-1272
Sākot no
vidējs
FALSE
Ievainojamība nav raksturīga Spring-tx
statņi-kodols:1.3.8
Sākot no
CVE-2011-5057 (OSSINDEX)
vidējs
FASLE
Neaizsargātība pret Struts 2
Sākot no
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
augsts
FALSE
Neaizsargātība pret Struts 2
Sākot no
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
vidējs
FALSE
Neaizsargātība pret Struts 2
Sākot no
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
augsts
FALSE
Neaizsargātība pret Struts 2
CVE-2016-1182
3VE-2016-1182
Sākot no
augsts
TRUE
Sākot no
Sākot no
CVE-2011-5057
vidējs
FALSE
Neaizsargātība pret Struts 2
Sākot no
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
augsts
FALSE
Neaizsargātība pret Struts 2
Sākot no
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
vidējs
FALSE
Neaizsargātība pret Struts 2
CVE-2015-0899
CVE-2015-0899
Sākot no
augsts
TRUE
Sākot no
CVE-2012-0394
CVE-2012-0394
vidējs
FALSE
Neaizsargātība pret Struts 2
Sākot no
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
augsts
FALSE
Neaizsargātība pret Struts 2
Sākot no
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
augsts
FALSE
Neaizsargātība pret Struts 2
Sākot no
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
augsts
FASLE
Neaizsargātība pret Struts 2
Sākot no
CVE-2013-2115
CVE-2013-2115
augsts
FASLE
Neaizsargātība pret Struts 2
Sākot no
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
augsts
FASLE
Neaizsargātība pret Struts 2
Sākot no
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
augsts
FASLE
Neaizsargātība pret Struts 2
CVE-2014-0114
CVE-2014-0114
Sākot no
augsts
TRUE
Sākot no
CVE-2015-2992
CVE-2015-2992
vidējs
FALSE
Neaizsargātība pret Struts 2
Sākot no
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
augsts
FALSE
Neaizsargātība pret Struts 2
CVE-2016-1181
CVE-2016-1181
Sākot no
augsts
TRUE
Sākot no
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
augsts
FALSE
Neaizsargātība pret Struts 2
xwork-core: 2.3.30
CVE-2017-9804
Sākot no
Sākot no
augsts
TRUE
SONATĪPS-2017-0173
Sākot no
Sākot no
augsts
TRUE
CVE-2017-7672
Sākot no
Sākot no
augsts
FALSE
CVE-2017-9804 dublikāts
SONATĪPS-2016-0127
Sākot no
Sākot no
augsts
TRUE
statņi2-kodolu: 2.3.30
Sākot no
CVE-2016-6795
CVE-2016-6795
augsts
TRUE
Sākot no
CVE-2017-9787
CVE-2017-9787
augsts
TRUE
Sākot no
CVE-2017-9791
CVE-2017-9791
augsts
TRUE
Sākot no
CVE-2017-9793
Sākot no
augsts
FALSE
CVE-2018-1327 dublikāts
Sākot no
CVE-2017-9804
Sākot no
augsts
TRUE
Sākot no
CVE-2017-9805
CVE-2017-9805
augsts
TRUE
CVE-2016-4003
Sākot no
Sākot no
vidējs
FALSE
Attiecas uz Apache Struts 2.x līdz 2.3.28, kas ir versija 2.3.30. Tomēr, pamatojoties uz aprakstu, CVE ir derīga jebkurai Struts 2 versijai, ja tiek izmantota JRE 1.7 vai jaunāka versija. Acīmredzot viņi nolēma mūs šeit pārapdrošināt, bet tas vairāk izskatās pēc FALSE
Sākot no
CVE-2018-1327
CVE-2018-1327
augsts
TRUE
CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
augsts
TRUE
Tā pati ievainojamība, ko Equifax hakeri izmantoja 2017. gadā
CVE-2017-12611
CVE-2017-12611
Sākot no
augsts
TRUE
CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
augsts
TRUE
struts-taglib:1.3.8
Sākot no
CVE-2012-0394
Sākot no
vidējs
FALSE
2-kodolu statņiem
Sākot no
CVE-2013-2115
Sākot no
augsts
FALSE
2-kodolu statņiem
Sākot no
CVE-2014-0114
Sākot no
augsts
FALSE
Par Commons-beanutils
Sākot no
CVE-2015-0899
Sākot no
augsts
FALSE
Neattiecas uz taglib
Sākot no
CVE-2015-2992
Sākot no
vidējs
FALSE
Attiecas uz struts2-core
Sākot no
CVE-2016-1181
Sākot no
augsts
FALSE
Neattiecas uz taglib
Sākot no
CVE-2016-1182
Sākot no
augsts
FALSE
Neattiecas uz taglib
statņi-flīzes-1.3.8
Sākot no
CVE-2012-0394
Sākot no
vidējs
FALSE
2-kodolu statņiem
Sākot no
CVE-2013-2115
Sākot no
augsts
FALSE
2-kodolu statņiem
Sākot no
CVE-2014-0114
Sākot no
augsts
FALSE
Zem commons-beanutils
Sākot no
CVE-2015-0899
Sākot no
augsts
FALSE
Neattiecas uz flīzēm
Sākot no
CVE-2015-2992
Sākot no
vidējs
FALSE
2-kodolu statņiem
Sākot no
CVE-2016-1181
Sākot no
augsts
FALSE
Neattiecas uz taglib
Sākot no
CVE-2016-1182
Sākot no
augsts
FALSE
Neattiecas uz taglib
Avots: www.habr.com