DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

ความสำคัญของการวิเคราะห์องค์ประกอบซอฟต์แวร์ของบุคคลที่สาม (การวิเคราะห์องค์ประกอบซอฟต์แวร์ภาษาอังกฤษ - SCA) ในกระบวนการพัฒนานั้นเพิ่มขึ้นพร้อมกับการเปิดตัวรายงานประจำปีเกี่ยวกับช่องโหว่ของไลบรารีโอเพ่นซอร์สซึ่งเผยแพร่โดย Synopsys, Sonatype, Snyk, White Source ตามรายงาน สถานะของช่องโหว่ความปลอดภัยโอเพ่นซอร์ส 2020 จำนวนช่องโหว่ที่ระบุในโอเพ่นซอร์สในปี 2019 เพิ่มขึ้นเกือบ 1.5 เท่าเมื่อเทียบกับปีที่แล้ว ในขณะที่ส่วนประกอบโอเพ่นซอร์สถูกใช้ไป 60% ถึง 80% ของโครงการ ตามความคิดเห็นที่เป็นอิสระ กระบวนการ SCA เป็นแนวปฏิบัติที่แยกจาก OWASP SAMM และ BSIMM เป็นตัวบ่งชี้ความสมบูรณ์ และในช่วงครึ่งแรกของปี 2020 OWASP ได้เปิดตัว OWASP Software Component Verification Standard (SCVS) ใหม่ที่ให้แนวทางปฏิบัติที่ดีที่สุดสำหรับการตรวจสอบบุคคลที่สาม ส่วนประกอบในห่วงโซ่อุปทาน BY.

DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

หนึ่งในกรณีตัวอย่างมากที่สุด เกิดขึ้น กับ Equifax ในเดือนพฤษภาคม 2017 ผู้โจมตีที่ไม่รู้จักได้รับข้อมูลเกี่ยวกับชาวอเมริกัน 143 ล้านคน รวมถึงชื่อนามสกุล ที่อยู่ หมายเลขประกันสังคม และใบขับขี่ ใน 209 คดี เอกสารยังรวมถึงข้อมูลเกี่ยวกับบัตรธนาคารของผู้ที่ตกเป็นเหยื่อ การรั่วไหลนี้เกิดขึ้นจากการใช้ประโยชน์จากช่องโหว่ร้ายแรงใน Apache Struts 000 (CVE-2-2017) ในขณะที่การแก้ไขได้รับการเผยแพร่ในเดือนมีนาคม 5638 บริษัทมีเวลาสองเดือนในการติดตั้งการอัปเดต แต่ไม่มีใครสนใจเกี่ยวกับเรื่องนี้

บทความนี้จะกล่าวถึงประเด็นการเลือกเครื่องมือในการทำ SCA ในด้านคุณภาพของผลการวิเคราะห์ การเปรียบเทียบการทำงานของเครื่องมือจะได้รับด้วย เราจะออกจากขั้นตอนการฝังใน CI / CD และโอกาสในการรวมสำหรับการเผยแพร่ในภายหลัง OWASP นำเสนอเครื่องมือที่หลากหลาย บนเว็บไซต์ของคุณแต่ในฐานะส่วนหนึ่งของการตรวจสอบปัจจุบัน เราจะกล่าวถึงเฉพาะเครื่องมือตรวจสอบการพึ่งพาโอเพนซอร์สที่เป็นที่นิยมมากที่สุด แพลตฟอร์มการติดตามการพึ่งพาโอเพนซอร์สที่เป็นที่รู้จักน้อยกว่าเล็กน้อย และโซลูชัน Sonatype Nexus IQ Enterprise เราจะเข้าใจวิธีการทำงานของโซลูชันเหล่านี้และเปรียบเทียบผลลัพธ์ที่ได้รับสำหรับผลบวกปลอม

DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

หลักการของการดำเนินงาน

ตรวจสอบการพึ่งพา เป็นยูทิลิตี้ (CLI, maven, jenkins module, ant) ​​ที่วิเคราะห์ไฟล์โครงการ, รวบรวมชิ้นส่วนของข้อมูลเกี่ยวกับการอ้างอิง (ชื่อแพ็คเกจ, groupid, ชื่อข้อมูลจำเพาะ, รุ่น ... ), สร้างสตริง CPE - (การแจงนับแพลตฟอร์มทั่วไป ), URL ของแพ็คเกจ ( PURL) และตรวจหาช่องโหว่สำหรับ CPE/PURL จากฐานข้อมูล (NVD, Sonatype OSS Index, NPM Audit API…) หลังจากนั้นจะสร้างรายงานแบบครั้งเดียวในรูปแบบ HTML, JSON, XML…

พิจารณาว่า CPE มีลักษณะอย่างไร:

cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other

  • ส่วนหนึ่ง: การบ่งชี้ว่าส่วนประกอบเป็นของแอปพลิเคชัน (a) ระบบปฏิบัติการ (o) ฮาร์ดแวร์ (h) (รายการที่จำเป็น)
  • ผู้ขาย: ชื่อผู้ผลิตสินค้า (Required item)
  • สินค้า: ชื่อสินค้า (จำเป็น)
  • เวอร์ชัน: เวอร์ชันคอมโพเนนต์ (รายการที่เลิกใช้แล้ว)
  • ปรับปรุง: อัพเดทแพ็คเกจ
  • ฉบับ: รุ่นที่สืบทอดมา (รายการที่เลิกใช้แล้ว)
  • ÀÒÉÒ: ภาษาที่กำหนดไว้ใน RFC-5646
  • ฉบับ SW: เวอร์ชันซอฟต์แวร์
  • เป้าหมาย SW: สภาพแวดล้อมซอฟต์แวร์ที่ผลิตภัณฑ์ทำงาน
  • เป้าหมาย HW: สภาพแวดล้อมของฮาร์ดแวร์ที่ผลิตภัณฑ์ทำงานอยู่
  • อื่น ๆ : ข้อมูลซัพพลายเออร์หรือผลิตภัณฑ์

ตัวอย่าง CPE มีลักษณะดังนี้:

cpe:2.3:a:pivotal_software:spring_framework:3.0.0:*:*:*:*:*:*:*

สตริงหมายความว่า CPE เวอร์ชัน 2.3 อธิบายส่วนประกอบแอปพลิเคชันจากผู้ผลิต pivotal_software ด้วยชื่อเรื่อง spring_framework เวอร์ชัน 3.0.0 หากเราเปิดช่องโหว่ CVE-2014-0225 ใน NVD เราสามารถเห็นการกล่าวถึง CPE นี้ ปัญหาแรกที่คุณควรใส่ใจในทันทีคือ CVE ใน NVD ตาม CPE รายงานว่ามีปัญหาในเฟรมเวิร์ก ไม่ใช่ในองค์ประกอบเฉพาะ นั่นคือหากนักพัฒนาเชื่อมโยงกับเฟรมเวิร์กอย่างแน่นหนาและช่องโหว่ที่ระบุนั้นใช้ไม่ได้กับโมดูลที่นักพัฒนาใช้ ผู้เชี่ยวชาญด้านความปลอดภัยจะต้องแยกส่วน CVE นี้ออกและคิดเกี่ยวกับการอัปเดต

URL ยังถูกใช้โดยเครื่องมือ SCA รูปแบบ URL ของแพ็คเกจเป็นดังนี้:

