Kolmanda osapoole tarkvara komponente analĂŒĂŒsimise tĂ€htsus (ingl. k. Software Composition Analysis â SCA) arendusprotsessis kasvab koos iga-aastaste aruannetega avatud lĂ€htekoodi teeki seonduvatest haavatavustest, mida avaldavad ettevĂ”tted Synopsys, Sonatype, Snyk, White Source. Vastavalt aruande... avastatud haavatuste arv avatud lĂ€htekoodis 2019. aastal kasvas peaaegu 1,5 korda vĂ”rreldes eelmise aastaga, samas kui avatud lĂ€htetekstiga komponente kasutatakse 60% kuni 80% projektidest. Kui tugineda sĂ”ltumatule arvamusele, on SCA protsessid OWASP SAMM ja BSIMM eraldi praktikad, mis nĂ€itavad kĂŒpsuse taset, ja 2020. aasta esimeses pooles avaldas OWASP uue standardi OWASP Software Component Verification Standard (SCVS), mis pakub parimaid tavasid kolmandate isikute komponentide kontrollimiseks tarkvara tarneahelas.

Ăks kĂ”ige iseloomulikumaid juhtumeid ettevĂ”tte Equifax juures mai 2017. aastal. Teadmata kurjategijad said kĂ€tte 143 miljoni ameeriklase isikuandmed, sealhulgas tĂ€isnimesid, aadresse, sotsiaalhoolekande numbreid ja juhilube. 209 000 juhul sisaldasid dokumendid ka ohvrite pangakaarditeavet. See lekke juhtum toimus kritilise haavatavuse tĂ”ttu Apache Struts 2-s (CVE-2017-5638), samas kui parandustöötlus oli avaldatud juba mĂ€rtsis 2017. EttevĂ”ttel oli kaks kuud uuenduse installimiseks, kuid keegi ei olnud sellega mures.
KĂ€esolevas artiklis arutatakse tööriista valimise kĂŒsimust SCA lĂ€biviimiseks analĂŒĂŒsi tulemuste kvaliteedi seisukohalt. Samuti tuuakse esile tööriistade funktsionaalne vĂ”rdlus. CI/CD-sse integreerimise protsessi ja vĂ”imalusi kĂ€sitleme jĂ€rgmistes vĂ€ljaannetes. Lai tööriistade nimekiri on esitatud OWASP , kuid praeguses ĂŒlevaates kĂ€sitleme vaid kĂ”ige populaarsemaid avatud lĂ€htekoodi tööriistu Dependency Check, veidi vĂ€hem tuntud avatud lĂ€htekoodi 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öö ĐżŃĐžĐœŃОп
â see on utiliit (CLI, maven, jenkins moodul, ant), mis analĂŒĂŒsib projekti faile, kogub teavet sĂ”ltuvuste kohta (paketi nimi, grupp, spetsifikatsiooni pealkiri, versioon...), koostab CPE (Common Platform Enumeration) stringi, pakendi URL (PURL) ja tuvastab CPE/PURL jaoks haavatavused andmebaasidest (NVD, Sonatype OSS Index, NPM Audit API...), millele jĂ€rgneb ĂŒhekordse aruande koostamine HTML, JSON, XML vormingus...
Vaatame, kuidas CPE vÀlja nÀeb:
cpe:2.3:part:tootja:toode:versioon:uuendus:vĂ€ljaanne:keel:sw_edition:target_sw:target_hw:muu- Osa: MĂ€rkus, et komponent kuulub rakendusse (a), operatsioonisĂŒsteemi (o), riistvarasse (h) (kohustuslik punkt)
- Tootja: Toote tootja nimi (kohustuslik punkt)
- Toode: Toote nimi (kohustuslik punkt)
- Versioon: Komponendi versioon (aegunud punkt)
- Uuendus: Paketi uuendus
- VĂ€ljaanne: PĂ€randversioon (aegunud punkt)
- Keel: Keel, mÀÀratletud RFC-5646-s
- SW vÀljaanne: Tarkvara versioon
- Kaasnevad SW: Tarkvarakeskkond, kus toode töötab
- Kaasnevad HW: Riistvara keskkond, kus toode töötab
- Muu: Teave teenusepakkuja vÔi toote kohta
CPE nÀide nÀeb vÀlja jÀrgmiselt:
cpe:2.3:a:pivotal_software:spring_framework:3.0.0:*:*:*:*:*:*:* String 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 nĂ€eme selle CPE ametlikku mainimist. Esimene probleem, millele kohe tĂ€helepanu pöörata â CVE NVD-s, vastavalt CPE-le, teatab raamistikus olevast probleemist, mitte konkreetses komponendis. See tĂ€hendab, et kui arendajad on tihedalt seotud raamistikuga ja tuvastatud haavatavus ei puuduta neid mooduleid, mida arendajad kasutavad, peab turvaspetsialist Ă”igel vĂ”i vÀÀral tingimusel selle CVE lĂ€bi vaatama ja vĂ€rskendamise ĂŒle jĂ€rele mĂ”tlema.
URL-i aadressit kasutatakse ka SCA tööriistade poolt. Paketi URL-i formaat on jÀrgmine:
skeem:tĂŒĂŒp/nimi@versioon?kvalifikaatorid#subpath- Skeem: Oleks alati âpkgâ, nĂ€idates, 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)
- Nimi ruum: MĂ”ned nime prefiksid, nagu Maven'i rĂŒhma identifikaator, Docker'i pildi omanik, GitHub'i kasutaja vĂ”i organisatsioon. Valikuline ja sĂ”ltub tĂŒĂŒbist.
- Nimi: Paketi nimi (kohustuslik punkt)
- Versioon: Paketi versioon
- Kvalifikaatorid: Lisa kvalifikatsioonide andmed paketi, nagu operatsioonisĂŒsteem, arhitektuur, jaotamine jne. Valikuline ja sĂ”ltub tĂŒĂŒbist.
- Alamtee: TĂ€iendav tee paketis, mis asub 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 komponente (BOM), mis on koostatud. ja , st valmis spetsifikatsioonid olemasolevatest sĂ”ltuvustest. See on XML-fail, mis kirjeldab sĂ”ltuvusi â nimi, hashes, paketi URL, vĂ€ljaandja, litsents. SeejĂ€rel analĂŒĂŒsib Dependency Track BOM'i, uurib olemasolevate sĂ”ltuvuste CVE-d, kasutades haavatavuste andmebaasi (NVD, Sonatype OSS Index ...), pĂ€rast mida koostab diagramme, arvutab mÔÔdikuid ja vĂ€rskendab regulaarselt komponentide haavatavuse staatuse andmeid.
NÀide sellest, kuidas BOM XML-formaadis vÀlja nÀeb:
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 Dependency Track'i sisendparameetriteks, vaid ka tarkvara koostisosade inventeerimiseks tarneahelas, nĂ€iteks tarkvara kliendile esitamiseks. 2014. aastal esitati USA-s isegi seaduseelnĂ”u , mis sĂ€testas, et tarkvara hankimisel peab iga riigiasutus kĂŒsima BOM'i, et vĂ€ltida haavatavate komponentide kasutamist, kuid seadus ei jĂ”ustunud.
Tagasi tulles SCA juurde, on Dependency Track'il valmislahendused teavitamisplatvormidega, nagu Slack, ja haavatavuste haldamise sĂŒsteemidega, nagu Kenna Security. Tasub ka mĂ€rkida, et Dependency Track tuvastab vananenud versioonid paketidest ja pakub teavet litsentside kohta (SPDX-toe kaudu).
Kui rÀÀkida just SCA kvaliteedist, siis siin on pÔhimÔtteline erinevus.
Dependency Track ei vÔta projekti sisendina, vaid vÔtab tÀpselt BOM-efekti. See tÀhendab, et kui me soovime projekti kontrollida, peame esmalt genereerima bom.xml, nÀiteks CycloneDX abil. Nii sÔltub Dependency Track otseselt CycloneDX-st. Samas annab see vÔimaluse kohandamiseks. Nii kirjutaski OZONi meeskond BOM-failide koostamiseks Golangi projektidele edasise skaneerimise eesmÀrgil lÀbi Dependency Tracki.
on Sonatype'i kommertslahendus SCA jaoks, mis on osa Sonatype'i ökosĂŒsteemist, kuhu kuulub ka Nexus Repository Manager. Nexus IQ suudab vastu vĂ”tta nii war-arhiive (Java projektide jaoks) veebiliidese vĂ”i API kaudu kui ka BOM-e, kui teie organisatsioon ei ole jĂ”udnud CycloneDX-lt uue lahenduse peale ĂŒle minna. Erinevalt avatud lĂ€htekoodiga lahendustest, kĂ€sitleb IQ mitte ainult CP/PURL-i tuvastatud komponendi ja vastava haavatavuse andmebaasist, vaid arvestab ka oma uuringutega, nĂ€iteks haavatava funktsiooni vĂ”i klassi nimega. IQ mehhanismid kĂ€sitletakse hiljem tulemuste analĂŒĂŒsimisel.
KokkuvĂ”tteks vaatame mĂ”ned funktsionaalsete omaduste kokkuvĂ”tted, samuti toetatud programmeerimiskeeli analĂŒĂŒsimiseks:
Keele
Nexus IQ
Dependency Check
Dependency Track
Java
+
+
+
C/C++
+
+
â
C#
+
+
â
.Net
+
+
+
Erlang
â
â
+
JavaScript (NodeJS)
+
+
+
PHP
+
+
+
Python
+
+
+
Ruby
+
+
+
Perl
â
â
â
Scala
+
+
+
Objective C
+
+
â
Swift
+
+
â
R
+
â
â
Go
+
+
+
Funktsionaalsed vÔimalused
Funktsionaalsed vÔimalused
Nexus IQ
Dependency Check
Dependency Track
VÔime tagada komponentide kontrolli, mis on kasutatud lÀhtekoodis, litsentsi puhtuse osas
+
â
+
VĂ”ime skaneerida ja analĂŒĂŒsida haavatavuste ja litsentsi puhtuse osas Docker'i pilte
+ Integreerimine Clairiga
â
â
VÔime seadistada turvapoliitikaid avatud lÀhtekoodiga raamatukogude kasutamiseks
+
â
â
VÔime skaneerida avatud lÀhtekoodiga repo-sid 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
Erialase uurimisrĂŒhma olemasolu
+
â
â
Töö suletud kontekstis
+
+
+
Kolmandate osapoolte andmebaaside kasutamine
+ Sonatype'i suletud andmebaas
+ Sonatype OSS, NPM Public Advisors
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, toetus enda haavatavuste andmebaasile
VÔime filtreerida avatud lÀhtekoodiga komponente arendusprotsessi kiirusel vastavalt seadistatud poliitikatele
+
â
â
Soovitused haavatavuste parandamiseks, koos viidete olemasoluga parandamisele
+
+- (sÔltub avalikest andmebaasidest)
+- (sÔltub avalikest andmebaasidest)
Tuletatud haavatavuste jÀrjestamine kriitilisuse jÀrgi
+
+
+
JuurdepÀÀsu rollimudel
+
â
+
Kommando-liidese (CLI) tugi
+
+
+- (ainult CycloneDX jaoks)
Haavatavuste vÀljavÔtt ja sortimine mÀÀratletud kriteeriumide alusel
+
â
+
Rakenduste staatuse juhtpaneel
+
â
+
Aruannete genereerimine PDF-formaadis
+
â
â
Aruannete genereerimine JSONCSV formaadis
+
+
â
Venekeelse toe olemasolu
â
â
â
Integratsiooni vÔimalused
Integreerimine
Nexus IQ
Dependency Check
Dependency Track
LDAP/Active Directory integratsioon
+
â
+
Pideva integreerimise (continous integration) sĂŒsteemi integreerimine Bamboo
+
â
â
Pideva integreerimise (continous integration) sĂŒsteemi integreerimine TeamCity
+
â
â
Pideva integreerimise (continous integration) sĂŒsteemi integreerimine GitLab
+
+- (GitLabi pistikprogrammina)
+
Pideva integreerimise (continous integration) sĂŒsteemi integreerimine Jenkins
+
+
+
IDE pistikprogrammide olemasolu
+ IntelliJ, Eclipse, Visual Studio
â
â
Kohandatud integratsiooni toeks veebiteenuste (API) kaudu
+
â
+
Dependency Check
Esimene kÀivitamine
KĂ€ivitame Dependency Check tahtlikult haavatavas rakenduses .
Sellega saame hakkama :
mvn org.owasp:dependency-check-maven:checkTulemuseks ilmub kausta target dependency-check-report.html.

