Kolmanda osapoole tarkvara komponentide analĂŒĂŒsi (inglise keeles Software Composition Analysis â SCA) tĂ€htsus arendamisel kasvab koos avatud lĂ€htekoodiga raamatukogude haavatavuste kohta avaldatud iga-aastaste aruannetega, mida avaldavad ettevĂ”tted nagu Synopsys, Sonatype, Snyk, White Source. Aruande kohaselt avastatud haavatuste arv avatud lĂ€htekoodiga tarkvaras 2019. aastal kasvas peaaegu 1,5 korda vĂ”rreldes eelmise aastaga, samas kui avatud lĂ€htekoodiga komponente kasutatakse 60% kuni 80% projektidest. Kui viidata sĂ”ltumatule arvamusele, on SCA protsessid OWASP SAMM ja BSIMM eraldi praktikad, mis on kĂŒpsuse nĂ€itajaks, ning 2020. aasta esimeses pooles avaldas OWASP uue standardi OWASP Software Component Verification Standard (SCVS), mis annab parimad praktikad kolmandate osapoolte komponentide kontrollimiseks tarkvara tarnimise ahelas.

Ăks kĂ”ige nĂ€itlikumaid juhtumeid koostöös ettevĂ”ttega Equifax mai 2017. aastal. Tundmatud kĂŒberkurjategijad pÀÀsesid ligi 143 miljoni ameeriklase teabele, sealhulgas tĂ€ielikele nimedele, aadressidele, sotsiaalkindlustuse numbritele ja juhtimissertifikaatidele. 209 000 juhul sisaldasid dokumentides ka teavet kannatanu pangakaartide kohta. See lekkimine toimus kriitilise haavatavuse tĂ”ttu Apache Struts 2-s (CVE-2017-5638), samal ajal kui parandusvĂ€ljaanne ilmus juba mĂ€rtsis 2017. EttevĂ”ttel oli kaks kuud uuenduste rakendamiseks, kuid keegi ei muretsenud selle ĂŒle.
KĂ€esolevas artiklis arutatakse SCA tööriista valimise kĂŒsimust analĂŒĂŒsi tulemuste kvaliteedi vaatepunktist. Samuti tuuakse vĂ€lja tööriistade funktsionaalne vĂ”rdlus. CI/CD-sse inteerimise protsessi ja integreerimise vĂ”imalused jĂ€tame jĂ€rgmistele vĂ€ljaannele. Lai nimekiri tööriistadest on esitatud OWASP , kuid kĂ€esoleva ĂŒlevaate raames kĂ€sitleme ainult kĂ”ige populaarsemat avatud lĂ€htekoodiga tööriista Dependency Check, veidi vĂ€hem tuntud avatud lĂ€htekoodiga platvormi Dependency Track ja ettevĂ”tte lahendust Sonatype Nexus IQ. Samuti uurime, kuidas need lahendused töötavad ja vĂ”rdleme saadud tulemusi valehĂ€irete osas.