scheme:type/namespace/name@version?qualifiers#subpath

  • โครงการ: จะมี 'pkg' เสมอเพื่อระบุว่านี่คือ URL ของแพ็คเกจ (จำเป็น)
  • ประเภทงาน: "ประเภท" ของแพ็คเกจ หรือ "โปรโตคอล" ของแพ็คเกจ เช่น maven, npm, nuget, gem, pypi เป็นต้น (รายการที่จำเป็น)
  • Namespace: คำนำหน้าชื่อบางอย่าง เช่น รหัสกลุ่ม Maven เจ้าของอิมเมจ Docker ผู้ใช้ GitHub หรือองค์กร เป็นทางเลือกและขึ้นอยู่กับประเภท
  • ชื่อ: ชื่อแพ็คเกจ (จำเป็น)
  • เวอร์ชัน: เวอร์ชันแพ็คเกจ
  • บ่น: ข้อมูลคุณสมบัติเพิ่มเติมสำหรับแพ็คเกจ เช่น OS, สถาปัตยกรรม, การแจกจ่าย ฯลฯ รายการทางเลือกและรายการเฉพาะประเภท
  • เส้นทางย่อย: เส้นทางเพิ่มเติมในแพ็คเกจที่สัมพันธ์กับรูทของแพ็คเกจ

ตัวอย่างเช่น:

pkg:golang/google.golang.org/genproto#googleapis/api/annotations
pkg:maven/org.apache.commons/[email protected]
pkg:pypi/[email protected]

ติดตามการพึ่งพา — แพลตฟอร์มเว็บในองค์กรที่ยอมรับรายการวัสดุสำเร็จรูป (BOM) ที่สร้างขึ้น ไซโคลนDX и เอสพีดีเอ็กซ์นั่นคือข้อกำหนดสำเร็จรูปเกี่ยวกับการขึ้นต่อกันที่มีอยู่ นี่คือไฟล์ XML ที่มีคำอธิบายของการอ้างอิง - ชื่อ, แฮช, URL ของแพ็คเกจ, ผู้เผยแพร่, ใบอนุญาต ถัดไป ติดตามการพึ่งพาจะแยกวิเคราะห์ BOM ดู CVE ที่พร้อมใช้งานสำหรับการอ้างอิงที่ระบุจากฐานข้อมูลช่องโหว่ (NVD, Sonatype OSS Index ...) จากนั้นสร้างกราฟ คำนวณเมตริก อัปเดตข้อมูลสถานะช่องโหว่ของส่วนประกอบอย่างสม่ำเสมอ .

ตัวอย่างลักษณะของ BOM ในรูปแบบ XML:

<?xml version="1.0" encoding="UTF-8"?>
<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79" version="1">
  <components>
    <component type="library">
      <publisher>Apache</publisher>
      <group>org.apache.tomcat</group>
      <name>tomcat-catalina</name>
      <version>9.0.14</version>
      <hashes>
        <hash alg="MD5">3942447fac867ae5cdb3229b658f4d48</hash>
        <hash alg="SHA-1">e6b1000b94e835ffd37f4c6dcbdad43f4b48a02a</hash>
        <hash alg="SHA-256">f498a8ff2dd007e29c2074f5e4b01a9a01775c3ff3aeaf6906ea503bc5791b7b</hash>
        <hash alg="SHA-512">e8f33e424f3f4ed6db76a482fde1a5298970e442c531729119e37991884bdffab4f9426b7ee11fccd074eeda0634d71697d6f88a460dce0ac8d627a29f7d1282</hash>
      </hashes>
      <licenses>
        <license>
          <id>Apache-2.0</id>
        </license>
      </licenses>
      <purl>pkg:maven/org.apache.tomcat/[email protected]</purl>
    </component>
      <!-- More components here -->
  </components>
</bom>

BOM สามารถใช้เป็นพารามิเตอร์อินพุตสำหรับการติดตามการพึ่งพา แต่ยังใช้สำหรับส่วนประกอบซอฟต์แวร์สินค้าคงคลังในห่วงโซ่อุปทาน เช่น สำหรับการจัดหาซอฟต์แวร์ให้กับลูกค้า ในปี 2014 มีการเสนอกฎหมายเพื่อพิจารณาในสหรัฐอเมริกาด้วยซ้ำ «พระราชบัญญัติการจัดการห่วงโซ่อุปทานไซเบอร์และความโปร่งใส พ.ศ. 2014»ซึ่งกล่าวว่าเมื่อซื้อซอฟต์แวร์ของรัฐใดๆ สถาบันต้องขอ BOM เพื่อป้องกันการใช้ส่วนประกอบที่มีช่องโหว่ แต่กฎหมายยังไม่มีผลบังคับใช้

กลับไปที่ SCA, Dependency Track มีการผสานรวมกับแพลตฟอร์มการแจ้งเตือนอย่าง Slack, ระบบจัดการช่องโหว่อย่าง Kenna Security นอกจากนี้ยังควรกล่าวถึงว่า Dependency Track ยังตรวจพบแพ็คเกจเวอร์ชันที่ล้าสมัยและให้ข้อมูลเกี่ยวกับใบอนุญาต (เนื่องจากการรองรับ SPDX)

หากเราพูดถึงคุณภาพของ SCA โดยเฉพาะ แสดงว่ามีความแตกต่างพื้นฐาน

ติดตามการขึ้นต่อกันไม่ยอมรับโครงการเป็นอินพุต แต่เป็น BOM ซึ่งหมายความว่าหากเราต้องการทดสอบโปรเจ็กต์ เราต้องสร้าง bom.xml ก่อน เช่น ด้วย CycloneDX ดังนั้น Dependency Track จึงขึ้นอยู่กับ CycloneDX โดยตรง ในขณะเดียวกันก็อนุญาตให้ปรับแต่งได้ ดังนั้นทีม OZON จึงเขียน โมดูล CycloneDX เพื่อสร้างไฟล์ BOM สำหรับโครงการ Golang สำหรับการสแกนเพิ่มเติมผ่าน Dependency Track

เน็กซัส ไอคิว เป็นโซลูชัน SCA เชิงพาณิชย์จาก Sonatype ซึ่งเป็นส่วนหนึ่งของระบบนิเวศ Sonatype ซึ่งรวมถึง Nexus Repository Manager ด้วย Nexus IQ สามารถรับอินพุตทั้งคลังข้อมูลสงคราม (สำหรับโครงการจาวา) ผ่านเว็บอินเทอร์เฟซหรือ API และ BOM หากองค์กรของคุณไม่มีเวลาเปลี่ยนจาก CycloneDX เป็นโซลูชันใหม่ ซึ่งแตกต่างจากโซลูชันโอเพ่นซอร์ส IQ ไม่เพียงอ้างถึง CP / PURL กับส่วนประกอบที่ระบุและช่องโหว่ที่เกี่ยวข้องในฐานข้อมูลเท่านั้น แต่ยังคำนึงถึงการวิจัยของตัวเองด้วย เช่น ชื่อของฟังก์ชันหรือคลาสที่มีช่องโหว่ กลไกของ IQ จะกล่าวถึงในภายหลังในการวิเคราะห์ผลลัพธ์

สรุปคุณสมบัติการทำงานบางอย่าง และพิจารณาภาษาที่รองรับสำหรับการวิเคราะห์:

Язык
เน็กซัส ไอคิว
ตรวจสอบการพึ่งพา
ติดตามการพึ่งพา

ชวา
+
+
+

C / C ++
+
+
-

C#
+
+
-

สุทธิ.
+
+
+

แอร์ลัง
-
-
+

จาวาสคริปต์ (NodeJS)
+
+
+

PHP
+
+
+

หลาม
+
+
+

ทับทิม
+
+
+

Perl
-
-
-

สกาล่า
+
+
+

วัตถุประสงค์ค
+
+
-

รวดเร็ว
+
+
-

R
+
-
-

Go
+
+
+

ฟังก์ชั่น

ฟังก์ชั่น
เน็กซัส ไอคิว
ตรวจสอบการพึ่งพา
ติดตามการพึ่งพา

ความสามารถในการตรวจสอบส่วนประกอบที่ใช้ในซอร์สโค้ดเพื่อความบริสุทธิ์ของใบอนุญาต
+
-
+

ความสามารถในการสแกนและวิเคราะห์ช่องโหว่และความสะอาดของใบอนุญาตสำหรับอิมเมจ Docker
+ บูรณาการกับแคลร์
-
-

ความสามารถในการกำหนดค่านโยบายความปลอดภัยเพื่อใช้ไลบรารีโอเพ่นซอร์ส
+
-
-