Avame faili. PÀrast kokkuvÔtte teavet haavatavuste koguarvu kohta nÀeme teavet kÔrge Severity ja Confidence tasemega haavatavuste kohta koos paketi, CPE ja CVE arvnÀitajaga.
SeejĂ€rel jĂ€rgneb ĂŒksikasjalik teave, sealhulgas see, mille alusel otsus tehti (evidence), s.t. mingi BOM.

JĂ€rgneb CPE, PURL ja CVE kirjeldus. Parandusettepanekud ei ole tegelikult saadaval, kuna neid ei ole NVD andmebaasis.

SĂŒsteemsete tulemuste vaatamiseks vĂ”ib seadistada Nginxi minimaalsete seadistustega vĂ”i saata saadud vead defektide haldamise sĂŒsteemi, mis toetavad Dependency Check konnektoreid. NĂ€iteks Defect Dojo.
Dependency Track
Paigaldamine
Dependency Track on omakorda veebiplatvorm, mis kuvab diagramme, seega ei ole terav probleem defektide sÀilitamisega kolmandas lahenduses siin.
Installeerimiseks on toetatud jÀrgmised stsenaariumid: Docker, WAR, Executable WAR.
Esimene kÀivitamine
Liigume kĂ€ivitatud teenuse URL-ile. Logime sisse admin/admin, muudame sisselogimise ja parooli, mille jĂ€rel pÀÀseme juhtpaneelile. JĂ€rgmine samm on luua projekt testrakendusele Java-s Avaleht/Projektid â Loo projekt . NĂ€iteks vĂ”tame DVJA.

