Salah satu kasus yang paling terbuka terjadi dengan Equifax pada Mei 2017. Penyerang tak dikenal menyita informasi dari 143 juta orang Amerika, termasuk nama lengkap, alamat, nomor jaminan sosial, dan surat izin mengemudi. Dalam 209.000 kasus, dokumen tersebut juga memuat informasi tentang kartu bank korban. Kebocoran ini terjadi karena eksploitasi kerentanan kritis di Apache Struts 2 (CVE-2017-5638), sedangkan perbaikannya dirilis kembali pada Maret 2017. Perusahaan memiliki waktu dua bulan untuk menginstal pembaruan, tetapi tidak ada yang peduli tentang itu.
Artikel ini akan membahas masalah pemilihan alat untuk melakukan SCA dalam hal kualitas hasil analisis. Juga akan ada perbandingan fungsional alat. Proses penyematan ke CI / CD dan kemungkinan integrasi akan ditinggalkan untuk publikasi mendatang. Daftar luas alat disajikan oleh OWASP di situs webnya , tetapi sebagai bagian dari ulasan saat ini, kami hanya akan menyentuh alat sumber terbuka paling populer Pemeriksaan Ketergantungan, Jalur Ketergantungan platform sumber terbuka yang sedikit kurang terkenal dan solusi Sonatype Nexus IQ Enterprise. Kami juga akan mencari tahu cara kerja solusi ini dan membandingkan hasil yang diperoleh untuk positif palsu.
Prinsip operasi
Pemeriksaan Ketergantungan adalah utilitas (CLI, maven, modul jenkins, ant) yang menganalisis file proyek, mengumpulkan potongan informasi ketergantungan (nama paket, groupid, judul spesifikasi, versi ...), membangun jalur CPE - (Pencacahan Platform Umum), Paket URL (PURL) dan mendeteksi kerentanan untuk CPE / PURL dari database (NVD, Indeks Sonatype OSS, API Audit NPM ...), lalu membuat laporan satu kali dalam format HTML, JSON, XML ...
Mari kita lihat bagaimana CPE terlihat:
cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other
- Bagian: Indikasi bahwa komponen tersebut milik aplikasi (a), sistem operasi (o), perangkat keras (h) (Item wajib)
- Vendor: Nama produsen produk (Wajib)
- Produk: Nama produk (Item yang dibutuhkan)
- Versi: Versi komponen (Item kedaluwarsa)
- Pembaruan: Perbarui paket
- Edisi: Versi lama (Tidak Berlaku Lagi)
- Bahasa: Bahasa seperti yang didefinisikan di RFC-5646
- Edisi SW: Versi perangkat lunak
- Target SW: Lingkungan perangkat lunak tempat produk beroperasi
- Target HW: Lingkungan perangkat keras tempat produk beroperasi
- Lainnya: Pemasok atau informasi produk
Contoh CPE terlihat seperti ini:
cpe:2.3:a:pivotal_software:spring_framework:3.0.0:*:*:*:*:*:*:*
Garis berarti CPE versi 2.3 menjelaskan komponen aplikasi dari pabrikan
pivotal_software dengan nama spring_frameworkversi 3.0.0. Jika kita membuka kerentanan CVE-2014-0225 di NVD , CPE ini disebutkan. Masalah pertama yang harus segera diperhatikan adalah CVE di NVD, menurut CPE, melaporkan bahwa ada masalah di framework, bukan di komponen tertentu. Artinya, jika pengembang terikat erat dengan kerangka kerja, dan kerentanan yang teridentifikasi tidak berlaku untuk modul yang digunakan pengembang, spesialis keamanan harus membongkar CVE ini dan berpikir untuk memperbarui.
URL juga digunakan oleh alat SCA. Format url paket adalah sebagai berikut:
scheme:type/namespace/name@version?qualifiers#subpath
- Skema: Akan selalu ada 'pkg' yang menunjukkan bahwa ini adalah URL paket (Wajib)
- Jenis: "tipe" dari paket atau "protokol" dari paket tersebut, seperti maven, npm, nuget, gem, pypi, dll. (Klausa wajib)
- Namespace: Beberapa awalan nama, seperti ID grup Maven, pemilik gambar Docker, pengguna atau organisasi GitHub. Opsional dan bergantung pada tipenya.
- Name: Package name (Wajib)
- Versi: Versi paket
- Kualifikasi: Kualifikasi tambahan untuk paket, seperti OS, arsitektur, distribusi, dll. Item opsional dan khusus jenis.
- Subpath: Path tambahan dalam paket yang berhubungan dengan root paket
Misalnya:
pkg:golang/google.golang.org/genproto#googleapis/api/annotations
pkg:maven/org.apache.commons/io@1.3.4
pkg:pypi/django-package@1.11.1.dev1
Dependency Track adalah platform web lokal yang menerima Bill of Material (BOM) siap pakai yang dihasilkan oleh CycloneDX dan SPDX , yaitu spesifikasi siap pakai tentang dependensi yang ada. Ini adalah file XML yang menjelaskan ketergantungan - nama, hash, url paket, penerbit, lisensi. Selanjutnya, Dependency Track mengurai BOM, melihat CVE yang tersedia untuk dependensi yang teridentifikasi dari database kerentanan (NVD, Sonatype OSS Index ...), lalu membuat grafik, menghitung metrik, memperbarui data status kerentanan komponen secara teratur.
Contoh tampilan BOM dalam format 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/tomcat-catalina@9.0.14</purl>
</component>
<!-- More components here -->
</components>
</bom>
BOM dapat digunakan tidak hanya sebagai parameter input untuk Dependency Track, tetapi juga untuk menginventarisir komponen perangkat lunak dalam rantai pasokan, misalnya, untuk menyediakan perangkat lunak kepada pelanggan. Pada 2014, Cyber Supply Chain Management and Transparency Act of 2014 bahkan diusulkan untuk dipertimbangkan di Amerika Serikat , yang menyatakan bahwa ketika membeli perangkat lunak, negara bagian mana pun. lembaga harus meminta BOM untuk mencegah eksploitasi komponen yang rentan, tetapi undang-undang tersebut tidak pernah diberlakukan.
Kembali ke SCA, Dependency Track memiliki integrasi out-of-the-box dengan Notification Platforms seperti Slack, sistem manajemen kerentanan seperti Kenna Security. Juga harus dikatakan bahwa Dependency Track, antara lain, mendeteksi versi paket yang sudah kadaluwarsa dan memberikan informasi tentang lisensi (karena dukungan untuk SPDX).
Jika kita berbicara secara spesifik tentang kualitas SCA, maka ada perbedaan yang mendasar.
Dependency Track tidak menerima proyek sebagai input, melainkan BOM. Artinya jika kita ingin memeriksa proyek, maka pertama kita perlu membuat bom.xml, misalnya menggunakan CycloneDX. Jadi, Jalur Ketergantungan secara langsung bergantung pada CycloneDX. Pada saat yang sama, ini memungkinkan untuk penyesuaian. Jadi tim OZON menulis modul CycloneDX untuk membuat file BOM untuk proyek Golang untuk pemindaian lebih lanjut melalui Dependency Track.
Nexus IQAdalah solusi SCA komersial dari Sonatype, yang merupakan bagian dari ekosistem Sonatype, yang juga mencakup Nexus Repository Manager. Nexus IQ dapat menerima sebagai data masukan baik arsip perang (untuk proyek java) melalui antarmuka web atau API, dan BOM, jika organisasi Anda belum berhasil membangun kembali dari CycloneDX ke solusi baru. Tidak seperti solusi open source, IQ tidak hanya mengacu pada CPE / PURL untuk komponen yang diidentifikasi dan kerentanan yang sesuai dalam database, tetapi juga memperhitungkan penelitiannya sendiri, misalnya, nama fungsi atau kelas yang rentan. Mekanisme IQ akan dibahas nanti dalam analisis hasil.
Mari kita meringkas beberapa fitur fungsional, dan juga mempertimbangkan bahasa yang didukung untuk analisis:
| Bahasa | Nexus IQ | Pemeriksaan Ketergantungan | Jalur Ketergantungan |
|---|---|---|---|
| Jawa | + | + | + |
| C / C ++ | + | + | - |
| C # | + | + | - |
| .Bersih | + | + | + |
| Erlang | - | - | + |
| JavaScript (NodeJS) | + | + | + |
| PHP | + | + | + |
| Python | + | + | + |
| Rubi | + | + | + |
| Perl | - | - | - |
| Scala | + | + | + |
| Tujuan C | + | + | - |
| Cepat | + | + | - |
| R | + | - | - |
| Pergilah | + | + | + |
Kegunaan
| Kegunaan | Nexus IQ | Pemeriksaan Ketergantungan | Jalur Ketergantungan |
|---|---|---|---|
| Kemampuan untuk memberikan verifikasi komponen yang digunakan dalam kode sumber untuk kemurnian lisensi | + | - | + |
| Kemampuan untuk memindai dan menganalisis kerentanan dan kemurnian lisensi untuk image Docker | + Integrasi dengan Clair | - | - |
| Kebijakan keamanan yang dapat dikonfigurasi untuk menggunakan pustaka sumber terbuka | + | - | - |
| Kemampuan untuk memindai repositori open source untuk komponen yang rentan | + RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS | - | + Hex, RubyGems, Maven, NPM, Nuget, Pypi |
| Ketersediaan kelompok penelitian khusus | + | - | - |
| Pekerjaan loop tertutup | + | + | + |
| Menggunakan database pihak ketiga | + Sonatype DB Tertutup | + Sonatype OSS, Penasihat Publik NPM | + Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, dukungan untuk database kerentanannya sendiri |
| Kemampuan untuk memfilter komponen open source saat mencoba mengupload ke loop pengembangan sesuai dengan kebijakan yang dikonfigurasi | + | - | - |
| Rekomendasi untuk memperbaiki kerentanan, ketersediaan tautan perbaikan | + | + - (tergantung pada deskripsi di database publik) | + - (tergantung pada deskripsi di database publik) |
| Pemeringkatan kerentanan yang terdeteksi berdasarkan tingkat keparahan | + | + | + |
| Model akses berbasis peran | + | - | + |
| Dukungan CLI | + | + | + - (hanya untuk CycloneDX) |
| Seleksi / penyortiran kerentanan menurut kriteria yang ditentukan | + | - | + |
| Dasbor berdasarkan Status Aplikasi | + | - | + |
| Pembuatan laporan dalam format PDF | + | - | - |
| Menghasilkan laporan dalam format JSON \ CSV | + | + | - |
| Dukungan bahasa Rusia | - | - | - |
Peluang integrasi
| Integrasi | Nexus IQ | Pemeriksaan Ketergantungan | Jalur Ketergantungan |
|---|---|---|---|
| Integrasi dengan LDAP / Active Directory | + | - | + |
| Integrasi dengan Sistem Integrasi Berkelanjutan Bambu | + | - | - |
| Integrasi dengan sistem integrasi berkelanjutan TeamCity | + | - | - |
| Integrasi dengan sistem integrasi berkelanjutan GitLab | + | + - (sebagai plugin untuk GitLab) | + |
| Integrasi dengan Sistem Integrasi Berkelanjutan Jenkins | + | + | + |
| Ketersediaan plugin untuk IDE | + IntelliJ, Eclipse, Visual Studio | - | - |
| Dukungan untuk integrasi yang disesuaikan melalui layanan web (API) alat | + | - | + |
Pemeriksaan Ketergantungan
Awal pertama
Mari jalankan Pemeriksaan Ketergantungan pada aplikasi DVJA yang sengaja rentan .
Untuk melakukan ini, kami akan menggunakan Plugin Dependency Check Maven :
mvn org.owasp:dependency-check-maven:check
Akibatnya, dependency-check-report.html akan muncul di direktori target.
Mari buka file tersebut. Setelah informasi ringkasan tentang jumlah total kerentanan, kita dapat melihat informasi tentang kerentanan dengan tingkat Severity dan Confidence tinggi, menunjukkan paket, CPE, nomor CVE.
Kemudian diikuti dengan informasi yang lebih rinci, khususnya berdasarkan apa bukti tersebut, yaitu BOM tertentu.
Berikutnya adalah deskripsi CPE, PURL dan CVE. Omong-omong, rekomendasi untuk perbaikan tidak dilampirkan karena tidak ada di database NVD.
Untuk meninjau hasil pemindaian secara sistematis, Anda dapat mengonfigurasi Nginx dengan pengaturan minimal, atau mengirim cacat yang dihasilkan ke sistem manajemen kerusakan yang mendukung konektor Pemeriksaan Ketergantungan. Misalnya, Defect Dojo.
Jalur Ketergantungan
Instalasi
Dependency Track, pada gilirannya, adalah platform web dengan bagan yang menampilkan, jadi tidak ada masalah akut dalam menyimpan cacat dalam solusi pihak ketiga.
Ada skrip yang didukung berikut untuk instalasi: Docker, WAR, Executable WAR.
Awal pertama
Buka URL dari layanan yang berjalan. Kami masuk melalui admin / admin, mengubah nama pengguna dan kata sandi, dan kemudian kami masuk ke Dashboard. Hal berikutnya yang akan kita lakukan adalah membuat proyek untuk aplikasi pengujian Java di Home / Projects → Create Project . Mari kita ambil DVJA sebagai contoh.
Karena Jalur Ketergantungan hanya dapat menerima BOM sebagai input, BOM ini harus diambil. Mari gunakan Plugin CycloneDX Maven :
mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom
Kami mendapatkan bom.xml dan mengunggah file di proyek yang dibuat DVJA → Dependensi → Unggah BOM .
Mari pergi ke Administrasi → Analisa. Kami memahami bahwa kami hanya mengaktifkan Penganalisis Internal, termasuk NVD. Kami juga akan menghubungkan Indeks OSS Sonatype.
Jadi, kami akan mendapatkan gambar berikut untuk proyek kami:
Juga dalam daftar Anda dapat menemukan satu kerentanan yang berlaku untuk Sonatype OSS:
Kekecewaan utama adalah bahwa Dependency Track tidak lagi menerima laporan Dependency Check xml. Versi integrasi Pemeriksaan Ketergantungan terakhir yang didukung adalah 1.0.0 - 4.0.2, sementara saya menguji 5.3.2.
Ini adalah video (dan sekarang ) ketika itu masih memungkinkan.
Nexus IQ
Awal pertama
Nexus IQ diinstal dari arsip dokumentasi , tetapi kami telah mengumpulkan gambar Docker untuk tujuan ini.
Setelah masuk ke konsol, Anda perlu membuat Organisasi dan Aplikasi.
Seperti yang Anda lihat, penyiapan dalam kasus IQ sedikit lebih rumit, karena kita juga perlu membuat kebijakan yang dapat diterapkan ke berbagai "tahapan" (dev, build, stage, release). Hal ini diperlukan untuk memblokir komponen yang rentan saat mereka bergerak di sepanjang jalur pipa mendekati produk, atau memblokir segera setelah masuk ke Nexus Repo saat diunduh oleh pengembang.
Untuk merasakan perbedaan antara open source dan perusahaan, mari lakukan pemindaian yang sama melalui Nexus IQ dengan cara yang sama melalui plugin Maven , setelah sebelumnya membuat aplikasi pengujian di antarmuka 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>
Buka URL ke laporan yang dihasilkan di antarmuka web IQ:
Di sini Anda dapat melihat semua pelanggaran kebijakan dengan berbagai tingkat kepentingan (dari Info hingga Keamanan Penting). Huruf D di sebelah komponen berarti komponen itu Ketergantungan Langsung, dan huruf T di sebelah komponen berarti komponen itu Ketergantungan Transitif, yaitu transitif.
Omong-omong, Snyk State of Open Source Security Report 2020 melaporkan bahwa lebih dari 70% kerentanan open source yang ditemukan di Node.js, Java, dan Ruby berada dalam dependensi transitif.
Jika kita membuka salah satu pelanggaran kebijakan Nexus IQ, kita dapat melihat deskripsi komponen, serta Grafik Versi, yang menunjukkan lokasi versi saat ini di timeline, serta di titik mana kerentanan tidak lagi rentan. Ketinggian kandil pada grafik menunjukkan popularitas komponen ini.
Jika Anda pergi ke bagian kerentanan dan mengungkapkan CVE, Anda dapat membaca deskripsi kerentanan ini, rekomendasi untuk eliminasi, serta alasan mengapa komponen ini dilanggar, yaitu adanya kelas
DiskFileitem.class.
Mari kita meringkas hanya komponen Java pihak ketiga, menghapus komponen js. Dalam tanda kurung, kami akan menunjukkan jumlah kerentanan yang ditemukan di luar NVD.
Total Nexus IQ:
- Dependensi yang Dipindai: 62
- Ketergantungan Rentan: 16
- Kerentanan Ditemukan: 42 (8 sonatype db)
Pemeriksaan Ketergantungan Total:
- Dependensi yang Dipindai: 47
- Ketergantungan Rentan: 13
- Kerentanan Ditemukan: 91 (14 sonatype oss)
Jalur Ketergantungan Total:
- Dependensi Dipindai: 59
- Ketergantungan Rentan: 10
- Kerentanan yang Ditemukan: 51 (1 sonatype oss)
Langkah selanjutnya adalah menganalisis hasil yang diperoleh dan mencari tahu kerentanan mana yang benar-benar cacat dan mana yang positif palsu.
Penolakan
Review ini bukanlah kebenaran yang tidak bisa disangkal. Penulis tidak memiliki tujuan untuk membuat instrumen terpisah menonjol dari yang lain. Inti dari tinjauan tersebut adalah untuk menunjukkan bagaimana alat SCA bekerja dan bagaimana memeriksa hasilnya.
Perbandingan hasil
Kondisi:
Positif palsu untuk kerentanan di komponen pihak ketiga adalah:
- CVE tidak cocok untuk komponen yang diidentifikasi
- , struts2, struts-tiles, , false positive
- CVE
- , python > 3.5 2.7 — false positive, 3.x
- CVE
- , SCA CVE, RCE, SCA CVE, Cisco, RCE. false positive.
- Misalnya, CVE ditemukan di komponen web pegas, setelah itu SCA menunjuk ke CVE yang sama di komponen Kerangka Pegas lainnya, sementara CVE tidak ada hubungannya dengan komponen lain. Dalam kasus ini, itu akan menjadi positif palsu.
Proyek open source DVJA dipilih sebagai objek penelitian. Studi ini hanya melibatkan komponen java (no js).
Hasil ringkasan
Mari langsung ke hasil tinjauan manual dari kerentanan yang teridentifikasi. Laporan lengkap untuk setiap CVE dapat ditemukan di Lampiran.
Hasil ringkasan untuk semua kerentanan:
| Parameter | Nexus IQ | Pemeriksaan Ketergantungan | Jalur Ketergantungan |
|---|---|---|---|
| Kerentanan total teridentifikasi | 42 | 91 | 51 |
| Kerentanan tidak terdeteksi dengan benar (positif palsu) | 2 (4,76%) | 62 (68,13%) | 29 (56,86%) |
| Kerentanan relevan tidak ditemukan (negatif palsu) | sepuluh | 20 | 27 |
Hasil ringkasan berdasarkan komponen:
| Parameter | Nexus IQ | Pemeriksaan Ketergantungan | Jalur Ketergantungan |
|---|---|---|---|
| Total komponen teridentifikasi | 62 | 47 | 59 |
| Total komponen yang rentan | enambelas | tigabelas | sepuluh |
| Komponen rentan salah diidentifikasi (positif palsu) | 1 | lima | 0 |
| Komponen rentan salah diidentifikasi (positif palsu) | 0 | 6 | 6 |
Mari buat grafik visual untuk menilai rasio positif palsu dan negatif palsu terhadap jumlah total kerentanan. Komponen ditandai secara horizontal, dan kerentanan yang diidentifikasi di dalamnya ditandai secara vertikal.
Sebagai perbandingan, studi serupa dilakukan oleh tim Sonatype untuk menguji proyek 1.531 komponen menggunakan Pemeriksaan Ketergantungan OWASP. Seperti yang bisa kita lihat, rasio noise untuk mengoreksi pemicu sebanding dengan hasil kami.
Sumber: www.sonatype.com/why-precision-matters-ebook
Mari kita lihat beberapa CVE dari hasil pemindaian kami untuk memahami alasan hasil ini.
Keterangan lebih lanjut
# 1
Mari kita lihat beberapa poin menarik dari Sonatype Nexus IQ terlebih dahulu.
Nexus IQ menunjukkan masalah deserialisasi dengan kemampuan untuk mengeksekusi RCE di Spring Framework beberapa kali. CVE-2016-1000027 di web-pegas: 3.0.5 untuk pertama kalinya, dan CVE-2011-2894 dalam konteks pegas: 3.0.5 dan pegas-inti: 3.0.5. Pada awalnya, tampaknya ada kerentanan duplikat di beberapa CVE. Karena jika Anda melihat CVE-2016-1000027 dan CVE-2011-2894 di database NVD, maka tampaknya semuanya sudah jelas.
| Komponen | Kerentanan |
|---|---|
| web musim semi: 3.0.5 | CVE-2016-1000027 |
| konteks pegas: 3.0.5 | CVE-2011-2894 |
| inti pegas: 3.0.5 | CVE-2011-2894 |
Deskripsi CVE-2011-2894 dari NVD :
Deskripsi CVE-2016-1000027 dari NVD :
CVE-2011-2894 sendiri cukup terkenal. Laporan Sumber Putih 2011 memberi peringkat CVE ini sebagai salah satu yang paling sering ditemui. Deskripsi untuk CVE-2016-100027, pada prinsipnya, sedikit menggunakan NVD, dan tampaknya hanya berlaku untuk Spring Framework 4.1.4. Lihatlah referensi dan di sini menjadi lebih atau kurang jelas. Kami memahami dari artikel Tenable bahwa selain kerentanan
RemoteInvocationSerializingExporterdi CVE-2011-2894, kerentanan juga diamati di HttpInvokerServiceExporter. Inilah yang dikatakan Nexus IQ:
Meskipun demikian, tidak ada yang seperti ini di NVD, itulah sebabnya Pemeriksaan Ketergantungan dan Jalur Ketergantungan menerima negatif palsu.
Selain itu, dari uraian CVE-2011-2894, Anda dapat memahami bahwa kerentanan memang ada dalam konteks pegas: 3.0.5 dan pegas-inti: 3.0.5. Konfirmasi ini dapat ditemukan di artikel dari orang yang menemukan kerentanan ini.
# 2
| Komponen | Kerentanan | Hasil |
|---|---|---|
| struts2-core: 2.3.30 | CVE-2016-4003 | SALAH |
Jika kami mempelajari kerentanan CVE-2016-4003, kami akan memahami bahwa itu telah diperbaiki pada versi 2.3.28, namun Nexus IQ memberi tahu kami tentang hal itu. Ada catatan dalam deskripsi kerentanan:
Artinya, kerentanan hanya ada dalam hubungannya dengan versi JRE yang sudah kedaluwarsa, yang mereka putuskan untuk diperingatkan kepada kami. Namun demikian, kami menganggap ini sebagai False Positive, meskipun bukan yang terburuk.
Nomor 3
| Komponen | Kerentanan | Hasil |
|---|---|---|
| xwork-core: 2.3.30 | CVE-2017-9804 | BENAR |
| xwork-core: 2.3.30 | CVE-2017-7672 | SALAH |
Jika kita melihat deskripsi untuk CVE-2017-9804 dan CVE-2017-7672, kita akan memahami bahwa masalahnya adalah
URLValidator class, dan CVE-2017-9804 mengikuti dari CVE-2017-7672. Keberadaan kerentanan kedua tidak membawa muatan apa pun, kecuali bahwa tingkat keparahannya telah meningkat ke Tinggi, jadi ini dapat dianggap sebagai kebisingan yang tidak perlu.
Secara keseluruhan, tidak ada kesalahan positif lain yang ditemukan untuk Nexus IQ.
# 4
Ada beberapa hal yang membedakan IQ dari keputusan lain.
| Komponen | Kerentanan | Hasil |
|---|---|---|
| web musim semi: 3.0.5 | CVE-2020-5398 | BENAR |
CVE di NVD mengatakan bahwa itu hanya berlaku untuk versi 5.2.x hingga 5.2.3, 5.1.x hingga 5.1.13, dan versi 5.0.x hingga 5.0.16, namun, jika kita melihat deskripsi CVE di Nexus IQ, kita akan melihat yang berikut ini:
Pemberitahuan Deviasi Penasihat: Tim peneliti keamanan Sonatype menemukan bahwa kerentanan ini diperkenalkan pada versi 3.0.2.RELEASE dan bukan 5.0.x seperti yang dinyatakan dalam penasehat.
Ini diikuti oleh PoC untuk kerentanan ini, yang melaporkan bahwa ini ada di versi 3.0.5.
Negatif palsu dikirim ke Dependency Check dan Dependency Track.
# 5
Mari kita lihat positif palsu untuk Pemeriksaan Ketergantungan dan Pelacakan Ketergantungan.
Pemeriksaan Ketergantungan menonjol karena mencerminkan CVE yang berlaku untuk seluruh kerangka kerja di NVD ke komponen yang CVE tersebut tidak berlaku. Ini berlaku untuk CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, yang Pemeriksaan Ketergantungan "disekrup" ke struts-taglib: 1.3.8 dan struts-tiles-1.3.8. Komponen ini tidak ada hubungannya dengan apa yang dijelaskan di CVE - pemrosesan permintaan, validasi halaman, dan sebagainya. Hal ini disebabkan oleh fakta bahwa kesamaan antara CVE ini dan komponennya hanyalah kerangka kerja, itulah sebabnya Dependency Check menganggapnya sebagai kerentanan.
Situasi yang sama dengan spring-tx: 3.0.5, dan situasi serupa dengan struts-core: 1.3.8. Untuk struts-core, Dependency Check dan Dependency Track telah menemukan banyak kerentanan yang sebenarnya dapat diterapkan pada struts2-core, yang pada dasarnya merupakan kerangka kerja terpisah. Dalam hal ini, Nexus IQ memahami gambar dengan benar dan dalam CVE yang dikeluarkannya, menunjukkan bahwa struts-core telah berakhir dan perlu menggunakan struts2-core.
# 6
Dalam beberapa situasi, tidak adil untuk menafsirkan kesalahan Pemeriksaan Ketergantungan dan Pelacakan Ketergantungan eksplisit. Khususnya CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, yang merupakan Dependency Check dan Dependency Track mengacu pada pegas-inti: 3.0.5 sebenarnya mengacu pada pegas-web: 3.0.5. Pada saat yang sama, beberapa CVE ini ditemukan dan Nexus IQ, bagaimanapun, IQ mengidentifikasinya dengan benar untuk komponen lain. Karena kerentanan ini tidak ditemukan di spring-core, tidak dapat dikatakan bahwa mereka tidak ada dalam kerangka kerja, pada prinsipnya, dan alat open source dengan tepat menunjukkan kerentanan ini (mereka hanya melewatkan sedikit).
kesimpulan
Seperti yang bisa kita lihat, menentukan keandalan kerentanan yang teridentifikasi dengan tinjauan manual tidak memberikan hasil yang tidak ambigu, yang mengarah pada masalah kontroversial. Hasilnya sedemikian rupa sehingga solusi Nexus IQ memiliki rasio positif palsu terendah dan akurasi tertinggi.
Pertama-tama, hal ini disebabkan oleh fakta bahwa tim Sonatype telah memperluas deskripsi untuk setiap kerentanan CVE dari NVD di database mereka, menentukan, dengan keakuratan kelas atau fungsi kerentanan untuk versi komponen tertentu, melakukan penelitian tambahan (misalnya, memeriksa kerentanan pada versi lama versi perangkat lunak).
Pengaruh penting pada hasil dimainkan oleh kerentanan yang tidak disertakan dalam NVD, tetapi tetap ada dalam database Sonatype dengan tanda SONATYPE. Menurut The State of Open Source Security Vulnerabilities 202045% dari kerentanan open source yang ditemukan tidak dilaporkan ke NVD. Menurut database WhiteSource, hanya 29% dari semua kerentanan open source yang dilaporkan di luar NVD yang akhirnya dipublikasikan di sana, itulah mengapa penting untuk mencari kerentanan di tempat lain juga.
Akibatnya, Pemeriksaan Ketergantungan menghasilkan banyak kebisingan, kehilangan beberapa komponen yang rentan. Dependency Track menghasilkan lebih sedikit noise dan menampilkan banyak komponen, yang secara visual tidak melukai mata di antarmuka web.
Namun demikian, praktik menunjukkan bahwa itu adalah open source yang harus menjadi langkah pertama dalam perjalanan untuk mengembangkan DevSecOps. Hal pertama yang harus dipikirkan untuk menanamkan SCA ke dalam pengembangan adalah proses, yaitu berpikir bersama dengan manajemen dan departemen terkait tentang seperti apa seharusnya proses yang ideal dalam organisasi mereka. Mungkin untuk organisasi Anda pada awalnya, Dependency Check atau Dependency Track akan mencakup semua kebutuhan bisnis, dan solusi Enterprise akan menjadi kelanjutan logis karena kompleksitas yang berkembang dari aplikasi yang dikembangkan.
Lampiran A. Hasil diterapkan ke komponen
:
- High —
- Medium —
- TRUE — (True positive issue)
- FALSE — (False positive issue)
| Nexus IQ | Dependency Check | Dependency Track | ||
|---|---|---|---|---|
| dom4j: 1.6.1 | High | High | High | TRUE |
| log4j-core: 2.3 | High | High | High | TRUE |
| log4j: 1.2.14 | High | High | - | TRUE |
| commons-collections:3.1 | High | High | High | TRUE |
| commons-fileupload:1.3.2 | High | High | High | TRUE |
| commons-beanutils:1.7.0 | High | High | High | TRUE |
| commons-codec:1:10 | Medium | - | - | TRUE |
| mysql-connector-java:5.1.42 | High | High | High | TRUE |
| spring-expression:3.0.5 | High |
|
TRUE | |
| spring-web:3.0.5 | High | High | TRUE | |
| spring-context:3.0.5 | Medium | - | TRUE | |
| spring-core:3.0.5 | Medium | High | High | TRUE |
| struts2-config-browser-plugin:2.3.30 | Medium | - | - | TRUE |
| spring-tx:3.0.5 | - | High | - | FALSE |
| struts-core:1.3.8 | High | High | High | TRUE |
| xwork-core: 2.3.30 | High | - | - | TRUE |
| struts2-core: 2.3.30 | High | High | High | TRUE |
| struts-taglib:1.3.8 | - | High | - | FALSE |
| struts-tiles-1.3.8 | - | High | - | FALSE |
Lampiran B. Hasil untuk Kerentanan
:
- High —
- Medium —
- TRUE — (True positive issue)
- FALSE — (False positive issue)
| Nexus IQ | Dependency Check | Dependency Track | Severity | |||
|---|---|---|---|---|---|---|
| dom4j: 1.6.1 | CVE-2018-1000632 | CVE-2018-1000632 | CVE-2018-1000632 | High | TRUE | |
| CVE-2020-10683 | CVE-2020-10683 | CVE-2020-10683 | High | TRUE | ||
| log4j-core: 2.3 | CVE-2017-5645 | CVE-2017-5645 | CVE-2017-5645 | High | TRUE | |
| CVE-2020-9488 | CVE-2020-9488 | CVE-2020-9488 | Low | TRUE | ||
| log4j: 1.2.14 | CVE-2019-17571 | CVE-2019-17571 | - | High | TRUE | |
| - | CVE-2020-9488 | - | Low | TRUE | ||
| SONATYPE-2010-0053 | - | - | High | TRUE | ||
| commons-collections:3.1 | - | CVE-2015-6420 | CVE-2015-6420 | High | FALSE | RCE(OSSINDEX)
|
| - | CVE-2017-15708 | CVE-2017-15708 | High | FALSE | RCE(OSSINDEX)
|
|
| SONATYPE-2015-0002 | RCE (OSSINDEX) | RCE(OSSINDEX) | High | TRUE | ||
| commons-fileupload:1.3.2 | CVE-2016-1000031 | CVE-2016-1000031 | CVE-2016-1000031 | High | TRUE | |
| SONATYPE-2014-0173 | - | - | Medium | TRUE | ||
| commons-beanutils:1.7.0 | CVE-2014-0114 | CVE-2014-0114 | CVE-2014-0114 | High | TRUE | |
| - | CVE-2019-10086 | CVE-2019-10086 | High | FALSE | 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 | High | TRUE | |
| CVE-2019-2692 | CVE-2019-2692 | - | Medium | TRUE | ||
| - | CVE-2020-2875 | - | Medium | FALSE | CVE-2019-2692, c «attacks may significantly impact additional products»
|
|
| - | CVE-2017-15945 | - | High | FALSE | mysql-connector-java
|
|
| - | CVE-2020-2933 | - | Low | FALSE | CVE-2020-2934
|
|
| CVE-2020-2934 | CVE-2020-2934 | - | Medium | TRUE | ||
| spring-expression:3.0.5 | CVE-2018-1270 | - | High | TRUE | ||
| CVE-2018-1257 | - | - | Medium | TRUE | ||
| spring-web:3.0.5 | CVE-2016-1000027 | - | High | TRUE | ||
| CVE-2014-0225 | - | CVE-2014-0225 | High | TRUE | ||
| CVE-2011-2730 | - | - | High | TRUE | ||
| - | - | CVE-2013-4152 | Medium | TRUE | ||
| CVE-2018-1272 | - | - | High | TRUE | ||
| CVE-2020-5398 | - | - | High | TRUE | IQ: «The Sonatype security research team discovered that this vulnerability was introduced in version 3.0.2.RELEASE and not 5.0.x as stated in the 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 | - | Medium | TRUE | ||
| spring-core:3.0.5 | - | CVE-2011-2730 | CVE-2011-2730 | High | TRUE | |
| CVE-2011-2894 | CVE-2011-2894 | CVE-2011-2894 | Medium | TRUE | ||
| - | - | CVE-2013-4152 | Medium | FALSE | spring-web
|
|
| - | CVE-2013-4152 | - | Medium | FALSE | spring-web
|
|
| - | CVE-2013-6429 | CVE-2013-6429 | Medium | FALSE | spring-web
|
|
| - | CVE-2013-6430 | - | Medium | FALSE | spring-web
|
|
| - | CVE-2013-7315 | CVE-2013-7315 | Medium | FALSE | SPLIT CVE-2013-4152. + spring-web
|
|
| - | CVE-2014-0054 | CVE-2014-0054 | Medium | FALSE | spring-web
|
|
| - | CVE-2014-0225 | - | High | FALSE | spring-web
|
|
| - | - | CVE-2014-0225 | High | FALSE | spring-web
|
|
| - | CVE-2014-1904 | CVE-2014-1904 | Medium | FALSE | spring-web-mvc
|
|
| - | CVE-2014-3625 | CVE-2014-3625 | Medium | FALSE | spring-web-mvc
|
|
| - | CVE-2016-9878 | CVE-2016-9878 | High | FALSE | spring-web-mvc
|
|
| - | CVE-2018-1270 | CVE-2018-1270 | High | FALSE | spring-expression / spring-messages
|
|
| - | CVE-2018-1271 | CVE-2018-1271 | Medium | FALSE | spring-web-mvc
|
|
| - | CVE-2018-1272 | CVE-2018-1272 | High | TRUE | ||
| CVE-2014-3578 | CVE-2014-3578 (OSSINDEX) | CVE-2014-3578 | Medium | TRUE | ||
| SONATYPE-2015-0327 | - | - | Low | TRUE | ||
| struts2-config-browser-plugin:2.3.30 | SONATYPE-2016-0104 | - | - | Medium | TRUE | |
| spring-tx:3.0.5 | - | CVE-2011-2730 | - | High | FALSE | spring-tx
|
| - | CVE-2011-2894 | - | High | FALSE | spring-tx
|
|
| - | CVE-2013-4152 | - | Medium | FALSE | spring-tx
|
|
| - | CVE-2013-6429 | - | Medium | FALSE | spring-tx
|
|
| - | CVE-2013-6430 | - | Medium | FALSE | spring-tx
|
|
| - | CVE-2013-7315 | - | Medium | FALSE | spring-tx
|
|
| - | CVE-2014-0054 | - | Medium | FALSE | spring-tx
|
|
| - | CVE-2014-0225 | - | High | FALSE | spring-tx
|
|
| - | CVE-2014-1904 | - | Medium | FALSE | spring-tx
|
|
| - | CVE-2014-3625 | - | Medium | FALSE | spring-tx
|
|
| - | CVE-2016-9878 | - | High | FALSE | spring-tx
|
|
| - | CVE-2018-1270 | - | High | FALSE | spring-tx
|
|
| - | CVE-2018-1271 | - | Medium | FALSE | spring-tx
|
|
| - | CVE-2018-1272 | - | Medium | FALSE | spring-tx
|
|
| struts-core:1.3.8 | - | CVE-2011-5057 (OSSINDEX)
|
Medium | FASLE | Struts 2
|
|
| - | CVE-2012-0391 (OSSINDEX) | CVE-2012-0391 | High | FALSE | Struts 2
|
|
| - | CVE-2014-0094 (OSSINDEX) | CVE-2014-0094 | Medium | FALSE | Struts 2
|
|
| - | CVE-2014-0113 (OSSINDEX) | CVE-2014-0113 | High | FALSE | Struts 2
|
|
| CVE-2016-1182 | 3VE-2016-1182 | - | High | TRUE | ||
| - | - | CVE-2011-5057 | Medium | FALSE | Struts 2
|
|
| - | CVE-2012-0392 (OSSINDEX) | CVE-2012-0392 | High | FALSE | Struts 2
|
|
| - | CVE-2012-0393 (OSSINDEX) | CVE-2012-0393 | Medium | FALSE | Struts 2
|
|
| CVE-2015-0899 | CVE-2015-0899 | - | High | TRUE | ||
| - | CVE-2012-0394 | CVE-2012-0394 | Medium | FALSE | Struts 2
|
|
| - | CVE-2012-0838 (OSSINDEX) | CVE-2012-0838 | High | FALSE | Struts 2
|
|
| - | CVE-2013-1965 (OSSINDEX) | CVE-2013-1965 | High | FALSE | Struts 2
|
|
| - | CVE-2013-1966 (OSSINDEX) | CVE-2013-1966 | High | FASLE | Struts 2
|
|
| - | CVE-2013-2115 | CVE-2013-2115 | High | FASLE | Struts 2
|
|
| - | CVE-2013-2134 (OSSINDEX) | CVE-2013-2134 | High | FASLE | Struts 2
|
|
| - | CVE-2013-2135 (OSSINDEX) | CVE-2013-2135 | High | FASLE | Struts 2
|
|
| CVE-2014-0114 | CVE-2014-0114 | - | High | TRUE | ||
| - | CVE-2015-2992 | CVE-2015-2992 | Medium | FALSE | Struts 2
|
|
| - | CVE-2016-0785 (OSSINDEX) | CVE-2016-0785 | High | FALSE | Struts 2
|
|
| CVE-2016-1181 | CVE-2016-1181 | - | High | TRUE | ||
| - | CVE-2016-4003 (OSSINDEX) | CVE-2016-4003 | High | FALSE | Struts 2
|
|
| xwork-core:2.3.30 | CVE-2017-9804 | - | - | High | TRUE | |
| SONATYPE-2017-0173 | - | - | High | TRUE | ||
| CVE-2017-7672 | - | - | High | FALSE | CVE-2017-9804
|
|
| SONATYPE-2016-0127 | - | - | High | TRUE | ||
| struts2-core:2.3.30 | - | CVE-2016-6795 | CVE-2016-6795 | High | TRUE | |
| - | CVE-2017-9787 | CVE-2017-9787 | High | TRUE | ||
| - | CVE-2017-9791 | CVE-2017-9791 | High | TRUE | ||
| - | CVE-2017-9793 | - | High | FALSE | CVE-2018-1327
|
|
| - | CVE-2017-9804 | - | High | TRUE | ||
| - | CVE-2017-9805 | CVE-2017-9805 | High | TRUE | ||
| CVE-2016-4003 | - | - | Medium | FALSE | Apache Struts 2.x 2.3.28, 2.3.30. , , CVE Struts 2, JRE 1.7 . , FALSE
|
|
| - | CVE-2018-1327 | CVE-2018-1327 | High | TRUE | ||
| CVE-2017-5638 | CVE-2017-5638 | CVE-2017-5638 | High | TRUE | , Equifax 2017
|
|
| CVE-2017-12611 | CVE-2017-12611 | - | High | TRUE | ||
| CVE-2018-11776 | CVE-2018-11776 | CVE-2018-11776 | High | TRUE | ||
| struts-taglib:1.3.8 | - | CVE-2012-0394 | - | Medium | FALSE | struts2-core |
| - | CVE-2013-2115 | - | High | FALSE | struts2-core | |
| - | CVE-2014-0114 | - | High | FALSE | commons-beanutils
|
|
| - | CVE-2015-0899 | - | High | FALSE | taglib
|
|
| - | CVE-2015-2992 | - | Medium | FALSE | struts2-core
|
|
| - | CVE-2016-1181 | - | High | FALSE | taglib
|
|
| - | CVE-2016-1182 | - | High | FALSE | taglib
|
|
| struts-tiles-1.3.8 | - | CVE-2012-0394 | - | Medium | FALSE | struts2-core |
| - | CVE-2013-2115 | - | High | FALSE | struts2-core | |
| - | CVE-2014-0114 | - | High | FALSE | commons-beanutils
|
|
| - | CVE-2015-0899 | - | High | FALSE | tiles
|
|
| - | CVE-2015-2992 | - | Medium | FALSE | struts2-core | |
| - | CVE-2016-1181 | - | High | FALSE | taglib
|
|
| - | CVE-2016-1182 | - | High | FALSE | taglib
|