Tööprintsiip
â see on utiliit (CLI, maven, jenkins moodul, ant), mis analĂŒĂŒsib projekti faile, kogub teavet sĂ”ltuvuste kohta (paketi nimi, grupi ID, spetsifikatsiooni pealkiri, versioon...), koostab CPE (Common Platform Enumeration) stringi, paketi URL (PURL) ja tuvastab CPE/PURL jaoks haavatavused andmebaasidest (NVD, Sonatype OSS Index, NPM Audit API...), pĂ€rast mida koostab ajakohase aruande HTML, JSON, XML jne formaadis.
Vaatame, kuidas CPE vÀlja nÀeb:
cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other- Osa: MĂ€rge, et komponent kuulub rakendusele (a), operatsioonisĂŒsteemile (o), riistvarale (h) (Kohustuslik punkt)
- Tootja: Tootja nimi (Kohustuslik punkt)
- Toode: Toote nimi (Kohustuslik punkt)
- Versioon: Komponendi versioon (Aegunud punkt)
- Uuendus: Paketi vÀrskendus
- VĂ€ljaanne: PĂ€randversioon (Aegunud punkt)
- Keel: Keel, mÀÀratud RFC-5646-s
- SW VĂ€ljaanne: Tarkvara versioon
- Siht-PR: Tarkvara keskkond, kus toode töötab
- Siht-HW: Riistvarakeskkond, kus toode töötab
- Muud: MĂŒĂŒja vĂ”i toote teave
CPE nÀeb vÀlja jÀrgmine:
cpe:2.3:a:pivotal_software:spring_framework:3.0.0:*:*:*:*:*:*:* Rida nĂ€itab, et CPE versioon 2.3 kirjeldab rakenduse komponenti tootjalt pivotal_software nimega spring_framework versiooniga 3.0.0. Kui avame haavatavuse NVD-s, siis saame nĂ€ha, et see CPE mainitakse. Esimene probleem, millele kohe tĂ€helepanu pöörata â CVE NVD-s teatab selle CPE kohaselt, et probleem on raamistikus, mitte konkreetses komponendis. See tĂ€hendab, et kui arendajad on tugevalt seotud raamistikuga ja tuvastatud haavatavus ei puuduta neid mooduleid, mida arendajad kasutavad, peab turbe spetsialist igal juhul uurima seda CVE-d ja mĂ”tlema uuendusele.
URL-i kasutatakse samuti SCA tööriistade poolt. Paketi URL-i formaat on jÀrgmine:
scheme:type/namespace/name@version?qualifiers#subpath- Skeem: Alati on 'pkg', mis nÀitab, et see on paketi URL (kohustuslik punkt)
- TĂŒĂŒp: Paketi 'tĂŒĂŒp' vĂ”i 'protokoll', nĂ€iteks maven, npm, nuget, gem, pypi jne. (kohustuslik punkt)
- Nimiiruumi: MĂ”ni nimeprefiks, nĂ€iteks Maven'i grupi identifikaator, Docker'i pildi omaniku, kasutaja vĂ”i GitHub'i organisatsiooni. Valikuline ja sĂ”ltub tĂŒĂŒbist.
- Nimi: Paketi nimi (kohustuslik element)
- Versioon: Paketi versioon
- Kvalifikaatorid: Lisakvalifitseerivad andmed paketi kohta, nagu OS, arhitektuur, jaotamine jms. Valikuline ja sĂ”ltub tĂŒĂŒbist.
- Alatee: Lisatee paketis paketi juurest.
NĂ€iteks:
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â kohapealne veebiplatvorm, mis aktsepteerib valmis materjalide loendeid (BOM), mis on loodud ja , st valmis spetsifikatsioonid olemasolevate sĂ”ltuvuste kohta. See on XML-fail, mis kirjeldab sĂ”ltuvusi â nimi, hashid, paketi URL, vĂ€ljaandja, litsents. SeejĂ€rel analĂŒĂŒsib SĂ”ltuvuste jĂ€lgimine BOM'i, kontrollib olemasolevaid CVE-sid sĂ”ltuvuste osas haavatavuste andmebaasist (NVD, Sonatype OSS Index âŠ), pĂ€rast mida koostab graafikud, arvutab meetrike, ja vĂ€rskendab regulaarselt andmeid komponentide haavatavuste staatuse kohta.
NÀide sellest, kuidas BOM XML-formaadis vÀlja nÀha vÔib:
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-i saab kasutada mitte ainult sĂ”ltuvuse jĂ€lgimiseks, vaid ka tarkvara koostisosade inventeerimiseks tarnijate ahelas, nĂ€iteks tarkvara kliendile esitlemiseks. 2014. aastal esitati USA-s isegi seaduseelnĂ”u, , mis ĂŒtles, et igasuguste tarkvarade ostmisel peavad kĂ”ik riigiasutused nĂ”udma BOM-i, et vĂ€ltida haavatavate komponentide kasutamist, kuid seadus ei jĂ”ustunud.
Tagasi tulles SCA juurde, on Dependency Track'il valmisolek integreeruda teavitussĂŒsteemidega nagu Slack, haavatavuste haldamise sĂŒsteemidega nagu Kenna Security. Oluline on ka mĂ€rkida, et Dependency Track tuvastab vananenud paketiversioonid ja pakub teavet litsentside kohta (grupi SPDX toel).
Kui rÀÀkida SCA kvaliteedist, siis on siin pÔhimÔtteline erinevus.
Dependency Track ei vÔta projekti sisendina, vaid vÔtab just BOM-i. See tÀhendab, et kui tahame projekti kontrollida, peame kÔigepealt genereerima bom.xml, nÀiteks CycloneDX abil. SeetÔttu sÔltub Dependency Track otseselt CycloneDX-st. Samas vÔimaldab see ka kohandamist. Nii kirjutas OZONi meeskond BOM-failide koostamiseks Golangi projektide jaoks, et neid hiljem Dependency Track'i kaudu skaneerida.
â Sonatype'i SCA Ă€rilahenduse osa, mis kuulub Sonatype'i ökosĂŒsteemi, kuhu kuulub ka Nexus Repository Manager. Nexus IQ saab sisendina vastu vĂ”tta nii war-arhiive (Java projektide jaoks) veebiliidese vĂ”i API kaudu, kui ka BOM-i, juhul kui teie organisatsioon ei ole veel CycloneDX-lt uuele lahendusele ĂŒle lĂ€inud. Erinevalt avatud lĂ€htekoodiga lahendustest, vĂ”tab IQ arvesse mitte ainult CP/PURL tuvastatud komponente ja vastavaid haavatavusi andmebaasis, vaid ka oma uuringuid, nĂ€iteks haavatava funktsiooni vĂ”i klassi nimetust. IQ mehhanismid kĂ€sitletakse hiljem, kui analĂŒĂŒsime tulemusi.
Teeme kokkuvĂ”tte funktsionaalsetest omadustest ja vaatame ĂŒle toetatud keeled analĂŒĂŒsiks:
Keel
Nexus IQ
Dependency Check
SÔltuvuste jÀlgimine
Java
+
+
+
C/C++
+
+
â
C#
+
+
â
.Net
+
+
+
Erlang
â
â
+
JavaScript (NodeJS)
+
+
+
PHP
+
+
+
Python
+
+
+
Ruby
+
+
+
Perl
â
â
â
Scala
+
+
+
Objective C
+
+
â
Swift
+
+
â
R
+
â
â
Go
+
+
+
Funktsioonid
Funktsioonid
Nexus IQ
Dependency Check
SÔltuvuste jÀlgimine
VÔimekus tagada komponentide kontroll, mida kasutatakse lÀhtekoodis litsentsi selguse osas
+
â
+
VĂ”imekus skaneerida ja analĂŒĂŒsida haavatavuste ja litsentsi selguse osas Docker'i piltidele
+ Integreerimine Clairiga
â
â
VÔimekus seadistada turvapoliitikat avatud lÀhtekoodiga raamatukogude kasutamiseks
+
â
â
Avatud lÀhtekoodiga hoidlate skaneerimise vÔimalus haavatavate komponentide leidmiseks
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS
â
+ Hex, RubyGems, Maven, NPM, Nuget, Pypi
Spetsialiseeritud teadusgrupi olemasolu
+
â
â
Töö suletud ringis
+
+
+
Kolmandate osapoolte andmebaaside kasutamine
+ Suletud andmebaas Sonatype
+ Sonatype OSS, NPM Public Advisors
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, oma haavatavuste andmebaasi toetus
Avatud lĂ€htekoodiga komponentide filtreerimise vĂ”imalus arendusringis ĂŒleslaadimise katses vastavalt konfigureeritud poliitikatele
+
â
â
Soovitused haavatavuste parandamiseks, lingid parandusele
+
+- (sÔltub avalikes andmebaasides olevatest kirjeldustest)
+- (sÔltub avalikes andmebaasides olevatest kirjeldustest)
Leitud haavatavuste ridade jÀrjestamine kriitilisuse jÀrgi
+
+
+
JuurdepÀÀsu nÔuetekohane mudel
+
â
+
CLI (kÀskude rea liidese) tugi
+
+
+- (ainult CycloneDX jaoks)
Haavatavuste valimine / jÀrjestamine mÀÀratletud kriteeriumide alusel
+
â
+
Rakenduste oleku armatuurlaud
+
â
+
Aruannete genereerimine PDF-formaadis
+
â
â
Aruannete genereerimine JSONCSV formaadis
+
+
â
Venekeelse toe olemasolu
â
â
â
IntegreerimisvÔimalused
Integreerimine
Nexus IQ
Dependency Check
SÔltuvuste jÀlgimine
Integreerimine LDAP/Active Directoryga
+
â
+
Integreerimine pideva integreerimise sĂŒsteemiga (continous integration) Bamboo
+
â
â
Integreerimine pideva integratsiooni sĂŒsteemiga (continuous integration) TeamCity
+
â
â
Integreerimine pideva integratsiooni sĂŒsteemiga (continuous integration) GitLab
+
+- (GitLabi pistikprogrammina)
+
Integreerimine pideva integratsiooni sĂŒsteemiga (continuous integration) Jenkins
+
+
+
IDE pistikprogrammide olemasolu
+ IntelliJ, Eclipse, Visual Studio
â
â
Kohandatud integreerimise tugi web-services (API) kaudu
+
â
+
Dependency Check
Esimene kÀivitamine
KĂ€ivitame Dependency Check sihitud haavatava rakenduse jaoks .
Selleks kasutame :
mvn org.owasp:dependency-check-maven:checkTulemuseks luuakse kaustas target dependency-check-report.html.