ความสามารถในการสแกนที่เก็บโอเพ่นซอร์สเพื่อหาส่วนประกอบที่มีช่องโหว่
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, ยำ, หางเสือ, นักเทียบท่า, CocoaPods, Git LFS
-
+ Hex, RubyGems, มาเวน, NPM, Nuget, Pypi

ความพร้อมของทีมวิจัยเฉพาะ
+
-
-

การทำงานในวงจรปิด
+
+
+

การใช้ฐานข้อมูลบุคคลที่สาม
+ Sonatype ฐานข้อมูลแบบปิด
+ Sonatype OSS ที่ปรึกษาสาธารณะของ NPM
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, รองรับฐานข้อมูลช่องโหว่ของตัวเอง

ความสามารถในการกรองส่วนประกอบโอเพ่นซอร์สเมื่อพยายามอัปโหลดไปยังลูปการพัฒนาตามนโยบายที่กำหนดค่า
+
-
-

คำแนะนำสำหรับการแก้ไขช่องโหว่ ความพร้อมของลิงก์ไปยังการแก้ไข
+
+- (ขึ้นอยู่กับคำอธิบายในฐานข้อมูลสาธารณะ)
+- (ขึ้นอยู่กับคำอธิบายในฐานข้อมูลสาธารณะ)

การจัดอันดับช่องโหว่ที่ค้นพบตามระดับวิกฤต
+
+
+

รูปแบบการเข้าถึงบทบาท
+
-
+

การสนับสนุน CLI
+
+
+- (เฉพาะ CycloneDX เท่านั้น)

คัดเลือก/จัดประเภทช่องโหว่ตามเกณฑ์ที่กำหนด
+
-
+

แดชบอร์ดตามสถานะแอปพลิเคชัน
+
-
+

การสร้างรายงานในรูปแบบ PDF
+
-
-

การสร้างรายงานในรูปแบบ JSONCSV
+
+
-

รองรับภาษารัสเซีย
-
-
-

โอกาสในการบูรณาการ

บูรณาการ
เน็กซัส ไอคิว
ตรวจสอบการพึ่งพา
ติดตามการพึ่งพา

การผสานรวมกับ LDAP/Active Directory
+
-
+

การรวมการบูรณาการอย่างต่อเนื่องของไม้ไผ่
+
-
-

การรวมเข้ากับระบบการรวมแบบต่อเนื่อง (การรวมแบบต่อเนื่อง) TeamCity
+
-
-

การผสานรวมกับระบบการรวมอย่างต่อเนื่อง (การรวมอย่างต่อเนื่อง) GitLab
+
+- (เป็นปลั๊กอินสำหรับ GitLab)
+

การบูรณาการเข้ากับระบบบูรณาการอย่างต่อเนื่อง (continous integration) Jenkins
+
+
+

ความพร้อมใช้งานของปลั๊กอิน IDE
+ IntelliJ, คราส, Visual Studio
-
-

รองรับการรวมแบบกำหนดเองผ่านบริการเว็บ (API) ของเครื่องมือ
+
-
+

ตรวจสอบการพึ่งพา

เริ่มแรก

เรียกใช้การตรวจสอบการพึ่งพาในแอปพลิเคชันที่มีช่องโหว่โดยเจตนา สวพ.FMXNUMX.

สำหรับสิ่งนี้เราใช้ ปลั๊กอิน Maven ตรวจสอบการพึ่งพา:

mvn org.owasp:dependency-check-maven:check

จะปรากฏในไดเร็กทอรีเป้าหมาย

DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

มาเปิดไฟล์กันเถอะ หลังจากสรุปจำนวนช่องโหว่ทั้งหมดแล้ว เราจะเห็นข้อมูลเกี่ยวกับช่องโหว่ที่มีระดับความรุนแรงและความเชื่อมั่นสูง ซึ่งระบุถึงแพ็คเกจ, CPE, จำนวนของ CVE

ข้อมูลรายละเอียดเพิ่มเติมดังต่อไปนี้ โดยเฉพาะอย่างยิ่งบนพื้นฐานของการตัดสินใจ (หลักฐาน) นั่นคือ BOM บางอย่าง

DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

ถัดมาคือ CPE, PURL และคำอธิบายของ CVE อย่างไรก็ตาม คำแนะนำสำหรับการแก้ไขไม่ได้แนบมาด้วยเนื่องจากไม่มีอยู่ในฐานข้อมูล NVD

DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

หากต้องการดูผลการสแกนอย่างเป็นระบบ คุณสามารถกำหนดค่า Nginx ด้วยการตั้งค่าขั้นต่ำ หรือส่งข้อบกพร่องที่ได้รับไปยังระบบจัดการข้อบกพร่องที่รองรับตัวเชื่อมต่อการตรวจสอบการพึ่งพา ตัวอย่างเช่น Defect Dojo

ติดตามการพึ่งพา

การติดตั้ง

การติดตามการพึ่งพาเป็นแพลตฟอร์มบนเว็บที่มีกราฟแสดงผล ดังนั้นจึงไม่มีปัญหาเฉียบพลันในการจัดเก็บข้อบกพร่องในโซลูชันของบุคคลที่สาม
มีสถานการณ์ที่รองรับสำหรับการติดตั้งดังต่อไปนี้: Docker, WAR, Executable WAR

เริ่มแรก

ไปที่ URL ของบริการที่กำลังทำงานอยู่ เราเข้าสู่ผู้ดูแลระบบ / ผู้ดูแลระบบเปลี่ยนข้อมูลเข้าสู่ระบบและรหัสผ่านหลังจากนั้นเราจะไปที่แดชบอร์ด สิ่งต่อไปที่เราจะทำคือสร้างโปรเจ็กต์สำหรับแอปพลิเคชันทดสอบ Java ใน หน้าแรก/โครงการ → สร้างโครงการ . ลองใช้ DVJA เป็นตัวอย่าง

DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

เนื่องจากการติดตามการพึ่งพาสามารถรับ BOM เป็นอินพุตเท่านั้น จึงต้องดึงข้อมูล BOM นี้ มาใช้กันเถอะ ปลั๊กอิน CycloneDX Maven:

mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom

เราได้รับ bom.xml และโหลดไฟล์ในโครงการที่สร้างขึ้น DVJA → การพึ่งพา → อัปโหลด BOM.

ไปที่การบริหาร → วิเคราะห์ เราเข้าใจว่าเราเปิดใช้งาน Internal Analyzer เท่านั้น ซึ่งรวมถึง NVD มาเชื่อมต่อ Sonatype OSS Index กันเถอะ

DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

ดังนั้นเราจึงได้ภาพต่อไปนี้สำหรับโครงการของเรา:

DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

นอกจากนี้ ในรายการคุณจะพบช่องโหว่หนึ่งรายการที่ใช้กับ Sonatype OSS:

DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

ความผิดหวังหลักคือการติดตามการพึ่งพาไม่ยอมรับรายงาน xml การตรวจสอบการพึ่งพาอีกต่อไป การผสานรวมการตรวจสอบการพึ่งพาเวอร์ชันล่าสุดที่รองรับคือ 1.0.0 - 4.0.2 ในขณะที่ฉันทดสอบ 5.3.2

ที่นี่ วีดีโอ (และ ที่นี่) เมื่อมันยังเป็นไปได้

เน็กซัส ไอคิว

เริ่มแรก

การติดตั้ง Nexus IQ มาจากไฟล์เก็บถาวรของซอฟต์แวร์ เอกสารแต่เราได้รวบรวมอิมเมจ Docker เพื่อจุดประสงค์นี้

หลังจากลงชื่อเข้าใช้คอนโซล คุณต้องสร้างองค์กรและแอปพลิเคชัน

DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