Kuna Dependency Track saab sisendina ainult BOM-i, tuleb see BOM hankida. Alustame :
mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBomSaame bom.xml ja laadime faili loodud projekti DVJA â Dependeencies â Laadi BOM ĂŒles.
Siseneme Administration â Analyzers. NĂ€eme, et meil on aktiveeritud ainult Internal Analyzer, mis hĂ”lmab NVD-d. Lisame ka Sonatype OSS Indexi.

Nii saame jĂ€rgmise ĂŒlevaate meie projektist:

Nimekirjas on ka ĂŒks haavatavus, mis kehtib Sonatype OSS-i suhtes:

Peamine pettumus oli see, et Dependency Track ei aktsepteeri enam Dependency Check'i xml-aruandeid. Viimased toetatud integratsiooniversioonid Dependency Checkiga olid 1.0.0 â 4.0.2, samas kui mina testisin 5.3.2.
Siin (ja ), kui see veel vÔimalik oli.
Nexus IQ
Esimene kÀivitamine
Nexus IQ installimine toimub arhiivide kaudu , kuid me oleme selleks otstarbeks kogunud enda Docker'i pildi.
PĂ€rast konsooli sisselogimist tuleb luua Organisatsioon ja Rakendus.



Nagu nÀha, on IQ seadistamine mÔnevÔrra keerulisem, sest peame looma ka poliitikaid, mis kehtivad erinevate "etappide" (dev, build, stage, release) jaoks. See on vajalik, et blokeerida haavatavad komponendid, niipea kui need liiguvad lÀhemale tootepÀringule, vÔi blokeerida need kohe, kui nad satuvad Nexus Repo'sse arendajate allalaadimisel.
Et tunda erinevust avatud lÀhtekoodiga ja ettevÔtte tasemel, teeme sama skaneerimise lÀbi Nexus IQ samamoodi nagu , enne kui loome 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=
Liigume URL-ile, et avada genereeritud aruanne IQ veebiliideses:

Siit nÀete kÔiki poliitikanÔuete rikkumisi erineva tÔsiduse tasemega (Info kuni Security Critical). TÀht D komponendi kÔrval tÀhistab, et komponent on Direct Dependency, ja tÀht T komponendi kÔrval tÀhistab, et komponent on Transitive Dependency, ehk on transitiivne.
Muide, aruanne Snykilt teatab, et rohkem kui 70% avatud lÀhtekoodiga haavatavustest, mis on avastatud Node.js, Java ja Ruby-s, asub transitiivsetes sÔltuvustes.
Kui avada ĂŒks Nexus IQ poliitika rikkumistest, saame nĂ€ha komponendi kirjeldust ning Version Graph'i, mis nĂ€itab praeguse versiooni asukohta ajagraafikul ja millal haavatavus enam haavatav ei ole. Graafiku kĂŒĂŒnalde kĂ”rgus nĂ€itab selle komponendi kasutamise populaarsust.

Kui minna haavatavuste loomesse ja avada CVE, siis saab lugeda selle haavatavuse kirjeldust, soovitusi parandamiseks ning pÔhjust, miks see komponent rikkumise alla on langenud, s.t. klassi olemasolu. DiskFileitem.class.


Teeme kokkuvÔtte ainult Java kolmandate osapoole komponentide kohta, jÀttes js komponendid vÀlja. Sulgudes nÀitame neid haavatavusi, mis 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)
Edasi liikudes analĂŒĂŒsime saadud tulemusi ja selgitame, millised neist haavatavustest on reaalsed defektid ning millised valehĂ€ired.
MĂ€rkus
See ĂŒlevaade ei ole vaidlustamatult tĂ”ene. Autor ei soovinud vĂ€lja tuua ĂŒhte tööriista teiste seas. Ălevaate eesmĂ€rk oli nĂ€idata SCA tööriistade toimimise mehhanisme ja nende tulemuste kontrollimise meetodeid.
Tulemuste vÔrdlemine
Tingimused:
ValehÀire kolmandate osapoolte komponentide haavatavuste osas on:
- CVE mittevastavus tuvastatud komponendile
- NÀiteks, kui haavatavus on tuvastatud struts2 raamistiku osas ning tööriist viitab struts-tiles raamistiku komponendile, millele see haavatavus ei kehti, on see valehÀire.
- CVE mittevastavus tuvastatud komponendi versioonile
- NÀiteks, kui haavatavus on seotud versiooniga python > 3.5 ja tööriist mÀrgib haavatavaks versiooni 2.7 - see on valehÀire, kuna haavatavus kehtib ainult tooteliini 3.x kohta.
- CVE dubleerimine
- NÀiteks, kui SCA viitab CVE-le, mis vÔimaldab RCE-d, seejÀrel viitab SCA sellele samale komponendile CVE-le, mis kehtib Cisco toodetele, millel on see RCE, siis oleks see valehÀire.
- NÀiteks leiti CVE komponendist spring-web, mille jÀrel SCA viitas sellele samale CVE teiste Spring Frameworki komponentide osas, samas kui CVE ei puuduta teisi komponente. Sellisel juhul on tegemist vale positiivsega.
Uurimise objektiks on valitud avatud lÀhtekoodiga projekt DVJA. Uuringus osalesid ainult Java komponendid (ilma js-ita).
KokkuvÔtlikud tulemused
Liigume otse kĂ€sitsi ĂŒlevaatuse tulemustesse, kus tuvastatud haavatavused on vĂ€lja toodud. TĂ€ieliku aruande iga CVE kohta saab tutvuda lisas.
KokkuvÔtlikud tulemused kÔikide haavatavuste kohta:
Parameeter
Nexus IQ
Dependency Check
Dependency Track
Kokku tuvastatud haavatavusi
42
91
51
Vale tuvastatud haavatavusi (false positive)
2(4.76%)
62(68,13%)
29(56.86%)
Asjakohaseid haavatavusi ei leitud (false negative)
10
20
27
KokkuvÔtlikud tulemused komponentide kohta:
Parameeter
Nexus IQ
Dependency Check
Dependency Track
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
Loome visuaalsed graafikud, et hinnata vale positiivsete ja vale negatiivsete suhet kokkuhaavatavuste arvu suhtes. Horisontaalselt on mÀrgatud komponendid ja vertikaalselt neis tuvastatud haavatavused.



VĂ”rdluseks, sarnast uuringut viis lĂ€bi Sonatype meeskond, testides projekti 1531 komponendiga OWASP Dependency Check abil. Nagu me nĂ€eme, on mĂŒra ja Ă”ige tuvastuse suhe meie tulemustega vĂ”rreldav.

