Kolmannen osapuolen ohjelmistokomponenttien (Software Composition Analysis - SCA) analyysin merkitys kehitysprosessissa kasvaa, kun synopsys, Sonatype, Snyk ja White Source julkaisevat avoimen lähdekoodin kirjastojen haavoittuvuuksia käsittelevät vuosiraportit. . Raportin mukaan
Yksi havainnollistavimmista tapauksista
Tässä artikkelissa käsitellään SCA:n suorittamiseen käytettävän työkalun valintaa analyysitulosten laadun kannalta. Lisäksi tarjotaan työkalujen toiminnallinen vertailu. CI/CD:hen integrointi ja integrointiominaisuudet jätetään seuraaviin julkaisuihin. OWASP esitteli laajan valikoiman työkaluja
Toimintaperiaate
Katsotaanpa miltä CPE näyttää:
cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other
- Osa: Ilmoitus siitä, että komponentti liittyy sovellukseen (a), käyttöjärjestelmään (o), laitteistoon (h) (pakollinen)
- Myyjä: Tuotteen valmistajan nimi (pakollinen)
- Tuote: Tuotteen nimi (pakollinen)
- Versio: Komponentin versio (vanhentunut kohde)
- Päivitys: Paketin päivitys
- Painos: Vanha versio (vanhentunut kohde)
- Kieli: RFC-5646:ssa määritetty kieli
- SW-versio: Ohjelmisto versio
- Kohde SW: Ohjelmistoympäristö, jossa tuote toimii
- Kohde HW: Laitteistoympäristö, jossa tuote toimii
- muu: Toimittaja tai tuotetiedot
Esimerkki CPE:stä näyttää tältä:
cpe:2.3:a:pivotal_software:spring_framework:3.0.0:*:*:*:*:*:*:*
Rivi tarkoittaa, että CPE-versio 2.3 kuvaa valmistajan sovelluskomponentin pivotal_software
nimellä spring_framework
versio 3.0.0. Jos avaamme haavoittuvuuden
URL-osoitetta käyttävät myös SCA-työkalut. Paketin URL-muoto on seuraava:
scheme:type/namespace/name@version?qualifiers#subpath
- Kaava: Siellä on aina "pkg", joka osoittaa, että tämä on paketin URL-osoite (pakollinen)
- Tyyppi: Paketin "tyyppi" tai paketin "protokolla", kuten maven, npm, nuget, gem, pypi jne. (Pakollinen kohde)
- nimiavaruus Jotkut nimen etuliite, kuten Maven-ryhmätunnus, Docker-kuvan omistaja, GitHub-käyttäjä tai organisaatio. Valinnainen ja riippuu tyypistä.
- Nimi: Paketin nimi (pakollinen)
- Versio: Pakettiversio
- Karsinnat: Paketin lisäkelpoisuustiedot, kuten käyttöjärjestelmä, arkkitehtuuri, jakelu jne. Valinnainen ja tyyppikohtainen.
- Alapolku: Lisäpolku paketissa suhteessa paketin juureen
Esimerkiksi:
pkg:golang/google.golang.org/genproto#googleapis/api/annotations
pkg:maven/org.apache.commons/[email protected]
pkg:pypi/[email protected]
Esimerkki siitä, miltä tuoteluettelo voi näyttää XML-muodossa:
<?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>
Tuoteluetteloa voidaan käyttää paitsi Dependency Trackin syöttöparametreina myös toimitusketjun ohjelmistokomponenttien inventointiin, esimerkiksi ohjelmistojen toimittamiseen asiakkaalle. Vuonna 2014 jopa Yhdysvalloissa ehdotettiin lakia
Palaten SCA:han Dependency Trackissa on valmiita integraatioita ilmoitusalustojen, kuten Slackin, ja haavoittuvuuden hallintajärjestelmien, kuten Kenna Securityn, kanssa. On myös syytä sanoa, että Dependency Track tunnistaa muun muassa pakettien vanhentuneet versiot ja antaa tietoja lisensseistä (SPDX-tuen ansiosta).
Jos puhumme nimenomaan SCA:n laadusta, siinä on perustavanlaatuinen ero.
Dependency Track ei hyväksy projektia syötteeksi, vaan pikemminkin materiaaliluetteloa. Tämä tarkoittaa, että jos haluamme testata projektia, meidän on ensin luotava bom.xml, esimerkiksi CycloneDX:n avulla. Siten Dependency Track on suoraan riippuvainen CycloneDX:stä. Samalla se mahdollistaa mukauttamisen. Näin OZON-tiimi kirjoitti
Tehdään yhteenveto joistakin toiminnallisista ominaisuuksista ja tarkastellaan myös tuettuja kieliä analysoitavaksi:
Kieli
Nexus IQ
Riippuvuuden tarkistus
Riippuvuusrata
Jaava
+
+
+
C / C ++
+
+
-
C#
+
+
-
. Net
+
+
+
Erlang
-
-
+
JavaScript (NodeJS)
+
+
+
PHP
+
+
+
Python
+
+
+
Rubiini
+
+
+
Perl
-
-
-
Scala
+
+
+
Tavoite C
+
+
-
Nopea
+
+
-
R
+
-
-
Go
+
+
+
toiminnallisuus
toiminnallisuus
Nexus IQ
Riippuvuuden tarkistus
Riippuvuusrata
Kyky varmistaa, että lähdekoodissa käytettyjen komponenttien lisensoitu puhtaus tarkistetaan
+
-
+
Kyky skannata ja analysoida haavoittuvuuksia ja lisensoida Docker-kuvien puhtaus
+ Integrointi Clairin kanssa
-
-
Mahdollisuus määrittää suojauskäytännöt avoimen lähdekoodin kirjastojen käyttöä varten
+
-
-
Mahdollisuus tarkistaa avoimen lähdekoodin tietovarastot haavoittuvien komponenttien varalta
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS
-
+ Hex, RubyGems, Maven, NPM, Nuget, Pypi
Erikoistuneen tutkimusryhmän saatavuus
+
-
-
Suljetun silmukan toiminta
+
+
+
Kolmannen osapuolen tietokantojen käyttö
+ Suljettu Sonatype-tietokanta
+ Sonatype OSS, NPM Public Advisors
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, tuki omalle haavoittuvuustietokantalleen
Mahdollisuus suodattaa avoimen lähdekoodin komponentteja yritettäessä ladata kehityssilmukkaan määritettyjen käytäntöjen mukaisesti
+
-
-
Suosituksia haavoittuvuuksien korjaamiseen, linkkien saatavuus korjauksiin
+
+- (riippuu julkisissa tietokannoissa olevasta kuvauksesta)
+- (riippuu julkisissa tietokannoissa olevasta kuvauksesta)
Havaittujen haavoittuvuuksien järjestys vakavuuden mukaan
+
+
+
Rooliin perustuva pääsymalli
+
-
+
CLI-tuki
+
+
+- (vain CycloneDX)
Haavoittuvuuksien näytteenotto/lajittelu määriteltyjen kriteerien mukaan
+
-
+
Kojelauta sovelluksen tilan mukaan
+
-
+
Raporttien luominen PDF-muodossa
+
-
-
Raporttien luominen JSONCSV-muodossa
+
+
-
Venäjän kielen tuki
-
-
-
Integrointiominaisuudet
integraatio
Nexus IQ
Riippuvuuden tarkistus
Riippuvuusrata
LDAP/Active Directory -integrointi
+
-
+
Integrointi jatkuvaan integrointijärjestelmään Bamboo
+
-
-
Integrointi jatkuvaan integrointijärjestelmään TeamCity
+
-
-
Integrointi jatkuvaan integrointijärjestelmään GitLab
+
+- (laajennuksena GitLabille)
+
Integrointi jatkuvaan integrointijärjestelmään Jenkins
+
+
+
IDE-laajennusten saatavuus
+ IntelliJ, Eclipse, Visual Studio
-
-
Tuki työkalun mukautettuun integrointiin verkkopalveluiden (API) kautta
+
-
+
Riippuvuuden tarkistus
Ensimmäinen alku
Suoritetaan riippuvuustarkistus tarkoituksellisesti haavoittuvassa sovelluksessa
Tätä varten käytämme
mvn org.owasp:dependency-check-maven:check
Tämän seurauksena dependency-check-report.html näkyy kohdehakemistossa.
Avataan tiedosto. Yhteenvetotietojen jälkeen haavoittuvuuksien kokonaismäärästä voimme nähdä tietoja haavoittuvuuksista, joiden vakavuus ja luotettavuus on korkea, ja jotka osoittavat paketin, CPE:n ja CVE:iden määrän.
Seuraavaksi tulee tarkempia tietoja, erityisesti päätöksentekoperusteita (todisteita), eli tietty tuoteluettelo.
Seuraavaksi tulee CPE-, PURL- ja CVE-kuvaus. Muuten, korjaussuosituksia ei sisällytetä, koska niitä ei ole NVD-tietokannassa.
Tarkastellaksesi tarkistuksen tuloksia järjestelmällisesti, voit määrittää Nginxin minimaalisilla asetuksilla tai lähettää syntyneet viat vianhallintajärjestelmään, joka tukee liittimiä riippuvuustarkistukseen. Esimerkiksi Defect Dojo.
Riippuvuusrata
Asennus
Dependency Track puolestaan on web-pohjainen alusta, jossa on näyttökaavioita, joten kiireellinen ongelma virheiden tallentamisesta kolmannen osapuolen ratkaisuun ei esiinny tässä.
Asennuksen tuetut komentosarjat ovat: Docker, WAR, Executable WAR.
Ensimmäinen alku
Siirrymme käynnissä olevan palvelun URL-osoitteeseen. Kirjaudumme sisään järjestelmänvalvojan/adminin kautta, vaihdamme käyttäjätunnuksen ja salasanan ja pääsemme sitten kojelautaan. Seuraavaksi teemme projektin Java-testisovellukselle Etusivu/Projektit → Luo projekti . Otetaan DVJA esimerkkinä.
Koska Dependency Track voi hyväksyä vain materiaaliluettelon syötteenä, tämä materiaaliluettelo on haettava. Hyödynnetään
mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom
Saamme bom.xml:n ja lataamme tiedoston luotuun projektiin DVJA → Riippuvuudet → Lataa materiaalitiedosto.
Siirrytään kohtaan Hallinta → Analysaattorit. Ymmärrämme, että meillä on käytössä vain Internal Analyzer, joka sisältää NVD:n. Yhdistetään myös Sonatype OSS Index.
Näin saamme seuraavan kuvan projektillemme:
Listasta löydät myös yhden Sonatype OSS:ään sovellettavan haavoittuvuuden:
Suurin pettymys oli, että Dependency Track ei enää hyväksy Dependency Check xml -raportteja. Viimeisimmät tuetut versiot Dependency Check -integraatiosta olivat 1.0.0 - 4.0.2, kun minä testasin versiota 5.3.2.
Täällä
Nexus IQ
Ensimmäinen alku
Nexus IQ:n asennus tulee arkistosta
Kun olet kirjautunut konsoliin, sinun on luotava organisaatio ja sovellus.
Kuten näette, asetukset IQ:n tapauksessa ovat hieman monimutkaisempia, koska meidän on myös luotava käytäntöjä, jotka soveltuvat eri "vaiheisiin" (kehittäjä, rakennus, vaihe, julkaisu). Tämä on tarpeen haavoittuvien komponenttien estämiseksi niiden siirtyessä tuotantoprosessin läpi tai estää ne heti, kun ne pääsevät Nexus Repoon kehittäjien lataamana.
Jos haluat tuntea eron avoimen lähdekoodin ja yrityksen välillä, suorita sama skannaus Nexus IQ:n kautta samalla tavalla 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>
Seuraa luodun raportin URL-osoitetta IQ-verkkoliittymässä:
Täältä näet kaikki käytäntörikkomukset, jotka osoittavat eri merkitystasoja (Tiedoista tietoturvakriittisiin). Komponentin vieressä oleva kirjain D tarkoittaa, että komponentti on suora riippuvuus, ja T-kirjain komponentin vieressä tarkoittaa, että komponentti on Transitive Dependency, eli se on transitiivinen.
Muuten, raportti
Jos avaamme jonkin Nexus IQ -käytäntörikkomuksista, näemme komponentin kuvauksen sekä versiokaavion, joka näyttää nykyisen version sijainnin aikakaaviossa sekä missä vaiheessa haavoittuvuus lakkaa. olla haavoittuvainen. Kynttilöiden korkeus kaaviossa osoittaa tämän komponentin käytön suosion.
Jos siirryt haavoittuvuudet-osioon ja laajennat CVE:tä, voit lukea kuvauksen tästä haavoittuvuudesta, poistamissuositukset sekä syyn, miksi tätä komponenttia rikottiin, eli luokan olemassaolon. DiskFileitem.class
.
Tehdään yhteenveto vain kolmannen osapuolen Java-komponenteista ja poistetaan js-komponentit. Suluissa ilmoitamme NVD:n ulkopuolelta löydettyjen haavoittuvuuksien lukumäärän.
Yhteensä Nexus IQ:
- Skannatut riippuvuudet: 62
- Haavoittuvat riippuvuudet: 16
- Haavoittuvuuksia löydetty: 42 (8 sonatype db)
Kokonaisriippuvuustarkistus:
- Skannatut riippuvuudet: 47
- Haavoittuvat riippuvuudet: 13
- Haavoittuvuuksia löydetty: 91 (14 sonatype oss)
Kokonaisriippuvuusrata:
- Skannatut riippuvuudet: 59
- Haavoittuvat riippuvuudet: 10
- Haavoittuvuuksia löydetty: 51 (1 sonatype oss)
Seuraavissa vaiheissa analysoimme saatuja tuloksia ja selvitämme, mikä näistä haavoittuvuuksista on todellinen vika ja mikä väärä positiivinen.
Vastuuvapauslauseke
Tämä arvostelu ei ole kiistaton totuus. Tekijällä ei ollut tavoitetta korostaa erillistä instrumenttia muiden taustaa vasten. Katsauksen tarkoituksena oli esitellä SCA-työkalujen toimintamekanismeja ja tapoja tarkistaa niiden tulokset.
Tulosten vertailu
Ehdoin:
Väärä positiivinen tulos kolmannen osapuolen komponenttien haavoittuvuuksista on:
- CVE-virhe tunnistetun komponentin kanssa
- Jos esimerkiksi struts2-kehyksessä tunnistetaan haavoittuvuus ja työkalu viittaa struts-tiles -kehyksen osaan, jota tämä haavoittuvuus ei koske, tämä on väärä positiivinen.
- CVE ei vastaa komponentin tunnistettua versiota
- Esimerkiksi haavoittuvuus on sidottu python-versioon > 3.5 ja työkalu merkitsee version 2.7 haavoittuvaksi - tämä on väärä positiivinen, koska itse asiassa haavoittuvuus koskee vain 3.x-tuotehaaraa.
- Kopio CVE
- Jos SCA esimerkiksi määrittää CVE:n, joka mahdollistaa RCE:n, SCA määrittää CVE:n samalle komponentille, joka koskee Ciscon tuotteita, joihin tämä RCE vaikuttaa. Tässä tapauksessa se on väärä positiivinen.
- Esimerkiksi jousiverkkokomponentista löydettiin CVE, jonka jälkeen SCA osoittaa samaan CVE:hen muissa Spring Frameworkin komponenteissa, kun taas CVE:llä ei ole mitään tekemistä muiden komponenttien kanssa. Tässä tapauksessa se on väärä positiivinen.
Tutkimuksen kohteena oli Open Source -projekti DVJA. Tutkimus sisälsi vain java-komponentteja (ilman js:ää).
Yhteenveto tulokset
Siirrytään suoraan tunnistettujen haavoittuvuuksien manuaalisen tarkistuksen tuloksiin. Jokaisen CVE:n täydellinen raportti löytyy liitteestä.
Yhteenvetotulokset kaikista haavoittuvuuksista:
Parametri
Nexus IQ
Riippuvuuden tarkistus
Riippuvuusrata
Kaikki haavoittuvuudet tunnistettu
42
91
51
Väärin tunnistetut haavoittuvuudet (väärä positiivinen)
2 (4.76%)
62 (68,13%)
29 (56.86%)
Asiaankuuluvia haavoittuvuuksia ei löytynyt (väärä negatiivinen)
10
20
27
Yhteenveto tuloksista komponenteittain:
Parametri
Nexus IQ
Riippuvuuden tarkistus
Riippuvuusrata
Tunnistetut komponentit yhteensä
62
47
59
Kaikki haavoittuvat komponentit
16
13
10
Väärin tunnistetut haavoittuvat komponentit (väärä positiivinen)
1
5
0
Väärin tunnistetut haavoittuvat komponentit (väärä positiivinen)
0
6
6
Rakennetaan visuaalisia kaavioita arvioimaan väärien positiivisten ja väärien negatiivisten suhdetta haavoittuvuuksien kokonaismäärään. Komponentit on merkitty vaakasuunnassa ja niissä tunnistetut haavoittuvuudet pystysuoraan.
Vertailun vuoksi Sonatype-tiimi suoritti samanlaisen tutkimuksen, joka testasi 1531 komponentin projektia OWASP-riippuvuustarkistuksen avulla. Kuten näemme, kohinan suhde oikeisiin reaktioihin on verrattavissa tuloksiimme.
Lähde:
Katsotaanpa joitain CVE:itä skannaustuloksistamme ymmärtääksemme syyn näihin tuloksiin.
lisää
№ 1
Katsotaanpa ensin joitain mielenkiintoisia kohtia Sonatype Nexus IQ:sta.
Nexus IQ huomauttaa deserialisointiin liittyvästä ongelmasta, joka liittyy kykyyn suorittaa RCE Spring Frameworkissa useita kertoja. CVE-2016-1000027 spring-webissä: 3.0.5 ensimmäistä kertaa ja CVE-2011-2894 kevään kontekstissa: 3.0.5 ja spring-core: 3.0.5. Aluksi näyttää siltä, että useiden CVE:iden haavoittuvuudet ovat päällekkäisiä. Koska jos katsot CVE-2016-1000027 ja CVE-2011-2894 NVD-tietokannassa, näyttää siltä, että kaikki on ilmeistä
komponentti
Haavoittuvuus
kevätverkko: 3.0.5
CVE-2016-1000027
kevät-konteksti: 3.0.5
CVE-2011-2894
jousisydän: 3.0.5
CVE-2011-2894
Kuvaus
Kuvaus
CVE-2011-2894 itsessään on melko kuuluisa. Raportissa RemoteInvocationSerializingExporter
CVE-2011-2894:ssä haavoittuvuus havaitaan HttpInvokerServiceExporter
. Tämän Nexus IQ kertoo meille:
NVD:ssä ei kuitenkaan ole mitään tällaista, minkä vuoksi riippuvuustarkistus ja riippuvuusrata saavat kumpikin väärän negatiivisen.
Myös CVE-2011-2894 kuvauksesta voidaan ymmärtää, että haavoittuvuus on todellakin olemassa sekä spring-context:3.0.5 että spring-core:3.0.5. Vahvistus tästä löytyy tämän haavoittuvuuden löytäneen henkilön artikkelista.
№ 2
komponentti
Haavoittuvuus
Tulos
tuet 2-ydin: 2.3.30
CVE-2016-4003
VÄÄRÄ
Jos tutkimme haavoittuvuutta CVE-2016-4003, ymmärrämme, että se korjattiin versiossa 2.3.28, mutta Nexus IQ ilmoittaa siitä meille. Haavoittuvuuden kuvauksessa on huomautus:
Toisin sanoen haavoittuvuus on olemassa vain yhdessä JRE:n vanhentuneen version kanssa, josta he päättivät varoittaa meitä. Siitä huolimatta pidämme tätä vääränä positiivisena, vaikkakaan ei pahimpana.
# 3
komponentti
Haavoittuvuus
Tulos
xwork-core: 2.3.30
CVE-2017-9804
TOSI
xwork-core: 2.3.30
CVE-2017-7672
VÄÄRÄ
Jos katsomme CVE-2017-9804 ja CVE-2017-7672 kuvauksia, ymmärrämme, että ongelma on URLValidator class
, jossa CVE-2017-9804 on peräisin CVE-2017-7672:sta. Toisen haavoittuvuuden olemassaolo ei kanna muuta hyödyllistä kuormaa kuin se, että sen vakavuus on noussut High-tasoon, joten voimme pitää sitä tarpeettomana meluna.
Kaiken kaikkiaan Nexus IQ:lle ei löytynyt muita vääriä positiivisia tuloksia.
№ 4
On useita asioita, jotka erottavat älykkyysosamäärän muista ratkaisuista.
komponentti
Haavoittuvuus
Tulos
kevätverkko: 3.0.5
CVE-2020-5398
TOSI
NVD:n CVE:ssä todetaan, että se koskee vain versioita 5.2.x ennen 5.2.3, 5.1.x ennen 5.1.13 ja versioita 5.0.x ennen 5.0.16, jos katsomme kuitenkin Nexus IQ:n CVE-kuvausta , niin näemme seuraavaa:
Ilmoitus poikkeamisesta: Sonatypen tietoturvatutkimusryhmä havaitsi, että tämä haavoittuvuus otettiin käyttöön versiossa 3.0.2.RELEASE eikä versiossa 5.0.x, kuten neuvolassa todetaan.
Tätä seuraa tämän haavoittuvuuden PoC, joka ilmoittaa, että se on olemassa versiossa 3.0.5.
Väärä negatiivinen tulos lähetetään riippuvuustarkistukseen ja riippuvuusjäljitykseen.
№ 5
Katsotaanpa vääriä positiivisia tuloksia Dependency Check- ja Dependency Trackille.
Dependency Check erottuu siitä, että se heijastaa ne CVE:t, jotka koskevat koko NVD-kehystä, niihin komponentteihin, joihin nämä CVE:t eivät koske. Tämä koskee CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182 riippuvaisia tarkistuksia. ” kohtaan struts-taglib:1.3.8 ja struts-tiles-1.3.8. Näillä komponenteilla ei ole mitään tekemistä sen kanssa, mitä on kuvattu CVE:ssä - pyyntöjen käsittely, sivun validointi ja niin edelleen. Tämä johtuu siitä, että näillä CVE:illä ja komponenteilla on yhteistä vain kehys, minkä vuoksi Dependency Check piti sitä haavoittuvuudeksi.
Sama tilanne on jousi-tx:3.0.5:n kanssa ja vastaava tilanne stuts-core:1.3.8 kanssa. struts-corelle Dependency Check ja Dependency Track ovat löytäneet paljon haavoittuvuuksia, jotka itse asiassa koskevat struts2-corea, joka on pohjimmiltaan erillinen kehys. Tässä tapauksessa Nexus IQ ymmärsi kuvan oikein ja antamissaan CVE:issä se osoitti, että struts-core oli saavuttanut käyttöiän lopun ja oli tarpeen siirtyä struts2-core-tilaan.
№ 6
Joissakin tilanteissa on epäreilua tulkita ilmeistä riippuvuustarkistus- ja riippuvuusseurantavirhettä. Erityisesti CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, riippuvuustarkistus ja riippuvuustarkistus jousen ytimeen:3.0.5 johtuen kuuluu itse asiassa jousiverkkoon:3.0.5. Samaan aikaan Nexus IQ löysi myös osan näistä CVE:istä, mutta IQ tunnisti ne oikein toiselle komponentille. Koska näitä haavoittuvuuksia ei löytynyt spring-coresta, ei voida väittää, etteivätkö ne periaatteessa olisi kehyksen sisällä ja avoimen lähdekoodin työkalut osoittivat oikeutetusti nämä haavoittuvuudet (niiltä jäi vain vähän ohi).
Tulokset
Kuten näemme, tunnistettujen haavoittuvuuksien luotettavuuden määrittäminen manuaalisella tarkistuksella ei anna yksiselitteisiä tuloksia, minkä vuoksi kiistanalaisia kysymyksiä syntyy. Tuloksena on, että Nexus IQ -ratkaisulla on alhaisin väärien positiivisten tulosten määrä ja suurin tarkkuus.
Ensinnäkin tämä johtuu siitä, että Sonatype-tiimi laajensi tietokantojensa NVD:n jokaisen CVE-haavoittuvuuden kuvausta, joka osoitti komponenttien tietyn version haavoittuvuudet luokkaan tai toimintoon saakka, ja suoritti lisätutkimuksia (esim. , tarkistamalla vanhempien ohjelmistoversioiden haavoittuvuudet).
Tärkeää vaikutusta tuloksiin ovat myös ne haavoittuvuudet, jotka eivät sisältyneet NVD:hen, mutta ovat kuitenkin Sonatype-tietokannassa SONATYPE-merkillä. Raportin mukaan
Tämän seurauksena riippuvuustarkistus tuottaa paljon kohinaa, josta puuttuu joitain haavoittuvia komponentteja. Dependency Track tuottaa vähemmän kohinaa ja havaitsee suuren määrän komponentteja, mikä ei vahingoita visuaalisesti verkkokäyttöliittymän silmiä.
Käytäntö osoittaa kuitenkin, että avoimen lähdekoodin pitäisi olla ensimmäiset askeleet kohti kypsiä DevSecOpsia. Ensimmäinen asia, jota sinun tulee ajatella integroitaessa SCA:ta kehittämiseen, ovat prosessit, eli yhdessä johdon ja siihen liittyvien osastojen kanssa pohdittava, miltä ihanteellisten prosessien tulisi näyttää organisaatiossasi. Voi käydä niin, että organisaatiollesi Dependency Check tai Dependency Track kattaa aluksi kaikki liiketoiminnan tarpeet ja Enterprise-ratkaisut ovat looginen jatko kehitettävien sovellusten monimutkaisuuden vuoksi.
Liite A: Komponenttien tulokset
Symbolit:
- Korkea – korkea ja kriittisen tason haavoittuvuudet komponentissa
- Medium — Keskitason kriittisyystason haavoittuvuudet komponentissa
- TOSI – Todella positiivinen ongelma
- EPÄTOSI – Väärä positiivinen ongelma
komponentti
Nexus IQ
Riippuvuuden tarkistus
Riippuvuusrata
Tulos
dom4j: 1.6.1
Korkea
Korkea
Korkea
TOSI
log4j-ydin: 2.3
Korkea
Korkea
Korkea
TOSI
log4j: 1.2.14
Korkea
Korkea
-
TOSI
yhteiset kokoelmat: 3.1
Korkea
Korkea
Korkea
TOSI
commons-fileupload:1.3.2
Korkea
Korkea
Korkea
TOSI
commons-beanutils:1.7.0
Korkea
Korkea
Korkea
TOSI
commons-koodekki: 1:10
Keskikokoinen
-
-
TOSI
mysql-liitin-java: 5.1.42
Korkea
Korkea
Korkea
TOSI
jousi-ilmaisu: 3.0.5
Korkea
komponenttia ei löydy
TOSI
kevätverkko: 3.0.5
Korkea
komponenttia ei löydy
Korkea
TOSI
kevät-konteksti: 3.0.5
Keskikokoinen
komponenttia ei löydy
-
TOSI
jousisydän: 3.0.5
Keskikokoinen
Korkea
Korkea
TOSI
struts2-config-browser-plugin: 2.3.30
Keskikokoinen
-
-
TOSI
jousi-tx: 3.0.5
-
Korkea
-
VÄÄRÄ
tuet-ydin: 1.3.8
Korkea
Korkea
Korkea
TOSI
xwork-core: 2.3.30
Korkea
-
-
TOSI
struts2-core: 2.3.30
Korkea
Korkea
Korkea
TOSI
struts-taglib:1.3.8
-
Korkea
-
VÄÄRÄ
tuet-laatat-1.3.8
-
Korkea
-
VÄÄRÄ
Liite B: Haavoittuvuuden tulokset
Symbolit:
- Korkea – korkea ja kriittisen tason haavoittuvuudet komponentissa
- Medium — Keskitason kriittisyystason haavoittuvuudet komponentissa
- TOSI – Todella positiivinen ongelma
- EPÄTOSI – Väärä positiivinen ongelma
komponentti
Nexus IQ
Riippuvuuden tarkistus
Riippuvuusrata
Vakavuus
Tulos
Kommentti
dom4j: 1.6.1
CVE-2018-1000632
CVE-2018-1000632
CVE-2018-1000632
Korkea
TOSI
CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
Korkea
TOSI
log4j-ydin: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
Korkea
TOSI
CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
Matala
TOSI
log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571
-
Korkea
TOSI
-
CVE-2020-9488
-
Matala
TOSI
SONATYYPPI-2010-0053
-
-
Korkea
TOSI
yhteiset kokoelmat: 3.1
-
CVE-2015-6420
CVE-2015-6420
Korkea
VÄÄRÄ
RCE-kopiot (OSSINDEX)
-
CVE-2017-15708
CVE-2017-15708
Korkea
VÄÄRÄ
RCE-kopiot (OSSINDEX)
SONATYYPPI-2015-0002
RCE (OSSINDEX)
RCE (OSSINDEX)
Korkea
TOSI
commons-fileupload:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
Korkea
TOSI
SONATYYPPI-2014-0173
-
-
Keskikokoinen
TOSI
commons-beanutils:1.7.0
CVE-2014-0114
CVE-2014-0114
CVE-2014-0114
Korkea
TOSI
-
CVE-2019-10086
CVE-2019-10086
Korkea
VÄÄRÄ
Haavoittuvuus koskee vain versioita 1.9.2+
commons-koodekki: 1:10
SONATYYPPI-2012-0050
-
-
Keskikokoinen
TOSI
mysql-liitin-java: 5.1.42
CVE-2018-3258
CVE-2018-3258
CVE-2018-3258
Korkea
TOSI
CVE-2019-2692
CVE-2019-2692
-
Keskikokoinen
TOSI
-
CVE-2020-2875
-
Keskikokoinen
VÄÄRÄ
Sama haavoittuvuus kuin CVE-2019-2692, mutta huomautus "hyökkäykset voivat vaikuttaa merkittävästi muihin tuotteisiin"
-
CVE-2017-15945
-
Korkea
VÄÄRÄ
Ei liity mysql-connector-javaan
-
CVE-2020-2933
-
Matala
VÄÄRÄ
Kopio tiedostosta CVE-2020-2934
CVE-2020-2934
CVE-2020-2934
-
Keskikokoinen
TOSI
jousi-ilmaisu: 3.0.5
CVE-2018-1270
komponenttia ei löydy
-
Korkea
TOSI
CVE-2018-1257
-
-
Keskikokoinen
TOSI
kevätverkko: 3.0.5
CVE-2016-1000027
komponenttia ei löydy
-
Korkea
TOSI
CVE-2014-0225
-
CVE-2014-0225
Korkea
TOSI
CVE-2011-2730
-
-
Korkea
TOSI
-
-
CVE-2013-4152
Keskikokoinen
TOSI
CVE-2018-1272
-
-
Korkea
TOSI
CVE-2020-5398
-
-
Korkea
TOSI
Havainnollistava esimerkki IQ:n puolesta: "Sonatype-tietoturvatutkimusryhmä havaitsi, että tämä haavoittuvuus otettiin käyttöön versiossa 3.0.2.RELEASE eikä versiossa 5.0.x, kuten neuvolassa todetaan."
CVE-2013-6429
-
-
Keskikokoinen
TOSI
CVE-2014-0054
-
CVE-2014-0054
Keskikokoinen
TOSI
CVE-2013-6430
-
-
Keskikokoinen
TOSI
kevät-konteksti: 3.0.5
CVE-2011-2894
komponenttia ei löydy
-
Keskikokoinen
TOSI
jousisydän: 3.0.5
-
CVE-2011-2730
CVE-2011-2730
Korkea
TOSI
CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
Keskikokoinen
TOSI
-
-
CVE-2013-4152
Keskikokoinen
VÄÄRÄ
Saman haavoittuvuuden kopio kevätverkossa
-
CVE-2013-4152
-
Keskikokoinen
VÄÄRÄ
Haavoittuvuus liittyy jousiverkkokomponenttiin
-
CVE-2013-6429
CVE-2013-6429
Keskikokoinen
VÄÄRÄ
Haavoittuvuus liittyy jousiverkkokomponenttiin
-
CVE-2013-6430
-
Keskikokoinen
VÄÄRÄ
Haavoittuvuus liittyy jousiverkkokomponenttiin
-
CVE-2013-7315
CVE-2013-7315
Keskikokoinen
VÄÄRÄ
SPLIT CVE-2013-4152:sta. + Haavoittuvuus liittyy jousiverkkokomponenttiin
-
CVE-2014-0054
CVE-2014-0054
Keskikokoinen
VÄÄRÄ
Haavoittuvuus liittyy jousiverkkokomponenttiin
-
CVE-2014-0225
-
Korkea
VÄÄRÄ
Haavoittuvuus liittyy jousiverkkokomponenttiin
-
-
CVE-2014-0225
Korkea
VÄÄRÄ
Saman haavoittuvuuden kopio kevätverkossa
-
CVE-2014-1904
CVE-2014-1904
Keskikokoinen
VÄÄRÄ
Haavoittuvuus liittyy spring-web-mvc-komponenttiin
-
CVE-2014-3625
CVE-2014-3625
Keskikokoinen
VÄÄRÄ
Haavoittuvuus liittyy spring-web-mvc-komponenttiin
-
CVE-2016-9878
CVE-2016-9878
Korkea
VÄÄRÄ
Haavoittuvuus liittyy spring-web-mvc-komponenttiin
-
CVE-2018-1270
CVE-2018-1270
Korkea
VÄÄRÄ
Kevät-ilmaisu/kevät-viestit
-
CVE-2018-1271
CVE-2018-1271
Keskikokoinen
VÄÄRÄ
Haavoittuvuus liittyy spring-web-mvc-komponenttiin
-
CVE-2018-1272
CVE-2018-1272
Korkea
TOSI
CVE-2014-3578
CVE-2014-3578 (OSSINDEX)
CVE-2014-3578
Keskikokoinen
TOSI
SONATYYPPI-2015-0327
-
-
Matala
TOSI
struts2-config-browser-plugin: 2.3.30
SONATYYPPI-2016-0104
-
-
Keskikokoinen
TOSI
jousi-tx: 3.0.5
-
CVE-2011-2730
-
Korkea
VÄÄRÄ
Haavoittuvuus ei liity Spring-tx:ään
-
CVE-2011-2894
-
Korkea
VÄÄRÄ
Haavoittuvuus ei liity Spring-tx:ään
-
CVE-2013-4152
-
Keskikokoinen
VÄÄRÄ
Haavoittuvuus ei liity Spring-tx:ään
-
CVE-2013-6429
-
Keskikokoinen
VÄÄRÄ
Haavoittuvuus ei liity Spring-tx:ään
-
CVE-2013-6430
-
Keskikokoinen
VÄÄRÄ
Haavoittuvuus ei liity Spring-tx:ään
-
CVE-2013-7315
-
Keskikokoinen
VÄÄRÄ
Haavoittuvuus ei liity Spring-tx:ään
-
CVE-2014-0054
-
Keskikokoinen
VÄÄRÄ
Haavoittuvuus ei liity Spring-tx:ään
-
CVE-2014-0225
-
Korkea
VÄÄRÄ
Haavoittuvuus ei liity Spring-tx:ään
-
CVE-2014-1904
-
Keskikokoinen
VÄÄRÄ
Haavoittuvuus ei liity Spring-tx:ään
-
CVE-2014-3625
-
Keskikokoinen
VÄÄRÄ
Haavoittuvuus ei liity Spring-tx:ään
-
CVE-2016-9878
-
Korkea
VÄÄRÄ
Haavoittuvuus ei liity Spring-tx:ään
-
CVE-2018-1270
-
Korkea
VÄÄRÄ
Haavoittuvuus ei liity Spring-tx:ään
-
CVE-2018-1271
-
Keskikokoinen
VÄÄRÄ
Haavoittuvuus ei liity Spring-tx:ään
-
CVE-2018-1272
-
Keskikokoinen
VÄÄRÄ
Haavoittuvuus ei liity Spring-tx:ään
tuet-ydin: 1.3.8
-
CVE-2011-5057 (OSSINDEX)
Keskikokoinen
FASLE
Struts 2 -haavoittuvuus
-
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
Korkea
VÄÄRÄ
Struts 2 -haavoittuvuus
-
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
Keskikokoinen
VÄÄRÄ
Struts 2 -haavoittuvuus
-
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
Korkea
VÄÄRÄ
Struts 2 -haavoittuvuus
CVE-2016-1182
3VE-2016-1182
-
Korkea
TOSI
-
-
CVE-2011-5057
Keskikokoinen
VÄÄRÄ
Struts 2 -haavoittuvuus
-
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
Korkea
VÄÄRÄ
Struts 2 -haavoittuvuus
-
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
Keskikokoinen
VÄÄRÄ
Struts 2 -haavoittuvuus
CVE-2015-0899
CVE-2015-0899
-
Korkea
TOSI
-
CVE-2012-0394
CVE-2012-0394
Keskikokoinen
VÄÄRÄ
Struts 2 -haavoittuvuus
-
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
Korkea
VÄÄRÄ
Struts 2 -haavoittuvuus
-
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
Korkea
VÄÄRÄ
Struts 2 -haavoittuvuus
-
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
Korkea
FASLE
Struts 2 -haavoittuvuus
-
CVE-2013-2115
CVE-2013-2115
Korkea
FASLE
Struts 2 -haavoittuvuus
-
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
Korkea
FASLE
Struts 2 -haavoittuvuus
-
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
Korkea
FASLE
Struts 2 -haavoittuvuus
CVE-2014-0114
CVE-2014-0114
-
Korkea
TOSI
-
CVE-2015-2992
CVE-2015-2992
Keskikokoinen
VÄÄRÄ
Struts 2 -haavoittuvuus
-
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
Korkea
VÄÄRÄ
Struts 2 -haavoittuvuus
CVE-2016-1181
CVE-2016-1181
-
Korkea
TOSI
-
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
Korkea
VÄÄRÄ
Struts 2 -haavoittuvuus
xwork-core: 2.3.30
CVE-2017-9804
-
-
Korkea
TOSI
SONATYYPPI-2017-0173
-
-
Korkea
TOSI
CVE-2017-7672
-
-
Korkea
VÄÄRÄ
CVE-2017-9804:n kopio
SONATYYPPI-2016-0127
-
-
Korkea
TOSI
tuet 2-ydin: 2.3.30
-
CVE-2016-6795
CVE-2016-6795
Korkea
TOSI
-
CVE-2017-9787
CVE-2017-9787
Korkea
TOSI
-
CVE-2017-9791
CVE-2017-9791
Korkea
TOSI
-
CVE-2017-9793
-
Korkea
VÄÄRÄ
Kopio tiedostosta CVE-2018-1327
-
CVE-2017-9804
-
Korkea
TOSI
-
CVE-2017-9805
CVE-2017-9805
Korkea
TOSI
CVE-2016-4003
-
-
Keskikokoinen
VÄÄRÄ
Koskee Apache Struts 2.x -versiota 2.3.28 asti, joka on versio 2.3.30. Kuvauksen perusteella CVE on kuitenkin voimassa kaikissa Struts 2 -versioissa, jos käytössä on JRE 1.7 tai vanhempi. Ilmeisesti he päättivät jälleenvakuttaa meidät täällä, mutta se näyttää enemmän EPÄTOSI
-
CVE-2018-1327
CVE-2018-1327
Korkea
TOSI
CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
Korkea
TOSI
Sama haavoittuvuus, jota Equifaxin hakkerit käyttivät hyväkseen vuonna 2017
CVE-2017-12611
CVE-2017-12611
-
Korkea
TOSI
CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
Korkea
TOSI
struts-taglib:1.3.8
-
CVE-2012-0394
-
Keskikokoinen
VÄÄRÄ
Jousille 2-ytiminen
-
CVE-2013-2115
-
Korkea
VÄÄRÄ
Jousille 2-ytiminen
-
CVE-2014-0114
-
Korkea
VÄÄRÄ
Commons-beanutilleille
-
CVE-2015-0899
-
Korkea
VÄÄRÄ
Ei koske taglibiä
-
CVE-2015-2992
-
Keskikokoinen
VÄÄRÄ
Viittaa struts2-core
-
CVE-2016-1181
-
Korkea
VÄÄRÄ
Ei koske taglibiä
-
CVE-2016-1182
-
Korkea
VÄÄRÄ
Ei koske taglibiä
tuet-laatat-1.3.8
-
CVE-2012-0394
-
Keskikokoinen
VÄÄRÄ
Jousille 2-ytiminen
-
CVE-2013-2115
-
Korkea
VÄÄRÄ
Jousille 2-ytiminen
-
CVE-2014-0114
-
Korkea
VÄÄRÄ
Commons-beanutils alla
-
CVE-2015-0899
-
Korkea
VÄÄRÄ
Ei koske laattoja
-
CVE-2015-2992
-
Keskikokoinen
VÄÄRÄ
Jousille 2-ytiminen
-
CVE-2016-1181
-
Korkea
VÄÄRÄ
Ei koske taglibiä
-
CVE-2016-1182
-
Korkea
VÄÄRÄ
Ei koske taglibiä
Lähde: will.com