อย่างที่คุณเห็น การกำหนดค่าในกรณีของ IQ ค่อนข้างซับซ้อนกว่า เนื่องจากเราต้องสร้างนโยบายที่ใช้กับ "ระยะ" ต่างๆ (dev, build, stage, release) นี่เป็นสิ่งจำเป็นในการบล็อกส่วนประกอบที่มีช่องโหว่เมื่อเข้าใกล้ขั้นตอนการผลิต หรือบล็อกทันทีที่เข้าสู่ Nexus Repo เมื่อดาวน์โหลดโดยนักพัฒนา

เพื่อให้รู้สึกถึงความแตกต่างระหว่างโอเพ่นซอร์สและองค์กร ลองสแกนแบบเดียวกันผ่าน Nexus IQ ด้วยวิธีเดียวกัน ปลั๊กอิน Mavenโดยก่อนหน้านี้ได้สร้างแอปพลิเคชันทดสอบในอินเทอร์เฟซ NexusIQ 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>

ติดตาม URL ไปยังรายงานที่สร้างขึ้นในเว็บอินเตอร์เฟส IQ:

DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

คุณสามารถดูการละเมิดนโยบายทั้งหมดที่มีระดับความรุนแรงต่างกันได้ที่นี่ (ตั้งแต่ข้อมูลไปจนถึงความปลอดภัยที่สำคัญ) ตัวอักษร D ถัดจากส่วนประกอบหมายความว่าส่วนประกอบนั้นเป็น Direct Dependency และตัวอักษร T ถัดจากส่วนประกอบหมายความว่าส่วนประกอบนั้นเป็น Transitive Dependency นั่นคือเป็นการส่งผ่าน

โดยวิธีการรายงาน สถานะของรายงานความปลอดภัยโอเพ่นซอร์ส 2020 จาก Snyk รายงานว่ามากกว่า 70% ของช่องโหว่โอเพ่นซอร์สที่พบใน Node.js, Java และ Ruby อยู่ในการพึ่งพาสกรรมกริยา

หากเราเปิดการละเมิดนโยบาย Nexus IQ ข้อใดข้อหนึ่ง เราจะเห็นคำอธิบายของคอมโพเนนต์ รวมถึงกราฟเวอร์ชันซึ่งแสดงตำแหน่งของเวอร์ชันปัจจุบันบนกราฟเวลา ตลอดจนจุดที่ช่องโหว่หยุดทำงาน มีความเสี่ยง ความสูงของแท่งเทียนบนกราฟแสดงถึงความนิยมในการใช้องค์ประกอบนี้

DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

หากคุณไปที่ส่วนช่องโหว่และเปิด CVE คุณสามารถอ่านคำอธิบายของช่องโหว่นี้ คำแนะนำสำหรับการแก้ไข ตลอดจนสาเหตุที่องค์ประกอบนี้ถูกละเมิด นั่นคือ การปรากฏตัวของคลาส DiskFileitem.class.

DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

เรามาสรุปเฉพาะส่วนประกอบ Java ของบุคคลที่สามโดยเอาส่วนประกอบ js ออก ในวงเล็บ เราระบุจำนวนช่องโหว่ที่พบนอก NVD

IQ ของ Nexus ทั้งหมด:

  • การอ้างอิงที่สแกน: 62
  • การพึ่งพาที่มีช่องโหว่: 16
  • พบช่องโหว่: 42 (8 sonatype db)

การตรวจสอบการพึ่งพาทั้งหมด:

  • การอ้างอิงที่สแกน: 47
  • การพึ่งพาที่มีช่องโหว่: 13
  • พบช่องโหว่: 91 (14 sonatype oss)

ติดตามการพึ่งพาทั้งหมด:

  • การอ้างอิงที่สแกน: 59
  • การพึ่งพาที่มีช่องโหว่: 10
  • พบช่องโหว่: 51 (1 sonatype oss)

ขั้นตอนต่อไปคือการวิเคราะห์ผลลัพธ์และค้นหาว่าช่องโหว่ใดในช่องโหว่เหล่านี้เป็นข้อบกพร่องที่แท้จริงและเป็นผลบวกที่ผิดพลาด

ข้อจำกัดความรับผิดชอบ

บทวิจารณ์นี้ไม่ใช่ความจริงที่เถียงไม่ได้ ผู้เขียนไม่ได้มีเป้าหมายที่จะแยกเครื่องดนตรีออกจากพื้นหลังของผู้อื่น จุดประสงค์ของการตรวจสอบคือเพื่อแสดงวิธีการทำงานของเครื่องมือ SCA และวิธีการตรวจสอบผลลัพธ์

เปรียบเทียบผลลัพธ์

ข้อกำหนดและเงื่อนไข:

ผลบวกลวงสำหรับช่องโหว่ของส่วนประกอบบุคคลที่สามคือ:

  • CVE ไม่ตรงกับส่วนประกอบที่ระบุ
  • ตัวอย่างเช่น หากพบช่องโหว่ใน struts2 framework และเครื่องมือชี้ไปที่ส่วนประกอบของ struts-tiles framework ที่ไม่ได้รับผลกระทบจากช่องโหว่นี้ แสดงว่าเป็นผลบวกลวง
  • CVE ไม่ตรงกับเวอร์ชันคอมโพเนนต์ที่ตรวจพบ
  • ตัวอย่างเช่น ช่องโหว่เชื่อมโยงกับเวอร์ชัน python > 3.5 และเครื่องมือทำเครื่องหมายเวอร์ชัน 2.7 ว่ามีช่องโหว่ ซึ่งเป็นผลบวกที่ผิดพลาด เนื่องจากความจริงแล้วช่องโหว่นี้ใช้กับสาขาผลิตภัณฑ์ 3.x เท่านั้น
  • การทำสำเนา CVE
  • ตัวอย่างเช่น หาก SCA ชี้ไปที่ CVE ที่อนุญาตให้นำ RCE ไปใช้งาน SCA จะชี้ไปที่ CVE เดียวกันกับที่ใช้กับผลิตภัณฑ์ Cisco ที่อยู่ภายใต้ RCE นั้น ในกรณีนี้จะเป็นผลบวกลวง
  • ตัวอย่างเช่น พบ CVE ในคอมโพเนนต์ spring-web หลังจากนั้น SCA จะชี้ไปที่ CVE เดียวกันในคอมโพเนนต์อื่นๆ ของ Spring Framework ในขณะที่ CVE ไม่มีส่วนเกี่ยวข้องกับคอมโพเนนต์อื่นๆ ในกรณีนี้จะเป็นผลบวกลวง

วัตถุประสงค์ของการวิจัยคือโครงการโอเพ่นซอร์ส DVJA การศึกษาเกี่ยวข้องกับส่วนประกอบของจาวาเท่านั้น (ไม่มี js)

ผลสรุป

มาดูผลลัพธ์ของการตรวจสอบช่องโหว่ที่ระบุด้วยตนเอง สามารถดูรายงานฉบับเต็มสำหรับแต่ละ CVE ได้ในภาคผนวก

ผลสรุปสำหรับช่องโหว่ทั้งหมด:

พารามิเตอร์
เน็กซัส ไอคิว
ตรวจสอบการพึ่งพา
ติดตามการพึ่งพา

ระบุช่องโหว่ทั้งหมด
42
91
51

ระบุช่องโหว่ไม่ถูกต้อง (ผลบวกลวง)
2 (4.76%)
62 (68,13%)
29 (56.86%)

ไม่พบช่องโหว่ที่เกี่ยวข้อง (ลบเท็จ)
10
20
27

ผลสรุปตามองค์ประกอบ:

พารามิเตอร์
เน็กซัส ไอคิว
ตรวจสอบการพึ่งพา
ติดตามการพึ่งพา

เปิดเผยส่วนประกอบทั้งหมด
62
47
59

ส่วนประกอบที่เปราะบางทั้งหมด
16
13
10

มีการระบุส่วนประกอบที่มีช่องโหว่อย่างไม่ถูกต้อง (ผลบวกลวง)
1
5
0

มีการระบุส่วนประกอบที่มีช่องโหว่อย่างไม่ถูกต้อง (ผลบวกลวง)
0
6
6

