Ang kahalagahan ng pagsusuri ng mga bahagi ng software ng third-party (Software Composition Analysis - SCA) sa proseso ng pagbuo ay lumalaki sa paglabas ng mga taunang ulat sa mga kahinaan ng mga open source na library, na inilathala ng Synopsys, Sonatype, Snyk, at White Source . Ayon sa ulat
Isa sa mga pinaka-nagpapakita na kaso
Tatalakayin ng artikulong ito ang isyu ng pagpili ng tool para sa pagsasagawa ng SCA mula sa punto ng view ng kalidad ng mga resulta ng pagsusuri. Magbibigay din ng functional na paghahambing ng mga tool. Ang proseso ng pagsasama sa CI/CD at mga kakayahan sa pagsasama ay iiwan para sa mga susunod na publikasyon. Ang isang malawak na hanay ng mga tool ay ipinakita ng OWASP
Prinsipyo ng operasyon
Tingnan natin kung ano ang hitsura ng CPE:
cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other
- bahagi: Indikasyon na ang bahagi ay nauugnay sa application (a), operating system (o), hardware (h) (Kinakailangan)
- Vendor: Pangalan ng Tagagawa ng Produkto (Kinakailangan)
- produkto: Pangalan ng Produkto (Kinakailangan)
- Bersyon: Component na bersyon (Obsolete item)
- I-update: Pag-update ng package
- Edition: Legacy na bersyon (Hindi na ginagamit na item)
- Wika: Tinukoy ang wika sa RFC-5646
- SW Edition: Bersyon ng software
- Target SW: Software na kapaligiran kung saan gumagana ang produkto
- Target na HW: Ang kapaligiran ng hardware kung saan gumagana ang produkto
- Iba pa: Impormasyon ng Supplier o Produkto
Ang isang halimbawa ng CPE ay ganito ang hitsura:
cpe:2.3:a:pivotal_software:spring_framework:3.0.0:*:*:*:*:*:*:*
Ang linya ay nangangahulugan na ang bersyon 2.3 ng CPE ay naglalarawan sa bahagi ng application mula sa tagagawa pivotal_software
gamit ang pangalan spring_framework
bersyon 3.0.0. Kung magbubukas tayo ng kahinaan
Ginagamit din ang URL ng mga tool ng SCA. Ang format ng URL ng package ay ang sumusunod:
scheme:type/namespace/name@version?qualifiers#subpath
- Scheme: Palaging mayroong 'pkg' na nagsasaad na ito ay isang URL ng package (Kinakailangan)
- Uri: Ang "uri" ng package o ang "protocol" ng package, tulad ng maven, npm, nuget, gem, pypi, atbp. (Kailangang item)
- Namespace: Ilang prefix ng pangalan, gaya ng Maven group ID, may-ari ng Docker image, user ng GitHub, o organisasyon. Opsyonal at depende sa uri.
- pangalan: Pangalan ng package (Kinakailangan)
- Bersyon: Bersyon ng package
- Qualifiers: Karagdagang data ng kwalipikasyon para sa package, gaya ng OS, arkitektura, pamamahagi, atbp. Opsyonal at partikular sa uri.
- Subpath: Karagdagang landas sa package na nauugnay sa root ng package
Halimbawa:
pkg:golang/google.golang.org/genproto#googleapis/api/annotations
pkg:maven/org.apache.commons/[email protected]
pkg:pypi/[email protected]
Isang halimbawa ng kung ano ang maaaring hitsura ng isang BOM sa XML na format:
<?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>
Maaaring gamitin ang BOM hindi lamang bilang mga parameter ng input para sa Dependency Track, kundi pati na rin para sa pag-imbentaryo ng mga bahagi ng software sa supply chain, halimbawa, para sa pagbibigay ng software sa isang customer. Noong 2014, isang batas ang iminungkahi sa Estados Unidos
Pagbabalik sa SCA, ang Dependency Track ay may mga nakahanda nang pagsasama sa Mga Platform ng Notification tulad ng Slack, mga sistema ng pamamahala ng kahinaan tulad ng Kenna Security. Nararapat ding sabihin na ang Dependency Track, bukod sa iba pang mga bagay, ay kinikilala ang mga lumang bersyon ng mga pakete at nagbibigay ng impormasyon tungkol sa mga lisensya (dahil sa suporta ng SPDX).
Kung partikular na pinag-uusapan natin ang kalidad ng SCA, mayroong pangunahing pagkakaiba.
Hindi tinatanggap ng Dependency Track ang proyekto bilang input, ngunit ang BOM. Nangangahulugan ito na kung gusto nating subukan ang proyekto, kailangan muna nating bumuo ng bom.xml, halimbawa gamit ang CycloneDX. Kaya, ang Dependency Track ay direktang umaasa sa CycloneDX. Kasabay nito, pinapayagan nito ang pagpapasadya. Ito ang isinulat ng pangkat ng OZON
Ibuod natin ang ilan sa mga functional na tampok, at isaalang-alang din ang mga sinusuportahang wika para sa pagsusuri:
Wika
Nexus IQ
Pagsusuri ng Dependency
Dependency Track
Java
+
+
+
C / C ++
+
+
-
C#
+
+
-
.net
+
+
+
Erlang
-
-
+
JavaScript (NodeJS)
+
+
+
PHP
+
+
+
Sawa
+
+
+
Mapula
+
+
+
Perl
-
-
-
Scala
+
+
+
Layunin C
+
+
-
matulin
+
+
-
R
+
-
-
Go
+
+
+
Pag-andar
Pag-andar
Nexus IQ
Pagsusuri ng Dependency
Dependency Track
Ang kakayahang matiyak na ang mga bahagi na ginamit sa source code ay nasuri para sa lisensyadong kadalisayan
+
-
+
Kakayahang mag-scan at magsuri para sa mga kahinaan at kalinisan ng lisensya para sa mga larawan ng Docker
+ Pagsasama kay Clair
-
-
Kakayahang i-configure ang mga patakaran sa seguridad upang magamit ang mga open source na library
+
-
-
Kakayahang mag-scan ng mga open source na repository para sa mga vulnerable na bahagi
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS
-
+ Hex, RubyGems, Maven, NPM, Nuget, Pypi
Availability ng isang espesyal na pangkat ng pananaliksik
+
-
-
Saradong operasyon ng loop
+
+
+
Paggamit ng mga database ng third party
+ Sarado na database ng Sonatype
+ Sonatype OSS, NPM Public Advisors
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, suporta para sa sarili nitong database ng kahinaan
Kakayahang mag-filter ng mga bahagi ng open source kapag sinusubukang mag-load sa development loop ayon sa mga naka-configure na patakaran
+
-
-
Mga rekomendasyon para sa pag-aayos ng mga kahinaan, pagkakaroon ng mga link sa mga pag-aayos
+
+- (depende sa paglalarawan sa mga pampublikong database)
+- (depende sa paglalarawan sa mga pampublikong database)
Pagraranggo ng mga nakitang kahinaan ayon sa kalubhaan
+
+
+
Nakabatay sa papel na modelo ng pag-access
+
-
+
suporta ng CLI
+
+
+- (para lang sa CycloneDX)
Pagsa-sample/pag-uuri ng mga kahinaan ayon sa tinukoy na pamantayan
+
-
+
Dashboard ayon sa status ng application
+
-
+
Pagbuo ng mga ulat sa format na PDF
+
-
-
Bumubuo ng mga ulat sa JSONCSV na format
+
+
-
Suporta sa wikang Ruso
-
-
-
Mga kakayahan sa pagsasama
Pagsasama
Nexus IQ
Pagsusuri ng Dependency
Dependency Track
Pagsasama ng LDAP/Aktibong Direktoryo
+
-
+
Pagsasama sa tuluy-tuloy na sistema ng pagsasama Bamboo
+
-
-
Pagsasama sa tuluy-tuloy na sistema ng pagsasama TeamCity
+
-
-
Pagsasama sa tuluy-tuloy na sistema ng pagsasama GitLab
+
+- (bilang isang plugin para sa GitLab)
+
Pagsasama sa tuluy-tuloy na sistema ng pagsasama Jenkins
+
+
+
Availability ng mga plugin para sa IDE
+ IntelliJ, Eclipse, Visual Studio
-
-
Suporta para sa custom na pagsasama sa pamamagitan ng mga web-service (API) ng tool
+
-
+
Pagsusuri ng Dependency
Unang pagsisimula
Patakbuhin natin ang Dependency Check sa isang sadyang mahina na application
Para dito gagamitin namin
mvn org.owasp:dependency-check-maven:check
Bilang resulta, lilitaw ang dependency-check-report.html sa target na direktoryo.
Buksan natin ang file. Pagkatapos ng buod ng impormasyon tungkol sa kabuuang bilang ng mga kahinaan, makikita natin ang impormasyon tungkol sa mga kahinaan na may mataas na antas ng Kalubhaan at Kumpiyansa, na nagsasaad ng package, CPE, at bilang ng mga CVE.
Susunod na dumating ang mas detalyadong impormasyon, lalo na ang batayan kung saan ginawa ang desisyon (ebidensya), iyon ay, isang tiyak na BOM.
Susunod ay ang paglalarawan ng CPE, PURL at CVE. Sa pamamagitan ng paraan, ang mga rekomendasyon para sa pagwawasto ay hindi kasama dahil sa kanilang kawalan sa database ng NVD.
Upang sistematikong tingnan ang mga resulta ng pag-scan, maaari mong i-configure ang Nginx na may kaunting mga setting, o ipadala ang mga nagresultang mga depekto sa isang defect management system na sumusuporta sa mga connector sa Dependency Check. Halimbawa, ang Defect Dojo.
Dependency Track
Instalasyon
Ang Dependency Track, sa turn, ay isang web-based na platform na may mga display graph, kaya't ang pagpindot sa isyu ng pag-iimbak ng mga depekto sa isang third-party na solusyon ay hindi lumabas dito.
Ang mga sinusuportahang script para sa pag-install ay: Docker, WAR, Executable WAR.
Unang pagsisimula
Pumunta kami sa URL ng tumatakbong serbisyo. Nag-log in kami sa pamamagitan ng admin/admin, palitan ang login at password, at pagkatapos ay pumunta sa Dashboard. Ang susunod na gagawin namin ay lumikha ng isang proyekto para sa isang pagsubok na aplikasyon sa Java sa Tahanan/Mga Proyekto → Gumawa ng Proyekto . Kunin natin ang DVJA bilang isang halimbawa.
Dahil ang Dependency Track ay maaari lamang tumanggap ng BOM bilang input, ang BOM na ito ay dapat na makuha. Samantalahin natin
mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom
Kumuha kami ng bom.xml at i-load ang file sa ginawang proyekto DVJA → Dependeency → Mag-upload ng BOM.
Pumunta tayo sa Administration → Analyzers. Naiintindihan namin na Internal Analyzer lang ang pinagana namin, na kinabibilangan ng NVD. Ikonekta din natin ang Sonatype OSS Index.
Kaya, nakukuha namin ang sumusunod na larawan para sa aming proyekto:
Gayundin sa listahan makakahanap ka ng isang kahinaan na naaangkop sa Sonatype OSS:
Ang pangunahing pagkabigo ay ang Dependency Track ay hindi na tumatanggap ng mga ulat ng Dependency Check xml. Ang pinakabagong mga suportadong bersyon ng integration ng Dependency Check ay 1.0.0 - 4.0.2, habang sinubukan ko ang 5.3.2.
Dito
Nexus IQ
Unang pagsisimula
Ang pag-install ng Nexus IQ ay mula sa archive ng
Pagkatapos mag-log in sa console, kailangan mong lumikha ng Organisasyon at Application.
Tulad ng nakikita mo, ang pag-setup sa kaso ng IQ ay medyo mas kumplikado, dahil kailangan din naming gumawa ng mga patakaran na naaangkop para sa iba't ibang "yugto" (dev, build, stage, release). Ito ay kinakailangan upang harangan ang mga masusugatan na bahagi habang lumilipat sila sa pipeline na mas malapit sa produksyon, o upang harangan ang mga ito sa sandaling makapasok sila sa Nexus Repo kapag na-download ng mga developer.
Upang madama ang pagkakaiba sa pagitan ng open source at enterprise, gawin natin ang parehong pag-scan sa Nexus IQ sa parehong paraan 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>
Sundin ang URL sa nabuong ulat sa IQ web interface:
Dito makikita mo ang lahat ng paglabag sa patakaran na nagsasaad ng iba't ibang antas ng kahalagahan (mula sa Impormasyon hanggang sa Kritikal sa Seguridad). Ang letrang D sa tabi ng component ay nangangahulugan na ang component ay Direct Dependency, at ang letter T sa tabi ng component ay nangangahulugan na ang component ay Transitive Dependency, ibig sabihin, ito ay transitive.
Sa pamamagitan ng paraan, ang ulat
Kung bubuksan namin ang isa sa mga paglabag sa patakaran ng Nexus IQ, makakakita kami ng paglalarawan ng bahagi, pati na rin ang Graph ng Bersyon, na nagpapakita ng lokasyon ng kasalukuyang bersyon sa graph ng oras, gayundin sa kung saan humihinto ang kahinaan. maging mahina. Ang taas ng mga kandila sa graph ay nagpapakita ng katanyagan ng paggamit ng bahaging ito.
Kung pupunta ka sa seksyon ng mga kahinaan at palawakin ang CVE, maaari mong basahin ang isang paglalarawan ng kahinaan na ito, mga rekomendasyon para sa pag-aalis, pati na rin ang dahilan kung bakit nilabag ang bahaging ito, iyon ay, ang presensya ng klase DiskFileitem.class
.
Ibuod lang natin ang mga nauugnay sa mga third-party na bahagi ng Java, na inaalis ang mga bahagi ng js. Sa panaklong ipinapahiwatig namin ang bilang ng mga kahinaan na natagpuan sa labas ng NVD.
Kabuuang Nexus IQ:
- Na-scan ang Dependencies: 62
- Mga Mahihinang Dependencies: 16
- Natagpuan ang mga kahinaan: 42 (8 sonatype db)
Kabuuang Pagsusuri ng Dependency:
- Na-scan ang Dependencies: 47
- Mga Mahihinang Dependencies: 13
- Natagpuan ang mga kahinaan: 91 (14 sonatype oss)
Kabuuang Dependency Track:
- Na-scan ang Dependencies: 59
- Mga Mahihinang Dependencies: 10
- Natagpuan ang mga kahinaan: 51 (1 sonatype oss)
Sa mga susunod na hakbang, susuriin namin ang mga resultang nakuha at malalaman kung alin sa mga kahinaang ito ang tunay na depekto at alin ang false positive.
Disclaimer
Ang pagsusuri na ito ay hindi isang hindi mapag-aalinlanganang katotohanan. Ang may-akda ay walang layunin na i-highlight ang isang hiwalay na instrumento laban sa background ng iba. Ang layunin ng pagsusuri ay upang ipakita ang mga mekanismo ng pagpapatakbo ng mga tool ng SCA at mga paraan upang suriin ang kanilang mga resulta.
Paghahambing ng mga resulta
Mga tuntunin at kundisyon:
Ang isang maling positibo para sa mga kahinaan ng bahagi ng third-party ay:
- CVE mismatch sa natukoy na bahagi
- Halimbawa, kung ang isang kahinaan ay natukoy sa struts2 framework, at ang tool ay tumuturo sa isang bahagi ng struts-tiles framework, kung saan ang vulnerability na ito ay hindi nalalapat, ito ay isang false positive.
- CVE mismatch sa natukoy na bersyon ng component
- Halimbawa, ang kahinaan ay nakatali sa bersyon ng python > 3.5 at minarkahan ng tool ang bersyon 2.7 bilang vulnerable - isa itong maling positibo, dahil sa katunayan ang kahinaan ay nalalapat lamang sa sangay ng produkto na 3.x
- Duplicate na CVE
- Halimbawa, kung ang SCA ay tumutukoy ng isang CVE na nagpapagana ng isang RCE, ang SCA ay tumutukoy ng isang CVE para sa parehong bahagi na nalalapat sa mga produkto ng Cisco na apektado ng RCE na iyon. Sa kasong ito, magiging false positive ito.
- Halimbawa, natagpuan ang isang CVE sa isang bahagi ng spring-web, pagkatapos ay itinuro ng SCA ang parehong CVE sa iba pang mga bahagi ng Spring Framework, habang ang CVE ay walang kinalaman sa iba pang mga bahagi. Sa kasong ito, magiging false positive ito.
Ang layunin ng pag-aaral ay ang Open Source project na DVJA. Ang pag-aaral ay nagsasangkot lamang ng mga bahagi ng java (walang js).
Mga resulta ng buod
Dumiretso tayo sa mga resulta ng manu-manong pagsusuri ng mga natukoy na kahinaan. Ang buong ulat para sa bawat CVE ay matatagpuan sa Appendix.
Mga resulta ng buod para sa lahat ng mga kahinaan:
Parametro
Nexus IQ
Pagsusuri ng Dependency
Dependency Track
Natukoy ang kabuuang mga kahinaan
42
91
51
Maling natukoy na mga kahinaan (false positive)
2 (4.76%)
62 (68,13%)
29 (56.86%)
Walang nakitang nauugnay na mga kahinaan (false negative)
10
20
27
Mga resulta ng buod ayon sa bahagi:
Parametro
Nexus IQ
Pagsusuri ng Dependency
Dependency Track
Natukoy ang kabuuang mga bahagi
62
47
59
Kabuuang masusugatan na mga bahagi
16
13
10
Maling natukoy na mga vulnerable na bahagi (false positive)
1
5
0
Maling natukoy na mga vulnerable na bahagi (false positive)
0
6
6
Bumuo tayo ng mga visual na graph upang suriin ang ratio ng false positive at false negative sa kabuuang bilang ng mga kahinaan. Ang mga bahagi ay minarkahan nang pahalang, at ang mga kahinaan na natukoy sa mga ito ay minarkahan nang patayo.
Para sa paghahambing, ang isang katulad na pag-aaral ay isinagawa ng koponan ng Sonatype na sumusubok sa isang proyekto ng 1531 mga bahagi gamit ang OWASP Dependency Check. Gaya ng nakikita natin, ang ratio ng ingay sa mga tamang tugon ay maihahambing sa aming mga resulta.
Pinagmulan:
Tingnan natin ang ilang CVE mula sa aming mga resulta ng pag-scan upang maunawaan ang dahilan ng mga resultang ito.
pa
№ 1
Tingnan muna natin ang ilang mga kawili-wiling punto tungkol sa Sonatype Nexus IQ.
Itinuturo ng Nexus IQ ang isang isyu sa deserialization na may kakayahang magsagawa ng RCE sa Spring Framework nang maraming beses. CVE-2016-1000027 sa spring-web:3.0.5 sa unang pagkakataon, at CVE-2011-2894 sa spring-context:3.0.5 at spring-core:3.0.5. Sa una, lumilitaw na mayroong pagdoble ng kahinaan sa maraming CVE. Dahil, kung titingnan mo ang CVE-2016-1000027 at CVE-2011-2894 sa database ng NVD, tila lahat ay halata
Component
Kakayahang mangyari
spring-web:3.0.5
CVE-2016-1000027
spring-context:3.0.5
CVE-2011-2894
spring-core:3.0.5
CVE-2011-2894
Описание
Описание
Ang CVE-2011-2894 mismo ay medyo sikat. Sa ulat RemoteInvocationSerializingExporter
sa CVE-2011-2894, ang kahinaan ay sinusunod sa HttpInvokerServiceExporter
. Ito ang sinasabi sa atin ng Nexus IQ:
Gayunpaman, walang katulad nito sa NVD, kaya naman ang Dependency Check at Dependency Track ang bawat isa ay tumatanggap ng maling negatibo.
Mula rin sa paglalarawan ng CVE-2011-2894 mauunawaan na ang kahinaan ay talagang naroroon sa parehong spring-context:3.0.5 at spring-core:3.0.5. Ang kumpirmasyon nito ay makikita sa isang artikulo mula sa taong nakahanap ng kahinaang ito.
№ 2
Component
Kakayahang mangyari
Resulta
struts2-core:2.3.30
CVE-2016-4003
FALSE
Kung pag-aaralan namin ang kahinaan na CVE-2016-4003, mauunawaan namin na naayos ito sa bersyon 2.3.28, gayunpaman, iniuulat ito sa amin ng Nexus IQ. Mayroong tala sa paglalarawan ng kahinaan:
Iyon ay, ang kahinaan ay umiiral lamang kasabay ng isang lumang bersyon ng JRE, na nagpasya silang bigyan kami ng babala. Gayunpaman, itinuturing namin itong False Positive, bagama't hindi ang pinakamasama.
# 3
Component
Kakayahang mangyari
Resulta
xwork-core:2.3.30
CVE-2017-9804
TRUE
xwork-core:2.3.30
CVE-2017-7672
FALSE
Kung titingnan natin ang mga paglalarawan ng CVE-2017-9804 at CVE-2017-7672, mauunawaan natin na ang problema ay URLValidator class
, na may CVE-2017-9804 na nagmumula sa CVE-2017-7672. Ang pagkakaroon ng pangalawang kahinaan ay hindi nagdadala ng anumang kapaki-pakinabang na pagkarga maliban sa katotohanan na ang kalubhaan nito ay tumaas sa Mataas, kaya maaari nating isaalang-alang ito na hindi kinakailangang ingay.
Sa pangkalahatan, walang ibang maling positibong nakita para sa Nexus IQ.
№ 4
Mayroong ilang mga bagay na nagpapatingkad sa IQ mula sa iba pang mga solusyon.
Component
Kakayahang mangyari
Resulta
spring-web:3.0.5
CVE-2020-5398
TRUE
Ang CVE sa NVD ay nagsasaad na nalalapat lamang ito sa mga bersyon 5.2.x bago ang 5.2.3, 5.1.x bago ang 5.1.13, at mga bersyon 5.0.x bago ang 5.0.16, gayunpaman, kung titingnan natin ang paglalarawan ng CVE sa Nexus IQ , pagkatapos ay makikita natin ang sumusunod:
Abiso sa Paglihis ng Advisory: Natuklasan ng koponan ng pananaliksik sa seguridad ng Sonatype na ang kahinaang ito ay ipinakilala sa bersyon 3.0.2.RELEASE at hindi 5.0.x gaya ng nakasaad sa advisory.
Sinusundan ito ng isang PoC para sa kahinaang ito, na nagsasaad na ito ay nasa bersyon 3.0.5.
Ang maling negatibo ay ipinadala sa Dependency Check at Dependency Track.
№ 5
Tingnan natin ang false positive para sa Dependency Check at Dependency Track.
Namumukod-tangi ang Dependency Check dahil ipinapakita nito ang mga CVE na nalalapat sa buong framework sa NVD sa mga bahaging iyon kung saan hindi nalalapat ang mga CVE na ito. May kinalaman ito sa CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, kung saan ang Dependency Check ” sa struts-taglib:1.3.8 at struts-tiles-1.3.8. Ang mga bahaging ito ay walang kinalaman sa inilarawan sa CVE - pagpoproseso ng kahilingan, pagpapatunay ng pahina, at iba pa. Ito ay dahil sa katotohanan na ang pagkakatulad ng mga CVE at mga bahagi na ito ay ang balangkas lamang, kaya naman itinuturing itong kahinaan ng Dependency Check.
Ang parehong sitwasyon ay sa spring-tx:3.0.5, at isang katulad na sitwasyon sa struts-core:1.3.8. Para sa struts-core, ang Dependency Check at Dependency Track ay nakakita ng maraming mga kahinaan na aktwal na naaangkop sa struts2-core, na mahalagang isang hiwalay na framework. Sa kasong ito, wastong naunawaan ng Nexus IQ ang larawan at sa mga CVE na inilabas nito, ipinahiwatig nito na ang struts-core ay umabot na sa katapusan ng buhay at kinakailangang lumipat sa struts2-core.
№ 6
Sa ilang sitwasyon, hindi patas na bigyang-kahulugan ang isang malinaw na Dependency Check at Dependency Track error. Sa partikular na CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, na Track Dependency Check at Dependency Check na nauugnay sa spring-core:3.0.5 ay talagang kabilang sa spring-web:3.0.5. Kasabay nito, ang ilan sa mga CVE na ito ay natagpuan din ng Nexus IQ, gayunpaman, tama ang pagkakakilala ng IQ sa mga ito sa isa pang bahagi. Dahil ang mga kahinaan na ito ay hindi natagpuan sa spring-core, hindi ito mapagtatalunan na ang mga ito ay wala sa balangkas sa prinsipyo at ang mga open source na tool ay wastong itinuro ang mga kahinaan na ito (sila ay napalampas lamang ng kaunti).
Natuklasan
Tulad ng nakikita natin, ang pagtukoy sa pagiging maaasahan ng mga natukoy na kahinaan sa pamamagitan ng manu-manong pagsusuri ay hindi nagbibigay ng hindi malabo na mga resulta, kaya naman lumitaw ang mga kontrobersyal na isyu. Ang mga resulta ay ang solusyon sa Nexus IQ ay may pinakamababang false positive rate at pinakamataas na katumpakan.
Una sa lahat, ito ay dahil sa katotohanan na pinalawak ng koponan ng Sonatype ang paglalarawan para sa bawat kahinaan ng CVE mula sa NVD sa mga database nito, na nagpapahiwatig ng mga kahinaan para sa isang partikular na bersyon ng mga bahagi hanggang sa klase o function, na nagsasagawa ng karagdagang pananaliksik (halimbawa , sinusuri ang mga kahinaan sa mga mas lumang bersyon ng software).
Ang isang mahalagang impluwensya sa mga resulta ay nilalaro din ng mga kahinaan na hindi kasama sa NVD, ngunit gayunpaman ay naroroon sa database ng Sonatype na may markang SONATYPE. Ayon sa ulat
Bilang resulta, ang Dependency Check ay gumagawa ng maraming ingay, nawawala ang ilang mga masusugatan na bahagi. Ang Dependency Track ay gumagawa ng mas kaunting ingay at nakakakita ng malaking bilang ng mga bahagi, na hindi nakikitang masakit sa mga mata sa web interface.
Gayunpaman, ipinapakita ng kasanayan na ang open source ay dapat na maging mga unang hakbang patungo sa mature na DevSecOps. Ang unang bagay na dapat mong isipin kapag isinasama ang SCA sa pag-unlad ay ang mga proseso, ibig sabihin, pag-iisip kasama ng pamamahala at mga kaugnay na departamento tungkol sa kung ano ang dapat na hitsura ng mga perpektong proseso sa iyong organisasyon. Maaaring lumabas na para sa iyong organisasyon, sa una, sasakupin ng Dependency Check o Dependency Track ang lahat ng pangangailangan ng negosyo, at ang mga solusyon sa Enterprise ay magiging isang lohikal na pagpapatuloy dahil sa lumalaking kumplikado ng mga application na binuo.
Appendix A: Mga Resulta ng Component
Simbolo:
- Mataas—mataas at kritikal na antas ng mga kahinaan sa bahagi
- Katamtaman — Mga kahinaan ng katamtamang antas ng pagiging kritikal sa bahagi
- TOTOO — Totoong positibong isyu
- MALI — Maling positibong isyu
Component
Nexus IQ
Pagsusuri ng Dependency
Dependency Track
Resulta
dom4j: 1.6.1
Mataas
Mataas
Mataas
TRUE
log4j-core: 2.3
Mataas
Mataas
Mataas
TRUE
log4j: 1.2.14
Mataas
Mataas
-
TRUE
commons-collections:3.1
Mataas
Mataas
Mataas
TRUE
commons-fileupload:1.3.2
Mataas
Mataas
Mataas
TRUE
commons-beanutils:1.7.0
Mataas
Mataas
Mataas
TRUE
commons-codec:1:10
Medium
-
-
TRUE
mysql-connector-java:5.1.42
Mataas
Mataas
Mataas
TRUE
spring-expression:3.0.5
Mataas
hindi natagpuan ang sangkap
TRUE
spring-web:3.0.5
Mataas
hindi natagpuan ang sangkap
Mataas
TRUE
spring-context:3.0.5
Medium
hindi natagpuan ang sangkap
-
TRUE
spring-core:3.0.5
Medium
Mataas
Mataas
TRUE
struts2-config-browser-plugin:2.3.30
Medium
-
-
TRUE
spring-tx:3.0.5
-
Mataas
-
FALSE
struts-core:1.3.8
Mataas
Mataas
Mataas
TRUE
xwork-core: 2.3.30
Mataas
-
-
TRUE
struts2-core: 2.3.30
Mataas
Mataas
Mataas
TRUE
struts-taglib:1.3.8
-
Mataas
-
FALSE
struts-tiles-1.3.8
-
Mataas
-
FALSE
Appendix B: Mga Resulta ng Pagkakabulnerabilidad
Simbolo:
- Mataas—mataas at kritikal na antas ng mga kahinaan sa bahagi
- Katamtaman — Mga kahinaan ng katamtamang antas ng pagiging kritikal sa bahagi
- TOTOO — Totoong positibong isyu
- MALI — Maling positibong isyu
Component
Nexus IQ
Pagsusuri ng Dependency
Dependency Track
Tindi
Resulta
Puna
dom4j: 1.6.1
CVE-2018-1000632
CVE-2018-1000632
CVE-2018-1000632
Mataas
TRUE
CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
Mataas
TRUE
log4j-core: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
Mataas
TRUE
CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
Mababa
TRUE
log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571
-
Mataas
TRUE
-
CVE-2020-9488
-
Mababa
TRUE
SONATYPE-2010-0053
-
-
Mataas
TRUE
commons-collections:3.1
-
CVE-2015-6420
CVE-2015-6420
Mataas
FALSE
Mga Duplicate na RCE(OSSINDEX)
-
CVE-2017-15708
CVE-2017-15708
Mataas
FALSE
Mga Duplicate na RCE(OSSINDEX)
SONATYPE-2015-0002
RCE (OSSINDEX)
RCE(OSSINDEX)
Mataas
TRUE
commons-fileupload:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
Mataas
TRUE
SONATYPE-2014-0173
-
-
Medium
TRUE
commons-beanutils:1.7.0
CVE-2014-0114
CVE-2014-0114
CVE-2014-0114
Mataas
TRUE
-
CVE-2019-10086
CVE-2019-10086
Mataas
FALSE
Nalalapat lang ang kahinaan sa mga bersyon 1.9.2+
commons-codec:1:10
SONATYPE-2012-0050
-
-
Medium
TRUE
mysql-connector-java:5.1.42
CVE-2018-3258
CVE-2018-3258
CVE-2018-3258
Mataas
TRUE
CVE-2019-2692
CVE-2019-2692
-
Medium
TRUE
-
CVE-2020-2875
-
Medium
FALSE
Ang parehong kahinaan gaya ng CVE-2019-2692, ngunit may tala na "maaaring makabuluhang makaapekto ang mga pag-atake sa mga karagdagang produkto"
-
CVE-2017-15945
-
Mataas
FALSE
Hindi nauugnay sa mysql-connector-java
-
CVE-2020-2933
-
Mababa
FALSE
Duplicate ng CVE-2020-2934
CVE-2020-2934
CVE-2020-2934
-
Medium
TRUE
spring-expression:3.0.5
CVE-2018-1270
hindi natagpuan ang sangkap
-
Mataas
TRUE
CVE-2018-1257
-
-
Medium
TRUE
spring-web:3.0.5
CVE-2016-1000027
hindi natagpuan ang sangkap
-
Mataas
TRUE
CVE-2014-0225
-
CVE-2014-0225
Mataas
TRUE
CVE-2011-2730
-
-
Mataas
TRUE
-
-
CVE-2013-4152
Medium
TRUE
CVE-2018-1272
-
-
Mataas
TRUE
CVE-2020-5398
-
-
Mataas
TRUE
Isang mapaglarawang halimbawa na pabor sa IQ: "Natuklasan ng Sonatype security research team na ang kahinaan na ito ay ipinakilala sa bersyon 3.0.2.RELEASE at hindi 5.0.x gaya ng nakasaad sa advisory."
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
hindi natagpuan ang sangkap
-
Medium
TRUE
spring-core:3.0.5
-
CVE-2011-2730
CVE-2011-2730
Mataas
TRUE
CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
Medium
TRUE
-
-
CVE-2013-4152
Medium
FALSE
Duplicate ng parehong kahinaan sa spring-web
-
CVE-2013-4152
-
Medium
FALSE
Ang kahinaan ay nauugnay sa bahagi ng spring-web
-
CVE-2013-6429
CVE-2013-6429
Medium
FALSE
Ang kahinaan ay nauugnay sa bahagi ng spring-web
-
CVE-2013-6430
-
Medium
FALSE
Ang kahinaan ay nauugnay sa bahagi ng spring-web
-
CVE-2013-7315
CVE-2013-7315
Medium
FALSE
SPLIT mula sa CVE-2013-4152. + Ang kahinaan ay nauugnay sa bahagi ng spring-web
-
CVE-2014-0054
CVE-2014-0054
Medium
FALSE
Ang kahinaan ay nauugnay sa bahagi ng spring-web
-
CVE-2014-0225
-
Mataas
FALSE
Ang kahinaan ay nauugnay sa bahagi ng spring-web
-
-
CVE-2014-0225
Mataas
FALSE
Duplicate ng parehong kahinaan sa spring-web
-
CVE-2014-1904
CVE-2014-1904
Medium
FALSE
Ang kahinaan ay nauugnay sa bahagi ng spring-web-mvc
-
CVE-2014-3625
CVE-2014-3625
Medium
FALSE
Ang kahinaan ay nauugnay sa bahagi ng spring-web-mvc
-
CVE-2016-9878
CVE-2016-9878
Mataas
FALSE
Ang kahinaan ay nauugnay sa bahagi ng spring-web-mvc
-
CVE-2018-1270
CVE-2018-1270
Mataas
FALSE
Para sa spring-expression/spring-message
-
CVE-2018-1271
CVE-2018-1271
Medium
FALSE
Ang kahinaan ay nauugnay sa bahagi ng spring-web-mvc
-
CVE-2018-1272
CVE-2018-1272
Mataas
TRUE
CVE-2014-3578
CVE-2014-3578 (OSSINDEX)
CVE-2014-3578
Medium
TRUE
SONATYPE-2015-0327
-
-
Mababa
TRUE
struts2-config-browser-plugin:2.3.30
SONATYPE-2016-0104
-
-
Medium
TRUE
spring-tx:3.0.5
-
CVE-2011-2730
-
Mataas
FALSE
Ang kahinaan ay hindi partikular sa spring-tx
-
CVE-2011-2894
-
Mataas
FALSE
Ang kahinaan ay hindi partikular sa spring-tx
-
CVE-2013-4152
-
Medium
FALSE
Ang kahinaan ay hindi partikular sa spring-tx
-
CVE-2013-6429
-
Medium
FALSE
Ang kahinaan ay hindi partikular sa spring-tx
-
CVE-2013-6430
-
Medium
FALSE
Ang kahinaan ay hindi partikular sa spring-tx
-
CVE-2013-7315
-
Medium
FALSE
Ang kahinaan ay hindi partikular sa spring-tx
-
CVE-2014-0054
-
Medium
FALSE
Ang kahinaan ay hindi partikular sa spring-tx
-
CVE-2014-0225
-
Mataas
FALSE
Ang kahinaan ay hindi partikular sa spring-tx
-
CVE-2014-1904
-
Medium
FALSE
Ang kahinaan ay hindi partikular sa spring-tx
-
CVE-2014-3625
-
Medium
FALSE
Ang kahinaan ay hindi partikular sa spring-tx
-
CVE-2016-9878
-
Mataas
FALSE
Ang kahinaan ay hindi partikular sa spring-tx
-
CVE-2018-1270
-
Mataas
FALSE
Ang kahinaan ay hindi partikular sa spring-tx
-
CVE-2018-1271
-
Medium
FALSE
Ang kahinaan ay hindi partikular sa spring-tx
-
CVE-2018-1272
-
Medium
FALSE
Ang kahinaan ay hindi partikular sa spring-tx
struts-core:1.3.8
-
CVE-2011-5057 (OSSINDEX)
Medium
FASLE
Kahinaan sa Struts 2
-
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
Mataas
FALSE
Kahinaan sa Struts 2
-
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
Medium
FALSE
Kahinaan sa Struts 2
-
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
Mataas
FALSE
Kahinaan sa Struts 2
CVE-2016-1182
3VE-2016-1182
-
Mataas
TRUE
-
-
CVE-2011-5057
Medium
FALSE
Kahinaan sa Struts 2
-
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
Mataas
FALSE
Kahinaan sa Struts 2
-
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
Medium
FALSE
Kahinaan sa Struts 2
CVE-2015-0899
CVE-2015-0899
-
Mataas
TRUE
-
CVE-2012-0394
CVE-2012-0394
Medium
FALSE
Kahinaan sa Struts 2
-
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
Mataas
FALSE
Kahinaan sa Struts 2
-
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
Mataas
FALSE
Kahinaan sa Struts 2
-
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
Mataas
FASLE
Kahinaan sa Struts 2
-
CVE-2013-2115
CVE-2013-2115
Mataas
FASLE
Kahinaan sa Struts 2
-
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
Mataas
FASLE
Kahinaan sa Struts 2
-
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
Mataas
FASLE
Kahinaan sa Struts 2
CVE-2014-0114
CVE-2014-0114
-
Mataas
TRUE
-
CVE-2015-2992
CVE-2015-2992
Medium
FALSE
Kahinaan sa Struts 2
-
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
Mataas
FALSE
Kahinaan sa Struts 2
CVE-2016-1181
CVE-2016-1181
-
Mataas
TRUE
-
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
Mataas
FALSE
Kahinaan sa Struts 2
xwork-core:2.3.30
CVE-2017-9804
-
-
Mataas
TRUE
SONATYPE-2017-0173
-
-
Mataas
TRUE
CVE-2017-7672
-
-
Mataas
FALSE
Duplicate ng CVE-2017-9804
SONATYPE-2016-0127
-
-
Mataas
TRUE
struts2-core:2.3.30
-
CVE-2016-6795
CVE-2016-6795
Mataas
TRUE
-
CVE-2017-9787
CVE-2017-9787
Mataas
TRUE
-
CVE-2017-9791
CVE-2017-9791
Mataas
TRUE
-
CVE-2017-9793
-
Mataas
FALSE
Duplicate ng CVE-2018-1327
-
CVE-2017-9804
-
Mataas
TRUE
-
CVE-2017-9805
CVE-2017-9805
Mataas
TRUE
CVE-2016-4003
-
-
Medium
FALSE
Naaangkop sa Apache Struts 2.x hanggang 2.3.28, na bersyon 2.3.30. Gayunpaman, batay sa paglalarawan, ang CVE ay may bisa para sa anumang bersyon ng Struts 2 kung JRE 1.7 o mas mababa ang ginamit. Tila napagpasyahan nilang i-reinsure kami dito, ngunit mukhang MALI
-
CVE-2018-1327
CVE-2018-1327
Mataas
TRUE
CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
Mataas
TRUE
Ang parehong kahinaan na pinagsamantalahan ng mga hacker ng Equifax noong 2017
CVE-2017-12611
CVE-2017-12611
-
Mataas
TRUE
CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
Mataas
TRUE
struts-taglib:1.3.8
-
CVE-2012-0394
-
Medium
FALSE
Para sa struts2-core
-
CVE-2013-2115
-
Mataas
FALSE
Para sa struts2-core
-
CVE-2014-0114
-
Mataas
FALSE
Para sa commons-beanutils
-
CVE-2015-0899
-
Mataas
FALSE
Hindi naaangkop sa taglib
-
CVE-2015-2992
-
Medium
FALSE
Tumutukoy sa struts2-core
-
CVE-2016-1181
-
Mataas
FALSE
Hindi naaangkop sa taglib
-
CVE-2016-1182
-
Mataas
FALSE
Hindi naaangkop sa taglib
struts-tiles-1.3.8
-
CVE-2012-0394
-
Medium
FALSE
Para sa struts2-core
-
CVE-2013-2115
-
Mataas
FALSE
Para sa struts2-core
-
CVE-2014-0114
-
Mataas
FALSE
Sa ilalim ng commons-beanutils
-
CVE-2015-0899
-
Mataas
FALSE
Hindi nalalapat sa mga tile
-
CVE-2015-2992
-
Medium
FALSE
Para sa struts2-core
-
CVE-2016-1181
-
Mataas
FALSE
Hindi naaangkop sa taglib
-
CVE-2016-1182
-
Mataas
FALSE
Hindi naaangkop sa taglib
Pinagmulan: www.habr.com