Allikas:
Vaatame mÔningaid CVE-sid meie skannimise tulemustest, et mÔista selliste tulemuste pÔhjuseid.
Lisateave
â1
Alustame mÔnedest huvitavatest punktidest Sonatype Nexus IQ-st.
Nexus IQ osutab deserialiseerimise probleemile, mis vÔimaldab RCE-d Spring Frameworkis mitu korda. CVE-2016-1000027 spring-web:3.0.5 esmakordselt ja CVE-2011-2894 spring-context:3.0.5 ja spring-core:3.0.5. Alguses nÀib, et haavatavus kordub mitme CVE kaudu. Kui vaadata CVE-2016-1000027 ja CVE-2011-2894 NVD andmebaasis, tundub kÔik esmapilgul selge.
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 oli see CVE tunnustatud ĂŒheks kĂ”ige sagedamini esinevaks. Kirjeldusi CVE-2016-100027 kohta on NVD-s pĂ”himĂ”tteliselt vĂ€he ja see nĂ€ib olevat rakendatav ainult Spring Frameworki versioonile 4.1.4. Vaatame ja siit muutub kĂ”ik rohkem vĂ”i vĂ€hem selgeks. Artiklist mĂ”istame, et peale haavatavuse RemoteInvocationSerializingExporter CVE-2011-2894 puhul on haavatavus samuti HttpInvokerServiceExporter. Nexus IQ ĂŒtleb meile seda:

Siiski ei ole midagi sellist NVD-s, mistÔttu Dependency Check ja Dependency Track saavad vale negatiivse tulemuse.
Samuti vÔib CVE-2011-2894 kirjelduse pÔhjal aru saada, et haavatavus on tÔeliselt olemas nii spring-context:3.0.5-s kui ka spring-core:3.0.5-s. Kinnitust sellele vÔib leida artiklist, mille autor leidis selle haavatavuse.
#2
Komponent
Haavatavus
Tulemus
struts2-core:2.3.30
CVE-2016-4003
FALSE
Kui uurime haavatavust CVE-2016-4003, siis saame aru, et see fikseeriti juba versioonis 2.3.28, kuid Nexus IQ teatab meile sellest. Haavatavuse kirjelduse lÔpus on mÀrkus:

See tÀhendab, et haavatavus eksisteerib ainult koos vananenud JRE versiooniga, millest meid sooviti hoiatada. Siiski peame seda vale positiivseks, kuigi mitte kÔige hirmutavamaks.
#3
Komponent
Haavatavus
Tulemus
xwork-core:2.3.30
CVE-2017-9804
TĂSI
xwork-core:2.3.30
CVE-2017-7672
FALSE
Kui vaatame CVE-2017-9804 ja CVE-2017-7672 kirjeldust, siis saame aru, et probleem on URLValidator class, kusjuures CVE-2017-9804 tuleneb CVE-2017-7672-st. Teise haavatavuse olemasolu ei too mingit kasu, vĂ€lja arvatud, et selle tĂ”sidus tĂ”usis kĂ”rgeks, seetĂ”ttu vĂ”ib seda pidada liigselt mĂŒra.
KokkuvÔttes ei leitud Nexus IQ jaoks teisi vale positiivseid tulemusi.
#4
On mitmeid aspekte, mis eristavad IQ teistest lahendustest.
Komponent
Haavatavus
Tulemus
spring-web:3.0.5
CVE-2020-5398
TĂSI
CVE NVD-s teatab, et see kehtib ainult versioonide 5.2.x kuni 5.2.3, 5.1.x kuni 5.1.13 ja versioonide 5.0.x kuni 5.0.16 jaoks, kuid kui vaatame CVE kirjelduse Nexus IQ-s, siis nÀeme jÀrgmist:
Advisory Deviation Notice: Sonatypeâi turuuringute meeskond tuvastas, et see haavatavus anti sisse versioonis 3.0.2.RELEASE ja mitte 5.0.x nagu advisori teates öeldud.
PÀrast seda jÀrgneb sellele haavatavusele PoC, mis teatab, et see on olemas versioonis 3.0.5.
Vale negatiivne saadetakse Dependency Checkile ja Dependency Trackile.
#5
Vaatame false positive tulemusi Dependency Checki ja Dependency Tracki jaoks.
Dependency Check tĂ”stetakse esile seetĂ”ttu, et see kajastab neid CVE-sid, mis kuuluvad kogu raamistikku NVD-s, nendesse komponentidesse, mida need CVE-d ei hĂ”lma. See kehtib CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182 kohta, mida Dependency Check âsidusâ struts-taglib:1.3.8 ja struts-tiles-1.3.8-ga. Need komponendid ei oma midagi ĂŒhist sellega, mis on CVE-s kirjeldatud â pĂ€ringute töötlemine, lehtede valideerimine jne. See on tingitud sellest, et ainus seos nende CVE-de ja komponentide vahel on ainult raamistik, mistĂ”ttu Dependency Check pidas seda haavatavuseks.
Sama olukord spring-tx:3.0.5 puhul ja sarnane olukord struts-core:1.3.8 puhul. Struts-core'i sĂ”ltuvuse kontrollimine ja sĂ”ltuvuste jĂ€lgimine tuvastasid palju haavatavusi, mis tegelikult kehtivad struts2-core'i kohta, mis on sisuliselt eraldi raamistik. Antud juhul mĂ”istis Nexus IQ Ă”igesti olukorda ja niisugustes CVE-des, mida ta esitas, mĂ€rkis ta, et struts-core on jĂ”udnud elutsĂŒkli lĂ”ppu ja on vaja liikuda struts2-core'i juurde.
â6
MĂ”nes olukorras on Ă”iglane tĂ”lgendada sĂ”ltuvuse kontrollimise ja sĂ”ltuvuste jĂ€lgimise ilmset viga. EelkĂ”ige CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, mida sĂ”ltuvuste kontrollimine ja jĂ€lgimine seostavad spring-core'iga:3.0.5, kuuluvad tegelikult spring-web:3.0.5 juurde. Sellegipoolest tuvastas osa neist CVE-dest ka Nexus IQ, kuid IQ mÀÀras need Ă”igesti teisele komponendile. Kuna neid haavatavusi ei leitud spring-core'is, ei saa vĂ€ita, et neid ei ole raamistikus ĂŒldse ja avatud lĂ€htekoodiga tööriistad osutasid Ă”igesti nendele haavatavustele (lihtsalt veidi mööda panid).
JĂ€reldused
Nagu me nĂ€eme, ei anna tuvastatud haavatavuste usutavuse mÀÀramine kĂ€sitsi ĂŒlevaate korralikku, sel pĂ”hjusel tekivad vaidlusalused hetked. Tulemused on sellised, et Nexus IQ-l on madalaim valepositiivsete mÀÀr ja kĂ”rgeim tĂ€psus.
Esiteks on see seotud sellega, et Sonatype'i meeskond laiendas iga NVD-s esitatud haavatavuse CVE kirjeldust, tÀpsustades, mis klassi vÔi funktsiooni haavatavus kuulub kahe vÔi teise komponendi versiooni osas, viies lÀbi tÀiendavaid uuringuid (nÀiteks tuvastades haavatavusi vanemate tarkvaraversioonide pÔhjal).
Olulist rolli mÀngivad ka need haavatavused, mis ei jÔudnud NVD-sse, kuid on siiski Sonatype'i andmebaasis SONATYPE mÀrgisega. Vastavalt aruandele 45% avatud lÀhtekoodiga haavatavustest ei registreerita NVD-s. Vastavalt WhiteSource'i andmebaasile avaldatakse vaid 29% kÔikidest avatud lÀhtekoodiga haavatavustest, mis on registreeritud vÀljaspool NVD-d, seetÔttu on nii oluline otsida haavatavusi ka teistest allikatest.
KokkuvĂ”ttes annab sĂ”ltuvuste kontroll suurtes kogustes mĂŒra, jĂ€ttes kĂ”rvale osa haavatavatest komponentidest. SĂ”ltuvuste jĂ€lgimine genereerib vĂ€hem mĂŒra ja tuvastab suure arvu komponente, mis visuaalselt ei riiva silma veebiliideses.
Siiski nĂ€itab praktika, et just avatud lĂ€htekood peaks olema esimene samm DevSecOpsi kĂŒpsuse poole. Esimene asi, mille ĂŒle tasub mĂ”elda SCA integreerimisel arendusse, on protsessid, nimelt arutelu juhtkonna ja teiste osakondadega selle ĂŒle, millised peaksid olema ideaalsed protsessid teie organisatsioonis. VĂ”ib juhtuda, et teie organisatsiooni jaoks katab Dependency Check vĂ”i Dependency Track alguses kĂ”ik Ă€ri vajadused, samas kui ettevĂ”tte lahendused on loogiline jĂ€tk, kui rakenduste keerukus kasvab.
Lisa A. Tulemused koostisosade osas
MĂ€rgistused:
- High â kĂ”rge ja kriitilise taseme haavatavused komponendis
- Medium â keskmise taseme haavatavused komponendis
- TRUE â Ă”igesti tuvastatud haavatavus (True positive issue)
- FALSE â vale hĂ€ire (False positive issue)
Komponent
Nexus IQ
Dependency Check
Dependency Track
Tulemus
dom4j: 1.6.1
High
High
High
TĂSI
log4j-core: 2.3
High
High
High
TĂSI
log4j: 1.2.14
High
High
â
TĂSI
commons-collections:3.1
High
High
High
TĂSI
commons-fileupload:1.3.2
High
High
High
TĂSI
commons-beanutils:1.7.0
High
High
High
TĂSI
commons-codec:1:10
Medium
â
â
TĂSI
mysql-connector-java:5.1.42
High
High
High
TĂSI
spring-expression:3.0.5
High
komponenti ei leitud
TĂSI
spring-web:3.0.5
High
komponenti ei leitud
High
TĂSI
spring-context:3.0.5
Medium
komponenti ei leitud
â
TĂSI
spring-core:3.0.5
Medium
High
High
TĂSI
struts2-config-browser-plugin:2.3.30
Medium
â
â
TĂSI
spring-tx:3.0.5
â
High
â
FALSE
struts-core:1.3.8
High
High
High
TĂSI
xwork-core: 2.3.30
High
â
â
TĂSI
struts2-core: 2.3.30
High
High
High
TĂSI
struts-taglib:1.3.8
â
High
â
FALSE
struts-tiles-1.3.8
â
High
â
FALSE
Lisa B. Tulemused haavatavuste osas
MĂ€rgistused:
- High â kĂ”rge ja kriitilise taseme haavatavused komponendis
- Medium â keskmise taseme haavatavused komponendis
- TRUE â Ă”igesti tuvastatud haavatavus (True positive issue)
- FALSE â vale hĂ€ire (False positive issue)
Komponent
Nexus IQ
Dependency Check
Dependency Track
TÔsidus
Tulemus
Kommentaar
dom4j: 1.6.1
CVE-2018-1000632
CVE-2018-1000632
CVE-2018-1000632
High
TĂSI
CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
High
TĂSI
log4j-core: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
High
TĂSI
CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
Madal
TĂSI
log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571
â
High
TĂSI
â
CVE-2020-9488
â
Madal
TĂSI
SONATYPE-2010-0053
â
â
High
TĂSI
commons-collections:3.1
â
CVE-2015-6420
CVE-2015-6420
High
FALSE
Duplikaat RCE(OSSINDEX)
â
CVE-2017-15708
CVE-2017-15708
High
FALSE
Duplikaat RCE(OSSINDEX)
SONATYPE-2015-0002
RCE (OSSINDEX)
RCE(OSSINDEX)
High
TĂSI
commons-fileupload:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
High
TĂSI
SONATYPE-2014-0173
â
â
Medium
TĂSI
commons-beanutils:1.7.0
CVE-2014-0114
CVE-2014-0114
CVE-2014-0114
High
TĂSI
â
CVE-2019-10086
CVE-2019-10086
High
FALSE
Haavatavus kehtib ainult versioonidele 1.9.2+
commons-codec:1:10
SONATYPE-2012-0050
â
â
Medium
TĂSI
mysql-connector-java:5.1.42
CVE-2018-3258
CVE-2018-3258
CVE-2018-3258
High
TĂSI
CVE-2019-2692
CVE-2019-2692
â
Medium
TĂSI
â
CVE-2020-2875
â
Medium
FALSE
Same vulnerability as CVE-2019-2692, but with the note 'attacks may significantly impact additional products'
â
CVE-2017-15945
â
High
FALSE
Ei kehti mysql-connector-java jaoks
â
CVE-2020-2933
â
Madal
FALSE
Duplikaat CVE-2020-2934-le
CVE-2020-2934
CVE-2020-2934
â
Medium
TĂSI
spring-expression:3.0.5
CVE-2018-1270
komponenti ei leitud
â
High
TĂSI
CVE-2018-1257
â
â
Medium
TĂSI
spring-web:3.0.5
CVE-2016-1000027
komponenti ei leitud
â
High
TĂSI
CVE-2014-0225
â
CVE-2014-0225
High
TĂSI
CVE-2011-2730
â
â
High
TĂSI
â
â
CVE-2013-4152
Medium
TĂSI
CVE-2018-1272
â
â
High
TĂSI
CVE-2020-5398
â
â
High
TĂSI
TÔend IQ kasuks: 'Sonatype'i turvauuringute meeskond avastas, et see haavatavus tutvustati versioonis 3.0.2.RELEASE, mitte 5.0.x, nagu nÔuandes öeldud.'
CVE-2013-6429
â
â
Medium
TĂSI
CVE-2014-0054
â
CVE-2014-0054
Medium
TĂSI
CVE-2013-6430
â
â
Medium
TĂSI
spring-context:3.0.5
CVE-2011-2894
komponenti ei leitud
â
Medium
TĂSI
spring-core:3.0.5
â
CVE-2011-2730
CVE-2011-2730
High
TĂSI
CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
Medium
TĂSI
â
â
CVE-2013-4152
Medium
FALSE
Sama haavatavus spring-webis
â
CVE-2013-4152
â
Medium
FALSE
Haavatavus kehtib spring-web komponendi suhtes
â
CVE-2013-6429
CVE-2013-6429
Medium
FALSE
Haavatavus kehtib spring-web komponendi suhtes
â
CVE-2013-6430
â
Medium
FALSE
Haavatavus kehtib spring-web komponendi suhtes
â
CVE-2013-7315
CVE-2013-7315
Medium
FALSE
SPLIT CVE-2013-4152-st. + Haavatavus kehtib spring-web komponendi suhtes
â
CVE-2014-0054
CVE-2014-0054
Medium
FALSE
Haavatavus kehtib spring-web komponendi suhtes
â
CVE-2014-0225
â
High
FALSE
Haavatavus kehtib spring-web komponendi suhtes
â
â
CVE-2014-0225
High
FALSE
Sama haavatavus spring-webis
â
CVE-2014-1904
CVE-2014-1904
Medium
FALSE
Haavatavus kehtib spring-web-mvc komponendi suhtes
â
CVE-2014-3625
CVE-2014-3625
Medium
FALSE
Haavatavus kehtib spring-web-mvc komponendi suhtes
â
CVE-2016-9878
CVE-2016-9878
High
FALSE
Haavatavus kehtib spring-web-mvc komponendi suhtes
â
CVE-2018-1270
CVE-2018-1270
High
FALSE
spring-expression / spring-messages jaoks
â
CVE-2018-1271
CVE-2018-1271
Medium
FALSE
Haavatavus kehtib spring-web-mvc komponendi suhtes
â
CVE-2018-1272
CVE-2018-1272
High
TĂSI
CVE-2014-3578
CVE-2014-3578 (OSSINDEX)
CVE-2014-3578
Medium
TĂSI
SONATYPE-2015-0327
â
â
Madal
TĂSI
struts2-config-browser-plugin:2.3.30
SONATYPE-2016-0104
â
â
Medium
TĂSI
spring-tx:3.0.5
â
CVE-2011-2730
â
High
FALSE
Haavatavus ei kehti spring-tx jaoks
â
CVE-2011-2894
â
High
FALSE
Haavatavus ei kehti spring-tx jaoks
â
CVE-2013-4152
â
Medium
FALSE
Haavatavus ei kehti spring-tx jaoks
â
CVE-2013-6429
â
Medium
FALSE
Haavatavus ei kehti spring-tx jaoks
â
CVE-2013-6430
â
Medium
FALSE
Haavatavus ei kehti spring-tx jaoks
â
CVE-2013-7315
â
Medium
FALSE
Haavatavus ei kehti spring-tx jaoks
â
CVE-2014-0054
â
Medium
FALSE
Haavatavus ei kehti spring-tx jaoks
â
CVE-2014-0225
â
High
FALSE
Haavatavus ei kehti spring-tx jaoks
â
CVE-2014-1904
â
Medium
FALSE
Haavatavus ei kehti spring-tx jaoks
â
CVE-2014-3625
â
Medium
FALSE
Haavatavus ei kehti spring-tx jaoks
â
CVE-2016-9878
â
High
FALSE
Haavatavus ei kehti spring-tx jaoks
â
CVE-2018-1270
â
High
FALSE
Haavatavus ei kehti spring-tx jaoks
â
CVE-2018-1271
â
Medium
FALSE
Haavatavus ei kehti spring-tx jaoks
â
CVE-2018-1272
â
Medium
FALSE
Haavatavus ei kehti spring-tx jaoks
struts-core:1.3.8
â
CVE-2011-5057 (OSSINDEX)
Medium
FASLE
Haavatavus Struts 2 suhtes
â
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
High
FALSE
Haavatavus Struts 2 suhtes
â
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
Medium
FALSE
Haavatavus Struts 2 suhtes
â
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
High
FALSE
Haavatavus Struts 2 suhtes
CVE-2016-1182
3VE-2016-1182
â
High
TĂSI
â
â
CVE-2011-5057
Medium
FALSE
Haavatavus Struts 2 suhtes
â
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
High
FALSE
Haavatavus Struts 2 suhtes
â
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
Medium
FALSE
Haavatavus Struts 2 suhtes
CVE-2015-0899
CVE-2015-0899
â
High
TĂSI
â
CVE-2012-0394
CVE-2012-0394
Medium
FALSE
Haavatavus Struts 2 suhtes
â
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
High
FALSE
Haavatavus Struts 2 suhtes
â
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
High
FALSE
Haavatavus Struts 2 suhtes
â
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
High
FASLE
Haavatavus Struts 2 suhtes
â
CVE-2013-2115
CVE-2013-2115
High
FASLE
Haavatavus Struts 2 suhtes
â
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
High
FASLE
Haavatavus Struts 2 suhtes
â
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
High
FASLE
Haavatavus Struts 2 suhtes
CVE-2014-0114
CVE-2014-0114
â
High
TĂSI
â
CVE-2015-2992
CVE-2015-2992
Medium
FALSE
Haavatavus Struts 2 suhtes
â
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
High
FALSE
Haavatavus Struts 2 suhtes
CVE-2016-1181
CVE-2016-1181
â
High
TĂSI
â
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
High
FALSE
Haavatavus Struts 2 suhtes
xwork-core:2.3.30
CVE-2017-9804
â
â
High
TĂSI
SONATYPE-2017-0173
â
â
High
TĂSI
CVE-2017-7672
â
â
High
FALSE
Duubel k CVE-2017-9804
SONATYPE-2016-0127
â
â
High
TĂSI
struts2-core:2.3.30
â
CVE-2016-6795
CVE-2016-6795
High
TĂSI
â
CVE-2017-9787
CVE-2017-9787
High
TĂSI
â
CVE-2017-9791
CVE-2017-9791
High
TĂSI
â
CVE-2017-9793
â
High
FALSE
Duubel k CVE-2018-1327
â
CVE-2017-9804
â
High
TĂSI
â
CVE-2017-9805
CVE-2017-9805
High
TĂSI
CVE-2016-4003
â
â
Medium
FALSE
Kehtib Apache Struts 2.x kuni 2.3.28, kuid see on versioon 2.3.30. Siiski, nagu kÀskluses mÀrgitud, kehtib CVE kÔikide Struts 2 versioonide puhul, kui kasutatakse JRE 1.7 ja vanemat. Tundub, et siin on otsustatud ettevaatlikult tegutseda, kuid rohkem sarnaneb see valehÀirega.
â
CVE-2018-1327
CVE-2018-1327
High
TĂSI
CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
High
TĂSI
Just see haavatavus, mille kasuks kurjategijad tegid kasutuse Equifaxis 2017. aastal
CVE-2017-12611
CVE-2017-12611
â
High
TĂSI
CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
High
TĂSI
struts-taglib:1.3.8
â
CVE-2012-0394
â
Medium
FALSE
Struts2-core jaoks
â
CVE-2013-2115
â
High
FALSE
Struts2-core jaoks
â
CVE-2014-0114
â
High
FALSE
Commons-beanutils jaoks
â
CVE-2015-0899
â
High
FALSE
Ei kehti taglib'i kohta
â
CVE-2015-2992
â
Medium
FALSE
Kehtib struts2-core'i kohta
â
CVE-2016-1181
â
High
FALSE
Ei kehti taglib'i kohta
â
CVE-2016-1182
â
High
FALSE
Ei kehti taglib'i kohta
struts-tiles-1.3.8
â
CVE-2012-0394
â
Medium
FALSE
Struts2-core jaoks
â
CVE-2013-2115
â
High
FALSE
Struts2-core jaoks
â
CVE-2014-0114
â
High
FALSE
Commons-beanutils'i all
â
CVE-2015-0899
â
High
FALSE
Ei kehti tiles'i kohta
â
CVE-2015-2992
â
Medium
FALSE
Struts2-core jaoks
â
CVE-2016-1181
â
High
FALSE
Ei kehti taglib'i kohta
â
CVE-2016-1182
â
High
FALSE
Ei kehti taglib'i kohta
Allikas: habr.com