มาสร้างกราฟภาพเพื่อประเมินอัตราส่วนของผลบวกปลอมและผลลบลวงต่อจำนวนช่องโหว่ทั้งหมด ส่วนประกอบถูกทำเครื่องหมายในแนวนอน และช่องโหว่ที่ระบุในนั้นจะถูกทำเครื่องหมายในแนวตั้ง

DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

ในการเปรียบเทียบ การศึกษาที่คล้ายกันนี้ดำเนินการโดยทีม Sonatype ที่ทดสอบโครงการที่มีส่วนประกอบ 1531 ชิ้นโดยใช้การตรวจสอบการพึ่งพา OWASP อย่างที่เราเห็น อัตราส่วนของสัญญาณรบกวนต่อการตอบสนองที่ถูกต้องนั้นสอดคล้องกับผลลัพธ์ของเรา

DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง
ที่มา: www.sonatype.com/why-precision-matters-ebook

มาดู CVE บางส่วนจากผลการสแกนของเราเพื่อทำความเข้าใจสาเหตุของผลลัพธ์ดังกล่าว

ขึ้น

№ 1

ก่อนอื่นมาวิเคราะห์ประเด็นที่น่าสนใจของ Sonatype Nexus IQ กันก่อน

Nexus IQ ชี้ให้เห็นปัญหาการดีซีเรียลไลเซชันกับความสามารถในการ RCE หลายครั้งใน Spring Framework CVE-2016-1000027 ใน spring-web:3.0.5 เป็นครั้งแรก และ CVE-2011-2894 ใน spring-context:3.0.5 และ spring-core:3.0.5 ในตอนแรก ดูเหมือนว่ามีช่องโหว่ซ้ำซ้อนใน CVE หลายรายการ สำหรับ หากคุณดูที่ CVE-2016-1000027 และ CVE-2011-2894 ในฐานข้อมูล NVD ดูเหมือนว่าทุกอย่างชัดเจน

ส่วนประกอบ
ช่องโหว่

สปริงเว็บ:3.0.5
CVE-2016-1000027

สปริงบริบท:3.0.5
CVE-2011-2894

แกนสปริง:3.0.5
CVE-2011-2894

ลักษณะ CVE-2011-2894 จาก nvd:
DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

ลักษณะ CVE-2016-1000027 จาก nvd:
DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

CVE-2011-2894 เป็นที่รู้จักกันดีในตัวเอง ในรายงาน แหล่งที่มาสีขาวสำหรับปี 2011 CVE นี้ได้รับการยอมรับว่าเป็นหนึ่งในสิ่งที่พบได้บ่อยที่สุด โดยหลักการแล้ว คำอธิบายสำหรับ CVE-2016-100027 มีน้อยใน NVD และดูเหมือนว่าใช้ได้กับ Spring Framework 4.1.4 เท่านั้น ลองมาดูที่ การอ้างอิง และที่นี่จะชัดเจนมากหรือน้อย จาก บทความที่ปฏิบัติได้ เราเข้าใจดีว่านอกเหนือจากความเปราะบางใน RemoteInvocationSerializingExporter ใน CVE-2011-2894 พบช่องโหว่ใน HttpInvokerServiceExporter. นี่คือสิ่งที่ Nexus IQ บอกเรา:

DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

อย่างไรก็ตาม ไม่มีอะไรแบบนี้ใน NVD ซึ่งเป็นสาเหตุที่การตรวจสอบการพึ่งพาและการติดตามการพึ่งพาได้รับค่าลบที่ผิดพลาด

นอกจากนี้ยังสามารถเข้าใจได้จากคำอธิบายของ CVE-2011-2894 ว่าช่องโหว่นั้นมีอยู่ในทั้ง spring-context:3.0.5 และ spring-core:3.0.5 การยืนยันสามารถพบได้ในบทความจากผู้ที่พบช่องโหว่นี้

№ 2

ส่วนประกอบ
ช่องโหว่
ผล

สตรัท 2 คอร์:2.3.30
CVE-2016-4003
FALSE

หากเราศึกษาช่องโหว่ CVE-2016-4003 เราจะเข้าใจว่าได้รับการแก้ไขในเวอร์ชัน 2.3.28 อย่างไรก็ตาม Nexus IQ แจ้งให้เราทราบ มีหมายเหตุในคำอธิบายของช่องโหว่:

DevSecOps: หลักการทำงานและการเปรียบเทียบ SCA ส่วนหนึ่ง

นั่นคือช่องโหว่นี้มีอยู่เฉพาะเมื่อใช้ร่วมกับ JRE เวอร์ชันที่ล้าสมัยเท่านั้น ซึ่งพวกเขาตัดสินใจเตือนเรา อย่างไรก็ตาม เราถือว่าเป็น False Positive แม้ว่าจะไม่ใช่สิ่งที่น่ากลัวที่สุดก็ตาม

หมายเลข 3

ส่วนประกอบ
ช่องโหว่
ผล

xwork-คอร์:2.3.30
CVE-2017-9804
TRUE

xwork-คอร์:2.3.30
CVE-2017-7672
FALSE

หากเราดูคำอธิบายสำหรับ CVE-2017-9804 และ CVE-2017-7672 เราจะเข้าใจว่าปัญหาอยู่ใน URLValidator classโดยมี CVE-2017-9804 มาจาก CVE-2017-7672 การมีอยู่ของช่องโหว่ที่สองนั้นไม่มีเพย์โหลดใด ๆ เว้นแต่ว่าความรุนแรงของมันจะเพิ่มขึ้นเป็นระดับสูง ดังนั้นนี่จึงถือเป็นสัญญาณรบกวนที่ไม่จำเป็น

โดยรวมแล้ว ไม่พบผลบวกปลอมอื่นๆ สำหรับ Nexus IQ

№ 4

มีบางสิ่งที่ทำให้ IQ โดดเด่นกว่าโซลูชั่นอื่นๆ

ส่วนประกอบ
ช่องโหว่
ผล

สปริงเว็บ:3.0.5
CVE-2020-5398
TRUE

CVE ใน NVD บอกว่าใช้ได้กับเวอร์ชัน 5.2.x ถึง 5.2.3, 5.1.x ถึง 5.1.13 และเวอร์ชัน 5.0.x ถึง 5.0.16 เท่านั้น อย่างไรก็ตาม หากเราดูคำอธิบาย CVE ใน Nexus IQ จากนั้นเราจะเห็นสิ่งต่อไปนี้:
ประกาศเกี่ยวกับการเบี่ยงเบนของคำแนะนำ: ทีมวิจัยด้านความปลอดภัยของ Sonatype ค้นพบว่าช่องโหว่นี้ถูกนำมาใช้ในเวอร์ชัน 3.0.2.RELEASE ไม่ใช่ 5.0.x ตามที่ระบุไว้ในคำแนะนำ

ตามด้วย PoC สำหรับช่องโหว่นี้ ซึ่งระบุว่ามีอยู่ในเวอร์ชัน 3.0.5

ค่าลบที่เป็นเท็จจะถูกส่งไปยังการตรวจสอบการพึ่งพาและการติดตามการพึ่งพา

№ 5

มาดูผลบวกลวงสำหรับการตรวจสอบการพึ่งพาและการติดตามการพึ่งพา

การตรวจสอบการพึ่งพานั้นโดดเด่นเป็นพิเศษเนื่องจากสะท้อนถึง CVE เหล่านั้นที่ใช้กับเฟรมเวิร์กทั้งหมดใน NVD กับส่วนประกอบเหล่านั้นที่ CVE เหล่านี้ไม่ได้ใช้ สิ่งนี้ใช้กับ CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182 ซึ่งการตรวจสอบการพึ่งพา "ยึด ” ถึง struts-taglib:1.3.8 และ struts-tiles-1.3.8 ส่วนประกอบเหล่านี้ไม่เกี่ยวข้องกับสิ่งที่อธิบายไว้ใน CVE - การประมวลผลคำขอ การตรวจสอบเพจ และอื่นๆ นี่เป็นเพราะความจริงที่ว่ามีเพียงเฟรมเวิร์กเท่านั้นที่เหมือนกันระหว่าง CVE และคอมโพเนนต์เหล่านี้ ซึ่งเป็นสาเหตุที่การตรวจสอบการพึ่งพาถือว่าสิ่งนี้เป็นช่องโหว่