Avame faili. PÀrast kokkuvÔteteavet haavatavuste koguarvu kohta, saame nÀha teavet kÔrge taseme Severity ja Confidence haavatavuste kohta koos viitega paketile, CPE-le ning CVE arvule.
JÀrgneb detailsem teave, sealhulgas see, mille pÔhjal otsus tehti (evidence), see tÀhendab teatud BOM-i.

Edasi minnes on CPE, PURL ja CVE kirjeldus. Soovitusi parandamiseks ei ole, kuna need puuduvad NVD andmebaasist.

SĂŒsteemse skannimise tulemuste vaatamiseks saab seadistada Nginx minimaalse seadistusega vĂ”i edastada saadud defektid veakatse haldamise sĂŒsteemi, mis toetavad ĂŒhendusi Dependency Check'iga. NĂ€iteks Defect Dojo.
SÔltuvuste jÀlgimine
Installeerimine
Dependency Track on samas veebipĂ”hine platvorm, mis kuvab graafikuid, seega ei tĂ”use siin terav kĂŒsimus defektide hoidmisest kolmandas lahenduses.
Installeerimiseks on toetatud jÀrgmised stsenaariumid: Docker, WAR, Executable WAR.
Esimene kÀivitamine
Liigume jooksva teenuse URL-ile. Logime sisse admin/admin kaudu, muutame sisselogimise ja parooli, mille jĂ€rel jĂ”uame juhtpaneelile. JĂ€rgmine, mida teeme, on luua projekt Java testrakenduse jaoks Avaleht/Projektid â Loo projekt . NĂ€iteks vĂ”tame DVJA.

Kuna Dependency Track saab sisendina vastu vÔtta ainult BOM-i, tuleb see BOM hankida. Kasutame :
mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBomSaame bom.xml ja laadime faili loodud projekti DVJA â SĂ”ltuvused â Laadi BOM.
Siseneme haldusesse â AnalĂŒsaatorid. Saame aru, et meil on aktiveeritud ainult sisemine analĂŒsaator, mis hĂ”lmab NVD-d. Ăhendame ka Sonatype OSS Indeksi.

Nii saavutame meie projekti jaoks jÀrgmise pildi:

Samuti leiab nimekirjast ĂŒhe haavatavuse, mis kehtib Sonatype OSS-i suhtes:

Peamine pettumus oli see, et Dependency Track ei toeta enam Dependency Check'i xml-aruandeid. Viimased toetatud versioonid Dependency Check'iga integreerimiseks olid 1.0.0 â 4.0.2, samas kui mina testisin 5.3.2.
Siin on (ja ), kui see oli veel vÔimalik.
Nexus IQ
Esimene kÀivitamine
Nexus IQ installimine toimub arhiivide kaudu , kuid meie jaoks kogusime endale Docker'i pildi.
PĂ€rast konsooli sisenemist on vajalik luua Organisatsioon ja Rakendus.



Nagu nÀha, on IQ seadistamine pisut keerulisem, kuna peame ka looma poliitikad, mis kehtivad erinevatele "staadiumidele" (dev, build, stage, release). See on vajalik, et takistada haavatavate komponentide edasiviimist torustikus lÀhemale tootmisele vÔi takistada nende allalaadimist Nexus Repo'sse arendajate poolt.
Et tunnetada open source'i ja enterprise'i erinevust, teeme sama skaneerimise Nexus IQ kaudu sarnaselt , eelnevalt luues testrakenduse NexusIQ liideses dvja-test-and-compare:
mvn com.sonatype.clm:clm-maven-plugin:evaluate -Dclm.applicationId=dvja-test-and-compare -Dclm.serverUrl= -Dclm.username= -Dclm.password=
Liikumine URL-ile genereeritud aruandele IQ veebiliideses:

Siit saate nÀha kÔiki poliitikareeglite rikkumisi, millel on erinev tÀhtsus (alates Info kuni Security Critical). TÀht D komponendi kÔrval nÀitab, et komponent on otse sÔltuvus, ja tÀht T komponendi kÔrval nÀitab, et komponent on transitiivne sÔltuvus.
Muide, aruanne Snyki poolt teatas, et rohkem kui 70% Node.js, Java ja Ruby avatud lÀhtekoodiga haavatavustest asub transitiivses sÔltuvuses.
Kui avame ĂŒhe Nexus IQ poliitikareegli rikkumise, saame nĂ€ha komponentide kirjeldust ning Version Graphi, mis nĂ€itab praeguse versiooni asukohta ajagraafikul ja millal haavatavus enam ei ole haavatav. Graafiku kĂŒĂŒnalde kĂ”rgus nĂ€itab selle komponendi kasutamise populaarsust.

Kui liikuda haavatavuste ja CVE jaotisse, saab lugeda selle haavatavuse kirjeldust, soovitusi kÔrvaldamiseks ning pÔhjust, miks antud komponent rikkumisse langes, st klassi olemasolu. DiskFileitem.class.


Teeme kokkuvÔtte, mis puudutab ainult kolmandate osapoolte Java komponente, jÀttes vÀlja js komponendid. Sulgudes mÀrkime Àra haavatavuste arvu, mida leiti vÀljaspool NVD-d.
Kokku Nexus IQ:
- Skaneeritud sÔltuvused: 62
- Haavatavad sÔltuvused: 16
- Leitud haavatavused: 42 (8 sonatype db)
Kokku Dependency Check:
- Skaneeritud sÔltuvused: 47
- Haavatavad sÔltuvused: 13
- Leitud haavatavused: 91 (14 sonatype oss)
Kokku Dependency Track:
- Skaneeritud sÔltuvused: 59
- Haavatavad sÔltuvused: 10
- Leitud haavatavused: 51 (1 sonatype oss)
JĂ€rgmise sammuna analĂŒĂŒsime saadud tulemusi ja selgitame vĂ€lja, millised neist haavatavustest on tegelikud defektid ja millised valehĂ€ired.
Vastutusest loobumine
See ĂŒlevaade ei ole vaieldamatu tĂ”de. Autoril ei olnud eesmĂ€rki tuvastada ĂŒhte tööriista teiste seas. Ălevaate tĂ€hendus oli nĂ€idata SCA tööriistade töömehhanisme ja tulemuste kontrollimise viise.
Tulemuste vÔrdlemine
Tingimused:
ValehÀire kolmandate osapoolte komponente kÀsitlevate haavatavuste osas on:
- CVE vastavus tuvastatud komponendiga
- NÀiteks, kui haavatavus tuvastatakse struts2 raamistikus, aga tööriist nÀitab struts-tiles raamistikku, millele see haavatavus ei kehti, siis on see vale positiivne.
- CVE vastavus tuvastatud komponendi versiooniga
- NĂ€iteks, kui haavatavus on seotud versiooniga python > 3.5 ja tööriist mĂ€rkab haavatavaks versiooni 2.7 â siis on see vale positiivne, kuna haavatavus kehtib ainult toote 3.x haru kohta.
- CVE dubleerimine
- NÀiteks, kui SCA osutab CVE-le, mis vÔimaldab RCE-d, ja seejÀrel nÀitab SCA sama komponendi CVE-d, mis kehtib Cisco toodete kohta, mis on sellele RCE-le vastuvÔtlikud. Sellisel juhul on see vale positiivne.
- NÀiteks, CVE leiti komponendis spring-web, seejÀrel nÀitab SCA sama CVE-d teistele Spring Frameworki komponentidele, samas kui CVE ei kehti teiste komponentide kohta. Sellisel juhul on see vale positiivne.
Uurimise objektiks on valitud Open Source projekt DVJA. Uuringus osalesid ainult java komponendid (ilma js-ita).
KokkuvÔtlikud tulemused
Liigume kohe tulemuste juurde, mis on saadud kÀsitsi lÀbi vaadatud haavatavustest. Iga CVE tÀieliku aruandega saab tutvuda lisas.
KokkuvÔtvad tulemused kÔigi haavatavuste kohta:
Parameeter
Nexus IQ
Dependency Check
SÔltuvuste jÀlgimine
Kokku tuvastatud haavatavusi
42
91
51
Vale tuvastatud haavatavused (false positive)
2(4.76%)
62(68,13%)
29(56.86%)
Asjakohaseid haavatavusi ei leitud (false negative)
10
20
27
KokkuvÔtvad tulemused komponentide kaupa:
Parameeter
Nexus IQ
Dependency Check
SÔltuvuste jÀlgimine
Kokku tuvastatud komponente
62
47
59
Kokku haavatavaid komponente
16
13
10
Vale tuvastatud haavatavad komponendid (false positive)
1
5
0
Vale tuvastatud haavatavad komponendid (false positive)
0
6
6
Konstrueerime visuaalsed graafikud, et hinnata vale positiivsete ja vale negatiivsete suhet kogu haavatavuste arvuga. Horisontaalis on mÀrgitud komponendid ja vertikaalis nende tuvastatud haavatavused.



VĂ”rdluseks viidi sarnane uuring lĂ€bi Sonatype'i meeskonna poolt, testides 1531 komponenti OWASP Dependency Check'i abil. Nagu nĂ€eme, on mĂŒra ja Ă”ige tuvastamise suhe meie tulemustega vĂ”rreldav.