สถานการณ์เดียวกันกับ spring-tx:3.0.5 และสถานการณ์ที่คล้ายกันกับ struts-core:1.3.8 สำหรับ struts-core การตรวจสอบการพึ่งพาและการติดตามการพึ่งพาพบช่องโหว่จำนวนมากที่ใช้กับ struts2-core ซึ่งโดยพื้นฐานแล้วเป็นเฟรมเวิร์กแยกต่างหาก ในกรณีนี้ Nexus IQ เข้าใจภาพได้อย่างถูกต้อง และใน CVE ที่ออกระบุว่า struts-core หมดอายุการใช้งานแล้ว และจำเป็นต้องเปลี่ยนไปใช้ struts2-core

№ 6

ในบางสถานการณ์ การจัดการข้อผิดพลาดในการตรวจสอบการพึ่งพาที่ชัดเจนและการติดตามการพึ่งพานั้นไม่ยุติธรรม โดยเฉพาะ CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225 ซึ่งเป็น Dependency Check และ Dependency Track อ้างอิงถึง spring-core:3.0.5 จริงๆ แล้วอ้างอิงถึง spring-web:3.0.5 ในเวลาเดียวกัน Nexus IQ พบ CVE บางส่วนเหล่านี้ อย่างไรก็ตาม IQ ระบุ CVE เหล่านี้ไปยังส่วนประกอบอื่นได้อย่างถูกต้อง จากข้อเท็จจริงที่ว่าไม่พบช่องโหว่เหล่านี้ในสปริงคอร์ จึงไม่สามารถโต้แย้งได้ว่าช่องโหว่เหล่านี้ไม่ได้อยู่ในกรอบการทำงานโดยหลักการ และเครื่องมือโอเพ่นซอร์สก็ชี้ให้เห็นช่องโหว่เหล่านี้อย่างถูกต้อง (พวกเขาพลาดเพียงเล็กน้อย)

ผลการวิจัย

อย่างที่เราเห็น การพิจารณาความน่าเชื่อถือของช่องโหว่ที่ระบุโดยการตรวจสอบด้วยตนเองไม่ได้ให้ผลลัพธ์ที่ชัดเจน ซึ่งทำให้เกิดประเด็นที่ขัดแย้ง ผลลัพธ์คือโซลูชัน Nexus IQ มีอัตราผลบวกปลอมต่ำที่สุดและมีความแม่นยำสูงสุด

ประการแรก นี่เป็นเพราะทีม Sonatype ได้ขยายคำอธิบายสำหรับช่องโหว่ CVE แต่ละรายการจาก NVD ในฐานข้อมูล โดยระบุถึงระดับหรือฟังก์ชันของช่องโหว่สำหรับส่วนประกอบเวอร์ชันใดเวอร์ชันหนึ่ง โดยดำเนินการเพิ่มเติม การวิจัย (เช่น โดยการตรวจสอบช่องโหว่ในซอฟต์แวร์เวอร์ชันเก่า)

อิทธิพลที่สำคัญต่อผลลัพธ์ยังแสดงโดยช่องโหว่ที่ไม่ได้รวมอยู่ใน NVD แต่อย่างไรก็ตามมีอยู่ในฐานข้อมูล Sonatype ที่ระบุว่า SONATYPE ตามรายงาน สถานะของช่องโหว่ความปลอดภัยโอเพ่นซอร์ส 2020 45% ของช่องโหว่โอเพนซอร์สที่ค้นพบไม่ได้รายงานไปยัง NVD ตามฐานข้อมูลของ WhiteSource มีเพียง 29% ของช่องโหว่โอเพ่นซอร์สทั้งหมดที่ถูกยื่นนอก NVD ลงเอยด้วยการเผยแพร่ที่นั่น ซึ่งเป็นเหตุผลว่าทำไมการมองหาช่องโหว่ที่อื่นจึงเป็นเรื่องสำคัญ

เป็นผลให้การตรวจสอบการพึ่งพาสร้างสัญญาณรบกวนจำนวนมาก ขาดองค์ประกอบที่มีช่องโหว่บางส่วน การติดตามการพึ่งพาทำให้เกิดสัญญาณรบกวนน้อยลงและตรวจจับส่วนประกอบจำนวนมาก ซึ่งไม่ทำร้ายสายตาในเว็บอินเตอร์เฟส

อย่างไรก็ตาม การปฏิบัติแสดงให้เห็นว่ามันเป็นโอเพ่นซอร์สที่ควรจะเป็นก้าวแรกสู่ DevSecOps ที่เติบโตเต็มที่ สิ่งแรกที่ต้องคำนึงถึงในการฝัง SCA ในการพัฒนาคือกระบวนการ กล่าวคือ การคิดร่วมกับฝ่ายบริหารและแผนกที่เกี่ยวข้องว่ากระบวนการในอุดมคติควรมีลักษณะอย่างไรในองค์กรของคุณ อาจกลายเป็นว่าสำหรับองค์กรของคุณ ในตอนแรก การตรวจสอบการพึ่งพาหรือการติดตามการพึ่งพาจะครอบคลุมความต้องการทางธุรกิจทั้งหมด และโซลูชันสำหรับองค์กรจะเป็นความต่อเนื่องที่สมเหตุสมผลเนื่องจากความซับซ้อนที่เพิ่มขึ้นของแอปพลิเคชันที่กำลังพัฒนา

ภาคผนวก A. ผลลัพธ์สำหรับส่วนประกอบ
คำอธิบาย:

  • สูง - ช่องโหว่ระดับสูงและวิกฤตในส่วนประกอบ
  • ปานกลาง — ช่องโหว่ที่มีความรุนแรงปานกลางในคอมโพเนนต์
  • TRUE - ปัญหาเชิงบวกที่แท้จริง
  • FALSE - ปัญหาบวกเท็จ

ส่วนประกอบ
เน็กซัส ไอคิว
ตรวจสอบการพึ่งพา
ติดตามการพึ่งพา
ผล

dom4j: 1.6.1
จุดสูง
จุดสูง
จุดสูง
TRUE

log4j-คอร์: 2.3
จุดสูง
จุดสูง
จุดสูง
TRUE

log4j: 1.2.14
จุดสูง
จุดสูง
-
TRUE

ของสะสมทั่วไป:3.1
จุดสูง
จุดสูง
จุดสูง
TRUE

Commons-fileupload:1.3.2
จุดสูง
จุดสูง
จุดสูง
TRUE

Commons-beanutils:1.7.0
จุดสูง
จุดสูง
จุดสูง
TRUE

ตัวแปลงสัญญาณทั่วไป:1:10
กลาง
-
-
TRUE

mysql-ตัวเชื่อมต่อ-java:5.1.42
จุดสูง
จุดสูง
จุดสูง
TRUE

สปริงนิพจน์:3.0.5
จุดสูง
ไม่พบส่วนประกอบ

TRUE

สปริงเว็บ:3.0.5
จุดสูง
ไม่พบส่วนประกอบ
จุดสูง
TRUE

สปริงบริบท:3.0.5
กลาง
ไม่พบส่วนประกอบ
-
TRUE

แกนสปริง:3.0.5
กลาง
จุดสูง
จุดสูง
TRUE

struts2-config-เบราว์เซอร์ปลั๊กอิน:2.3.30
กลาง
-
-
TRUE

สปริง-tx:3.0.5
-
จุดสูง
-
FALSE

สตรัทคอร์:1.3.8
จุดสูง
จุดสูง
จุดสูง
TRUE

xwork-core: 2.3.30
จุดสูง
-
-
TRUE