Allikas:
Vaadakem mÔned CVE-d meie skaneerimise tulemustest, et mÔista nende tulemuste pÔhjuseid.
Loe lÀhemalt
â1
Alustame mÔnede huvitavate aspektidega Sonatype Nexus IQ-st.
Nexus IQ nÀitab probleemiga seerialiseerimiseks, mis vÔimaldab RCE teostada Spring Frameworkis mitmel korral. CVE-2016-1000027 spring-web:3.0.5 esmakordselt ja CVE-2011-2894 spring-context:3.0.5 ja spring-core:3.0.5. Esialgu tundub, et haavatavus dubleeritakse mitme CVE raames. Kui vaadata CVE-2016-1000027 ja CVE-2011-2894 NVD andmebaasist, siis nÀib, et kÔik on ilmselge.
Komponent
Haavatavus
spring-web:3.0.5
CVE-2016-1000027
spring-context:3.0.5
CVE-2011-2894
spring-core:3.0.5
CVE-2011-2894
Kirjeldus NVD-st:

Kirjeldus NVD-st:

CVE-2011-2894 on iseenesest ĂŒsna tuntud. Aastaaruandes tunnistati see CVE ĂŒheks kĂ”ige sagedamini esinevaks. Kirjeldusi CVE-2016-100027 kohta on NVD-s pĂ”himĂ”tteliselt vĂ€he ja see tundub olevat rakendatav vaid Spring Framework 4.1.4-le. Vaatame ja siin muutub kĂ”ik enam-vĂ€hem selgeks. Ajakirjast aru saame, et peale haavatavuse RemoteInvocationSerializingExporter CVE-2011-2894-s esineb haavatavus HttpInvokerServiceExporter. Nexus IQ ĂŒtleb meile just seda:

Sellegipoolest ei ole NVD-s sellist midagi, mistÔttu Dependency Check ja Dependency Track saavad vale negatiivse.
Samuti on CVE-2011-2894 kirjeldusest mÔistetav, et haavatavus on tÔepoolest olemas nii spring-context:3.0.5-s kui ka spring-core:3.0.5-s. Sellele leidub kinnitust artiklis autori poolt, kes avastas selle haavatavuse.
nr 2
Komponent
Haavatavus
Tulemus
struts2-core:2.3.30
CVE-2016-4003
FALSE
Kui me uurime haavatavust CVE-2016-4003, saame aru, et see parandati juba versioonis 2.3.28, siiski teavitab meid Nexus IQ sellest. Haavatavuse kirjelduse juures on mÀrkus:

See tÀhendab, et haavatavus eksisteerib ainult koos vananenud JRE versiooniga, millest sooviti meid ette hoiatada. Siiski peame seda valehÀireks, kuigi mitte kÔige tÔsisemaks.
â 3
Komponent
Haavatavus
Tulemus
xwork-core:2.3.30
CVE-2017-9804
TRUE
xwork-core:2.3.30
CVE-2017-7672
FALSE
Kui me vaatame CVE-2017-9804 ja CVE-2017-7672 kirjelduseid, siis saame aru, et probleem on URLValidator klassis, kusjuures CVE-2017-9804 tuleneb CVE-2017-7672-st. Teise haavatavuse olemasolu ei too kaasa mingit kasulikku teavet, vĂ€lja arvatud see, et selle tĂ”sidus tĂ”usis kĂ”rgeks, seega vĂ”ib seda pidada liigseks mĂŒra.
Ăldiselt ei ole Nexus IQ-le leitud muid valehĂ€ireid.
â4
On mitu asja, mis eristavad IQ-d teistest lahendustest.
Komponent
Haavatavus
Tulemus
spring-web:3.0.5
CVE-2020-5398
TRUE
CVE NVD-s teatab, et see kehtib ainult versioonide 5.2.x kuni 5.2.3, 5.1.x kuni 5.1.13 ja 5.0.x kuni 5.0.16, kuid kui vaatame CVE kirjeldust Nexus IQ-s, siis nÀeme jÀrgmist:
Advisory Deviation Notice: Sonatype'i turvauuringute meeskond avastas, et see haavatavus tekkis versioonis 3.0.2.RELEASE, mitte 5.0.x nagu nÔuandes öeldud.
SeejÀrel tuleb PoC selle haavatavuse kohta, mis teatab, et see esineb versioonis 3.0.5.
Vale negatiivne saade Dependency Checki ja Dependency Tracki.
â5
Vaatame false positive'i juhtumit Dependency Checkis ja Dependency Trackis.
Dependency Check eristub sellega, et toob esile need CVE-d, mis kuuluvad kogu raamistikku NVD-s, ning need komponendid, millele need CVE-d ei kohaldu. See puudutab CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, mille Dependency Check âkinnitasâ struts-taglib:1.3.8 ja struts-tiles-1.3.8. Need komponendid ei ole seotud sellega, mis on kirjeldatud CVE-s â pĂ€ringute töötlemine, lehtede valideerimine jne. See tuleneb sellest, et ainus seos nende CVE-de ja komponentide vahel on raamistik, mis on pĂ”hjus, miks Dependency Check seda haavatavuseks pidas.
Sama olukord on spring-tx:3.0.5 puhul ning sarnane olukord on struts-core:1.3.8 puhul. Struts-core'i puhul leidis Dependency Check ja Dependency Track vĂ€ga palju haavatavusi, mis tegelikult kehtivad struts2-core'i kohta, mis on pĂ”himĂ”tteliselt eraldi raamistik. Selle juhtumi puhul mĂ”istis Nexus IQ olukorda Ă”igesti ning CVE-de puhul, mille ta esitas, mĂ€rkis, et struts-core on jĂ”udnud lĂ”ppfaasi ja tuleb ĂŒle minna struts2-core'ile.
â6
MĂ”nel juhul on sĂ”ltuvuse kontrolli ja jĂ€lgimise ilmse vea tĂ”lgendamine ebaĂ”iglane. Erakordselt, CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, mille sĂ”ltuvuse kontroll ja jĂ€lgimine mÀÀrasid spring-core:3.0.5-le, kuuluvad tegelikult spring-web:3.0.5-le. Samuti leiti osa neist CVE-dest Nexus IQ-s, siiski mÀÀras IQ need Ă”igesti teisele komponendile. Kuna need haavatavused ei olnud leidnud spring-core-is, ei saa vĂ€ita, et neid pole raamistikus ĂŒldiselt ja avatud lĂ€htekoodi tööriistad Ă”igesti mĂ€rkasid neid haavatavusi (lihtsalt tabas veidi kĂ”rvale).
JĂ€reldused
Nagu me nĂ€eme, ei anna tuvastatud haavatavuste usaldusvÀÀrsuse mÀÀramine kĂ€sitsi ĂŒlevaate tegemisel ĂŒheselt mĂ”istetavaid tulemusi, mistĂ”ttu tekivad vaidlused. Tulemused on sellised, et Nexus IQ lahendusel on madalaim valehĂ€irete mÀÀr ja kĂ”rgeim tĂ€psus.
Esiteks on see seotud sellega, et Sonatype'i meeskond on laiendanud iga CVE haavatavuse kirjeldust NVD-s, tÀpsustades haavatavuse klassi vÔi funktsiooni konkreetse komponendi versiooni jaoks ning teinud tÀiendavaid uuringuid (nt kontrollinud haavatavusi vanemate tarkvaraversioonide puhul).
Samuti mĂ”jutavad tulemusi olulisel mÀÀral haavatavused, mis ei ole NVD-sse jĂ”udnud, kuid siiski esinevad Sonatype'i andmebaasis SONATYPE mĂ€rgistusega. Ăksikasjaliku aruande kohaselt 45% avatud lĂ€htekoodiga haavatavustest ei kajastata NVD-s. Vastavalt WhiteSource'i andmebaasile avaldatakse vaid 29% kĂ”ikidest avatud lĂ€htekoodiga haavatavustest, mis on registreeritud vĂ€ljaspool NVD-d, seega on vĂ€ga oluline otsida haavatavusi ka teistest allikatest.
KokkuvĂ”ttes genereerib Dependency Check palju mĂŒra, jĂ€ttes vĂ€lja osa haavatavatest komponentidest. Dependency Track genereerib vĂ€hem mĂŒra ja tuvastab suure hulga komponente, mille esitamine veebiliideses ei koorma visuaalselt silma.
Siiski nĂ€itab praktika, et avatud lĂ€htekood on esimene samm edasi kĂŒpsesse DevSecOps-i. Esimene asi, millele peaksite mĂ”tlema, et integreerida SCA arendusse, on protsessid, nimelt mĂ”tlemine koos juhtimise ja teiste osakondadega, kuidas peaksid teie organisatsiooni ideaalprotsessid vĂ€lja nĂ€gema. VĂ”ib juhtuda, et teie organisatsiooni puhul katab algusjĂ€rgus Dependency Check vĂ”i Dependency Track kĂ”ik Ă€ri vajadused, samas kui ettevĂ”tete lahendused muutuvad loogiliseks jĂ€tkuks arendatavate rakenduste keerukuse suurenedes.
Lisad A. Tulemused komponentide osas
MĂ€rgid:
- High â kĂ”rge ja kriitilise taseme haavatavused komponendis
- Medium â keskmise taseme haavatavused komponendis
- TRUE â TĂ”eliselt mÀÀratud haavatavus (True positive issue)
- FALSE â ValehĂ€ire (False positive issue)
Komponent
Nexus IQ
Dependency Check
SÔltuvuste jÀlgimine
Tulemus
dom4j: 1.6.1
KÔrge
KÔrge
KÔrge
TRUE
log4j-core: 2.3
KÔrge
KÔrge
KÔrge
TRUE
log4j: 1.2.14
KÔrge
KÔrge
â
TRUE
commons-collections:3.1
KÔrge
KÔrge
KÔrge
TRUE
commons-fileupload:1.3.2
KÔrge
KÔrge
KÔrge
TRUE
commons-beanutils:1.7.0
KÔrge
KÔrge
KÔrge
TRUE
commons-codec:1:10
Medium
â
â
TRUE
mysql-connector-java:5.1.42
KÔrge
KÔrge
KÔrge
TRUE
spring-expression:3.0.5
KÔrge
komponenti ei leitud
TRUE
spring-web:3.0.5
KÔrge
komponenti ei leitud
KÔrge
TRUE
spring-context:3.0.5
Medium
komponenti ei leitud
â
TRUE
spring-core:3.0.5
Medium
KÔrge
KÔrge
TRUE
struts2-config-browser-plugin:2.3.30
Medium
â
â
TRUE
spring-tx:3.0.5
â
KÔrge
â
FALSE
struts-core:1.3.8
KÔrge
KÔrge
KÔrge
TRUE
xwork-core: 2.3.30
KÔrge
â
â
TRUE
struts2-core: 2.3.30
KÔrge
KÔrge
KÔrge
TRUE
struts-taglib:1.3.8
â
KÔrge
â
FALSE
struts-tiles-1.3.8
â
KÔrge
â
FALSE
Lisa B. Tulemused haavatavuste osas
MĂ€rgid:
- High â kĂ”rge ja kriitilise taseme haavatavused komponendis
- Medium â keskmise taseme haavatavused komponendis
- TRUE â TĂ”eliselt mÀÀratud haavatavus (True positive issue)
- FALSE â ValehĂ€ire (False positive issue)
Komponent
Nexus IQ
Dependency Check
SÔltuvuste jÀlgimine
TÔsidus
Tulemus
Kommentaar
dom4j: 1.6.1
CVE-2018-1000632
CVE-2018-1000632
CVE-2018-1000632
KÔrge
TRUE
CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
KÔrge
TRUE
log4j-core: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
KÔrge
TRUE
CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
Madal
TRUE
log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571
â
KÔrge
TRUE
â
CVE-2020-9488
â
Madal
TRUE
SONATYPE-2010-0053
â
â
KÔrge
TRUE
commons-collections:3.1
â
CVE-2015-6420
CVE-2015-6420
KÔrge
FALSE
Kordab RCE(OSSINDEX)
â
CVE-2017-15708
CVE-2017-15708
KÔrge
FALSE
Kordab RCE(OSSINDEX)
SONATYPE-2015-0002
RCE (OSSINDEX)
RCE(OSSINDEX)
KÔrge
TRUE
commons-fileupload:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
KÔrge
TRUE
SONATYPE-2014-0173
â
â
Medium
TRUE
commons-beanutils:1.7.0
CVE-2014-0114
CVE-2014-0114
CVE-2014-0114
KÔrge
TRUE
â
CVE-2019-10086
CVE-2019-10086
KÔrge
FALSE
Haavatavus kehtib ainult versioonide 1.9.2+ jaoks
commons-codec:1:10
SONATYPE-2012-0050
â
â
Medium
TRUE
mysql-connector-java:5.1.42
CVE-2018-3258
CVE-2018-3258
CVE-2018-3258
KÔrge
TRUE
CVE-2019-2692
CVE-2019-2692
â
Medium
TRUE
â
CVE-2020-2875
â
Medium
FALSE
TĂ€pne sama haavatavus, mis CVE-2019-2692, kuid mĂ€rkusega 'rĂŒnnakud vĂ”ivad oluliselt mĂ”jutada tĂ€iendavaid tooteid'
â
CVE-2017-15945
â
KÔrge
FALSE
Ei kehti mysql-connector-java kohta
â
CVE-2020-2933
â
Madal
FALSE
Duplikaat CVE-2020-2934
CVE-2020-2934
CVE-2020-2934
â
Medium
TRUE
spring-expression:3.0.5
CVE-2018-1270
komponenti ei leitud
â
KÔrge
TRUE
CVE-2018-1257
â
â
Medium
TRUE
spring-web:3.0.5
CVE-2016-1000027
komponenti ei leitud
â
KÔrge
TRUE
CVE-2014-0225
â
CVE-2014-0225
KÔrge
TRUE
CVE-2011-2730
â
â
KÔrge
TRUE
â
â
CVE-2013-4152
Medium
TRUE
CVE-2018-1272
â
â
KÔrge
TRUE
CVE-2020-5398
â
â
KÔrge
TRUE
NÀidis IQ toetuseks: 'Sonatype'i turvatehnoloogia meeskond avastas, et see haavatavus kÀidi vÀlja versioonis 3.0.2.RELEASE ja mitte 5.0.x, nagu advisooris öeldud.'
CVE-2013-6429
â
â
Medium
TRUE
CVE-2014-0054
â
CVE-2014-0054
Medium
TRUE
CVE-2013-6430
â
â
Medium
TRUE
spring-context:3.0.5
CVE-2011-2894
komponenti ei leitud
â
Medium
TRUE
spring-core:3.0.5
â
CVE-2011-2730
CVE-2011-2730
KÔrge
TRUE
CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
Medium
TRUE
â
â
CVE-2013-4152
Medium
FALSE
Selle sama haavatavuse duplikaat spring-web'is
â
CVE-2013-4152
â
Medium
FALSE
Haavatavus kehtib spring-web komponendi kohta
â
CVE-2013-6429
CVE-2013-6429
Medium
FALSE
Haavatavus kehtib spring-web komponendi kohta
â
CVE-2013-6430
â
Medium
FALSE
Haavatavus kehtib spring-web komponendi kohta
â
CVE-2013-7315
CVE-2013-7315
Medium
FALSE
SPLIT CVE-2013-4152. + Haavatavus kehtib spring-web komponendi kohta
â
CVE-2014-0054
CVE-2014-0054
Medium
FALSE
Haavatavus kehtib spring-web komponendi kohta
â
CVE-2014-0225
â
KÔrge
FALSE
Haavatavus kehtib spring-web komponendi kohta
â
â
CVE-2014-0225
KÔrge
FALSE
Selle sama haavatavuse duplikaat spring-web'is
â
CVE-2014-1904
CVE-2014-1904
Medium
FALSE
Haavatavus kehtib spring-web-mvc komponendi kohta
â
CVE-2014-3625
CVE-2014-3625
Medium
FALSE
Haavatavus kehtib spring-web-mvc komponendi kohta
â
CVE-2016-9878
CVE-2016-9878
KÔrge
FALSE
Haavatavus kehtib spring-web-mvc komponendi kohta
â
CVE-2018-1270
CVE-2018-1270
KÔrge
FALSE
spring-expression / spring-messages jaoks
â
CVE-2018-1271
CVE-2018-1271
Medium
FALSE
Haavatavus kehtib spring-web-mvc komponendi kohta
â
CVE-2018-1272
CVE-2018-1272
KÔrge
TRUE
CVE-2014-3578
CVE-2014-3578 (OSSINDEX)
CVE-2014-3578
Medium
TRUE
SONATYPE-2015-0327
â
â
Madal
TRUE
struts2-config-browser-plugin:2.3.30
SONATYPE-2016-0104
â
â
Medium
TRUE
spring-tx:3.0.5
â
CVE-2011-2730
â
KÔrge
FALSE
Haavatavus ei kehti spring-tx'ile
â
CVE-2011-2894
â
KÔrge
FALSE
Haavatavus ei kehti spring-tx'ile
â
CVE-2013-4152
â
Medium
FALSE
Haavatavus ei kehti spring-tx'ile
â
CVE-2013-6429
â
Medium
FALSE
Haavatavus ei kehti spring-tx'ile
â
CVE-2013-6430
â
Medium
FALSE
Haavatavus ei kehti spring-tx'ile
â
CVE-2013-7315
â
Medium
FALSE
Haavatavus ei kehti spring-tx'ile
â
CVE-2014-0054
â
Medium
FALSE
Haavatavus ei kehti spring-tx'ile
â
CVE-2014-0225
â
KÔrge
FALSE
Haavatavus ei kehti spring-tx'ile
â
CVE-2014-1904
â
Medium
FALSE
Haavatavus ei kehti spring-tx'ile
â
CVE-2014-3625
â
Medium
FALSE
Haavatavus ei kehti spring-tx'ile
â
CVE-2016-9878
â
KÔrge
FALSE
Haavatavus ei kehti spring-tx'ile
â
CVE-2018-1270
â
KÔrge
FALSE
Haavatavus ei kehti spring-tx'ile
â
CVE-2018-1271
â
Medium
FALSE
Haavatavus ei kehti spring-tx'ile
â
CVE-2018-1272
â
Medium
FALSE
Haavatavus ei kehti spring-tx'ile
struts-core:1.3.8
â
CVE-2011-5057 (OSSINDEX)
Medium
FASLE
Haavatavus Struts 2 jaoks
â
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
KÔrge
FALSE
Haavatavus Struts 2 jaoks
â
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
Medium
FALSE
Haavatavus Struts 2 jaoks
â
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
KÔrge
FALSE
Haavatavus Struts 2 jaoks
CVE-2016-1182
3VE-2016-1182
â
KÔrge
TRUE
â
â
CVE-2011-5057
Medium
FALSE
Haavatavus Struts 2 jaoks
â
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
KÔrge
FALSE
Haavatavus Struts 2 jaoks
â
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
Medium
FALSE
Haavatavus Struts 2 jaoks
CVE-2015-0899
CVE-2015-0899
â
KÔrge
TRUE
â
CVE-2012-0394
CVE-2012-0394
Medium
FALSE
Haavatavus Struts 2 jaoks
â
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
KÔrge
FALSE
Haavatavus Struts 2 jaoks
â
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
KÔrge
FALSE
Haavatavus Struts 2 jaoks
â
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
KÔrge
FASLE
Haavatavus Struts 2 jaoks
â
CVE-2013-2115
CVE-2013-2115
KÔrge
FASLE
Haavatavus Struts 2 jaoks
â
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
KÔrge
FASLE
Haavatavus Struts 2 jaoks
â
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
KÔrge
FASLE
Haavatavus Struts 2 jaoks
CVE-2014-0114
CVE-2014-0114
â
KÔrge
TRUE
â
CVE-2015-2992
CVE-2015-2992
Medium
FALSE
Haavatavus Struts 2 jaoks
â
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
KÔrge
FALSE
Haavatavus Struts 2 jaoks
CVE-2016-1181
CVE-2016-1181
â
KÔrge
TRUE
â
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
KÔrge
FALSE
Haavatavus Struts 2 jaoks
xwork-core:2.3.30
CVE-2017-9804
â
â
KÔrge
TRUE
SONATYPE-2017-0173
â
â
KÔrge
TRUE
CVE-2017-7672
â
â
KÔrge
FALSE
CVE-2017-9804 dublet
SONATYPE-2016-0127
â
â
KÔrge
TRUE
struts2-core:2.3.30
â
CVE-2016-6795
CVE-2016-6795
KÔrge
TRUE
â
CVE-2017-9787
CVE-2017-9787
KÔrge
TRUE
â
CVE-2017-9791
CVE-2017-9791
KÔrge
TRUE
â
CVE-2017-9793
â
KÔrge
FALSE
CVE-2018-1327 dublika
â
CVE-2017-9804
â
KÔrge
TRUE
â
CVE-2017-9805
CVE-2017-9805
KÔrge
TRUE
CVE-2016-4003
â
â
Medium
FALSE
Kohaldub target Apache Struts 2.x kuni 2.3.28, kuid versioon on 2.3.30. Kuid, lĂ€htudes kirjeldusest, CVE kehtib iga Struts 2 versiooni puhul, kui kasutatakse JRE 1.7 vĂ”i vanemat. Tundub, et nad ĂŒritavad ennast kaitsta, kuid see nĂ€eb rohkem vĂ€lja nagu vale.
â
CVE-2018-1327
CVE-2018-1327
KÔrge
TRUE
CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
KÔrge
TRUE
Just see haavatavus, mida kuritegelikud isikud kasutasid Equifaxis 2017. aastal.
CVE-2017-12611
CVE-2017-12611
â
KÔrge
TRUE
CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
KÔrge
TRUE
struts-taglib:1.3.8
â
CVE-2012-0394
â
Medium
FALSE
struts2-core jaoks
â
CVE-2013-2115
â
KÔrge
FALSE
struts2-core jaoks
â
CVE-2014-0114
â
KÔrge
FALSE
commons-beanutils jaoks
â
CVE-2015-0899
â
KÔrge
FALSE
Ei kehti taglibi suhtes
â
CVE-2015-2992
â
Medium
FALSE
Kehtib struts2-core suhtes
â
CVE-2016-1181
â
KÔrge
FALSE
Ei kehti taglibi suhtes
â
CVE-2016-1182
â
KÔrge
FALSE
Ei kehti taglibi suhtes
struts-tiles-1.3.8
â
CVE-2012-0394
â
Medium
FALSE
struts2-core jaoks
â
CVE-2013-2115
â
KÔrge
FALSE
struts2-core jaoks
â
CVE-2014-0114
â
KÔrge
FALSE
commons-beanutils all
â
CVE-2015-0899
â
KÔrge
FALSE
Ei kehti tiles'i suhtes
â
CVE-2015-2992
â
Medium
FALSE
struts2-core jaoks
â
CVE-2016-1181
â
KÔrge
FALSE
Ei kehti taglibi suhtes
â
CVE-2016-1182
â
KÔrge
FALSE
Ei kehti taglibi suhtes
Allikas: habr.com