สตรัท 2 คอร์: 2.3.30
จุดสูง
จุดสูง
จุดสูง
TRUE

สตรัท-taglib:1.3.8
-
จุดสูง
-
FALSE

เสากระเบื้อง-1.3.8
-
จุดสูง
-
FALSE

ภาคผนวก B. ผลลัพธ์ของช่องโหว่
คำอธิบาย:

  • สูง - ช่องโหว่ระดับสูงและวิกฤตในส่วนประกอบ
  • ปานกลาง — ช่องโหว่ที่มีความรุนแรงปานกลางในคอมโพเนนต์
  • TRUE - ปัญหาเชิงบวกที่แท้จริง
  • FALSE - ปัญหาบวกเท็จ

ส่วนประกอบ
เน็กซัส ไอคิว
ตรวจสอบการพึ่งพา
ติดตามการพึ่งพา
ความรุนแรง
ผล
ความเห็น

dom4j: 1.6.1
CVE-2018-1000632
CVE-2018-1000632
CVE-2018-1000632
จุดสูง
TRUE

CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
จุดสูง
TRUE

log4j-คอร์: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
จุดสูง
TRUE

CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
ต่ำ
TRUE

log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571
-
จุดสูง
TRUE

-
CVE-2020-9488
-
ต่ำ
TRUE

โซนาไทป์-2010-0053
-
-
จุดสูง
TRUE

ของสะสมทั่วไป:3.1
-
CVE-2015-6420
CVE-2015-6420
จุดสูง
FALSE
RCE ซ้ำ (OSSINDEX)

-
CVE-2017-15708
CVE-2017-15708
จุดสูง
FALSE
RCE ซ้ำ (OSSINDEX)

โซนาไทป์-2015-0002
RCE (ออสซินเด็กซ์)
RCE(ออสซินเด็กซ์)
จุดสูง
TRUE

Commons-fileupload:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
จุดสูง
TRUE

โซนาไทป์-2014-0173
-
-
กลาง
TRUE

Commons-beanutils:1.7.0
CVE-2014-0114
CVE-2014-0114
CVE-2014-0114
จุดสูง
TRUE

-
CVE-2019-10086
CVE-2019-10086
จุดสูง
FALSE
ช่องโหว่ใช้ได้กับเวอร์ชัน 1.9.2+ เท่านั้น

ตัวแปลงสัญญาณทั่วไป:1:10
โซนาไทป์-2012-0050
-
-
กลาง
TRUE

mysql-ตัวเชื่อมต่อ-java:5.1.42
CVE-2018-3258
CVE-2018-3258
CVE-2018-3258
จุดสูง
TRUE

CVE-2019-2692
CVE-2019-2692
-
กลาง
TRUE

-
CVE-2020-2875
-
กลาง
FALSE
ช่องโหว่เดียวกันกับ CVE-2019-2692 แต่ด้วยการเพิ่ม "การโจมตีอาจส่งผลกระทบต่อผลิตภัณฑ์เพิ่มเติมอย่างมีนัยสำคัญ"

-
CVE-2017-15945
-
จุดสูง
FALSE
ใช้ไม่ได้กับ mysql-connector-java

-
CVE-2020-2933
-
ต่ำ
FALSE
ซ้ำกับ CVE-2020-2934

CVE-2020-2934
CVE-2020-2934
-
กลาง
TRUE

สปริงนิพจน์:3.0.5
CVE-2018-1270
ไม่พบส่วนประกอบ
-
จุดสูง
TRUE

CVE-2018-1257
-
-
กลาง
TRUE

สปริงเว็บ:3.0.5
CVE-2016-1000027
ไม่พบส่วนประกอบ
-
จุดสูง
TRUE

CVE-2014-0225
-
CVE-2014-0225
จุดสูง
TRUE

CVE-2011-2730
-
-
จุดสูง
TRUE

-
-
CVE-2013-4152
กลาง
TRUE

CVE-2018-1272
-
-
จุดสูง
TRUE

CVE-2020-5398
-
-
จุดสูง
TRUE
กรณีที่เข้าข้าง IQ: "ทีมวิจัยความปลอดภัยของ Sonatype ค้นพบว่าช่องโหว่นี้ถูกนำมาใช้ในเวอร์ชัน 3.0.2.RELEASE ไม่ใช่ 5.0.x ตามที่ระบุไว้ในคำแนะนำ"

CVE-2013-6429
-
-
กลาง
TRUE

CVE-2014-0054
-
CVE-2014-0054
กลาง
TRUE

CVE-2013-6430
-
-
กลาง
TRUE

สปริงบริบท:3.0.5
CVE-2011-2894
ไม่พบส่วนประกอบ
-
กลาง
TRUE

แกนสปริง:3.0.5
-
CVE-2011-2730
CVE-2011-2730
จุดสูง
TRUE

CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
กลาง
TRUE

-
-
CVE-2013-4152
กลาง
FALSE
ช่องโหว่เดียวกันซ้ำใน spring-web

-
CVE-2013-4152
-
กลาง
FALSE
ช่องโหว่นี้เกี่ยวข้องกับส่วนประกอบของสปริงเว็บ

-
CVE-2013-6429
CVE-2013-6429
กลาง
FALSE
ช่องโหว่นี้เกี่ยวข้องกับส่วนประกอบของสปริงเว็บ

-
CVE-2013-6430
-
กลาง
FALSE
ช่องโหว่นี้เกี่ยวข้องกับส่วนประกอบของสปริงเว็บ

-
CVE-2013-7315
CVE-2013-7315
กลาง
FALSE
แยกจาก CVE-2013-4152 + ช่องโหว่นี้เกี่ยวข้องกับส่วนประกอบของสปริงเว็บ

-
CVE-2014-0054
CVE-2014-0054
กลาง
FALSE
ช่องโหว่นี้เกี่ยวข้องกับส่วนประกอบของสปริงเว็บ

-
CVE-2014-0225
-
จุดสูง
FALSE
ช่องโหว่นี้เกี่ยวข้องกับส่วนประกอบของสปริงเว็บ

-
-
CVE-2014-0225
จุดสูง
FALSE
ช่องโหว่เดียวกันซ้ำใน spring-web

-
CVE-2014-1904
CVE-2014-1904
กลาง
FALSE
ช่องโหว่นี้เกี่ยวข้องกับส่วนประกอบ spring-web-mvc

-
CVE-2014-3625
CVE-2014-3625
กลาง
FALSE
ช่องโหว่นี้เกี่ยวข้องกับส่วนประกอบ spring-web-mvc

-
CVE-2016-9878
CVE-2016-9878
จุดสูง
FALSE
ช่องโหว่นี้เกี่ยวข้องกับส่วนประกอบ spring-web-mvc

-
CVE-2018-1270
CVE-2018-1270
จุดสูง
FALSE
สำหรับสปริงนิพจน์ / ข้อความสปริง

-
CVE-2018-1271
CVE-2018-1271
กลาง
FALSE
ช่องโหว่นี้เกี่ยวข้องกับส่วนประกอบ spring-web-mvc

-
CVE-2018-1272
CVE-2018-1272
จุดสูง
TRUE

CVE-2014-3578
CVE-2014-3578(OSSINDEX)
CVE-2014-3578
กลาง
TRUE

โซนาไทป์-2015-0327
-
-
ต่ำ
TRUE

struts2-config-เบราว์เซอร์ปลั๊กอิน:2.3.30
โซนาไทป์-2016-0104
-
-
กลาง
TRUE

สปริง-tx:3.0.5
-
CVE-2011-2730
-
จุดสูง
FALSE
ช่องโหว่นี้ใช้ไม่ได้กับ spring-tx

-
CVE-2011-2894
-
จุดสูง
FALSE
ช่องโหว่นี้ใช้ไม่ได้กับ spring-tx

-
CVE-2013-4152
-
กลาง
FALSE
ช่องโหว่นี้ใช้ไม่ได้กับ spring-tx

-
CVE-2013-6429
-
กลาง
FALSE
ช่องโหว่นี้ใช้ไม่ได้กับ spring-tx

-
CVE-2013-6430
-
กลาง
FALSE
ช่องโหว่นี้ใช้ไม่ได้กับ spring-tx

-
CVE-2013-7315
-
กลาง
FALSE
ช่องโหว่นี้ใช้ไม่ได้กับ spring-tx

-
CVE-2014-0054
-
กลาง
FALSE
ช่องโหว่นี้ใช้ไม่ได้กับ spring-tx

-
CVE-2014-0225
-
จุดสูง
FALSE
ช่องโหว่นี้ใช้ไม่ได้กับ spring-tx

-
CVE-2014-1904
-
กลาง
FALSE
ช่องโหว่นี้ใช้ไม่ได้กับ spring-tx

-
CVE-2014-3625
-
กลาง
FALSE
ช่องโหว่นี้ใช้ไม่ได้กับ spring-tx

-
CVE-2016-9878
-
จุดสูง
FALSE
ช่องโหว่นี้ใช้ไม่ได้กับ spring-tx

-
CVE-2018-1270
-
จุดสูง
FALSE
ช่องโหว่นี้ใช้ไม่ได้กับ spring-tx

-
CVE-2018-1271
-
กลาง
FALSE
ช่องโหว่นี้ใช้ไม่ได้กับ spring-tx

-
CVE-2018-1272
-
กลาง
FALSE
ช่องโหว่นี้ใช้ไม่ได้กับ spring-tx

สตรัทคอร์:1.3.8
-
CVE-2011-5057(OSSINDEX)

กลาง
ฟาสเซิล
ช่องโหว่ต่อ Struts 2

-
CVE-2012-0391(OSSINDEX)
CVE-2012-0391
จุดสูง
FALSE
ช่องโหว่ต่อ Struts 2

-
CVE-2014-0094(OSSINDEX)
CVE-2014-0094
กลาง
FALSE
ช่องโหว่ต่อ Struts 2

-
CVE-2014-0113(OSSINDEX)
CVE-2014-0113
จุดสูง
FALSE
ช่องโหว่ต่อ Struts 2

CVE-2016-1182
3VE-2016-1182
-
จุดสูง
TRUE

-
-
CVE-2011-5057
กลาง
FALSE
ช่องโหว่ต่อ Struts 2

-
CVE-2012-0392(OSSINDEX)
CVE-2012-0392
จุดสูง
FALSE
ช่องโหว่ต่อ Struts 2

-
CVE-2012-0393(OSSINDEX)
CVE-2012-0393
กลาง
FALSE
ช่องโหว่ต่อ Struts 2

CVE-2015-0899
CVE-2015-0899
-
จุดสูง
TRUE

-
CVE-2012-0394
CVE-2012-0394
กลาง
FALSE
ช่องโหว่ต่อ Struts 2

-
CVE-2012-0838(OSSINDEX)
CVE-2012-0838
จุดสูง
FALSE
ช่องโหว่ต่อ Struts 2

-
CVE-2013-1965(OSSINDEX)
CVE-2013-1965
จุดสูง
FALSE
ช่องโหว่ต่อ Struts 2

-
CVE-2013-1966(OSSINDEX)
CVE-2013-1966
จุดสูง
ฟาสเซิล
ช่องโหว่ต่อ Struts 2

-
CVE-2013-2115
CVE-2013-2115
จุดสูง
ฟาสเซิล
ช่องโหว่ต่อ Struts 2

-
CVE-2013-2134(OSSINDEX)
CVE-2013-2134
จุดสูง
ฟาสเซิล
ช่องโหว่ต่อ Struts 2

-
CVE-2013-2135(OSSINDEX)
CVE-2013-2135
จุดสูง
ฟาสเซิล
ช่องโหว่ต่อ Struts 2

CVE-2014-0114
CVE-2014-0114
-
จุดสูง
TRUE

-
CVE-2015-2992
CVE-2015-2992
กลาง
FALSE
ช่องโหว่ต่อ Struts 2

-
CVE-2016-0785(OSSINDEX)
CVE-2016-0785
จุดสูง
FALSE
ช่องโหว่ต่อ Struts 2

CVE-2016-1181
CVE-2016-1181
-
จุดสูง
TRUE

-
CVE-2016-4003(OSSINDEX)
CVE-2016-4003
จุดสูง
FALSE
ช่องโหว่ต่อ Struts 2

xwork-คอร์:2.3.30
CVE-2017-9804
-
-
จุดสูง
TRUE

โซนาไทป์-2017-0173
-
-
จุดสูง
TRUE

CVE-2017-7672
-
-
จุดสูง
FALSE
เพิ่มเป็นสองเท่าของ CVE-2017-9804

โซนาไทป์-2016-0127
-
-
จุดสูง
TRUE

สตรัท 2 คอร์:2.3.30
-
CVE-2016-6795
CVE-2016-6795
จุดสูง
TRUE

-
CVE-2017-9787
CVE-2017-9787
จุดสูง
TRUE

-
CVE-2017-9791
CVE-2017-9791
จุดสูง
TRUE

-
CVE-2017-9793
-
จุดสูง
FALSE
ซ้ำกับ CVE-2018-1327

-
CVE-2017-9804
-
จุดสูง
TRUE

-
CVE-2017-9805
CVE-2017-9805
จุดสูง
TRUE

CVE-2016-4003
-
-
กลาง
FALSE
ใช้กับ Apache Struts 2.x จนถึง 2.3.28 ซึ่งเป็นเวอร์ชัน 2.3.30 อย่างไรก็ตาม ตามคำอธิบาย CVE ใช้ได้กับ Struts 2 ทุกเวอร์ชันตราบเท่าที่ใช้ JRE 1.7 และต่ำกว่า เห็นได้ชัดว่าพวกเขาตัดสินใจต่อประกันให้เราที่นี่ แต่ดูเหมือน FALSE มากกว่า

-
CVE-2018-1327
CVE-2018-1327
จุดสูง
TRUE

CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
จุดสูง
TRUE
ช่องโหว่เดียวกันกับที่ผู้โจมตีโจมตีใน Equifax ในปี 2017

CVE-2017-12611
CVE-2017-12611
-
จุดสูง
TRUE

CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
จุดสูง
TRUE

สตรัท-taglib:1.3.8
-
CVE-2012-0394
-
กลาง
FALSE
สำหรับสตรัท 2 แกน

-
CVE-2013-2115
-
จุดสูง
FALSE
สำหรับสตรัท 2 แกน

-
CVE-2014-0114
-
จุดสูง
FALSE
สำหรับถั่วทั่วไป

-
CVE-2015-0899
-
จุดสูง
FALSE
ไม่เกี่ยวข้องกับ taglib

-
CVE-2015-2992
-
กลาง
FALSE
ที่เกี่ยวข้องกับ struts2-core

-
CVE-2016-1181
-
จุดสูง
FALSE
ไม่เกี่ยวข้องกับ taglib

-
CVE-2016-1182
-
จุดสูง
FALSE
ไม่เกี่ยวข้องกับ taglib

เสากระเบื้อง-1.3.8
-
CVE-2012-0394
-
กลาง
FALSE
สำหรับสตรัท 2 แกน

-
CVE-2013-2115
-
จุดสูง
FALSE
สำหรับสตรัท 2 แกน

-
CVE-2014-0114
-
จุดสูง
FALSE
ภายใต้ถั่วทั่วไป

-
CVE-2015-0899
-
จุดสูง
FALSE
ใช้ไม่ได้กับกระเบื้อง

-
CVE-2015-2992
-
กลาง
FALSE
สำหรับสตรัท 2 แกน

-
CVE-2016-1181
-
จุดสูง
FALSE
ไม่เกี่ยวข้องกับ taglib

-
CVE-2016-1182
-
จุดสูง
FALSE
ไม่เกี่ยวข้องกับ taglib

ที่มา: will.com

เพิ่มความคิดเห็น