Pemindaian dependensi
Pemindaian dependensi di GitHub Advanced Security untuk Azure DevOps mendeteksi komponen sumber terbuka yang digunakan dalam kode sumber Anda dan mendeteksi apakah ada kerentanan terkait. Setiap kerentanan yang ditemukan dari komponen sumber terbuka ditandai sebagai pemberitahuan.
GitHub Advanced Security untuk Azure DevOps berfungsi dengan Azure Repos. Jika Anda ingin menggunakan GitHub Advanced Security dengan repositori GitHub, lihat GitHub Advanced Security.
Tentang pemindaian dependensi
Pemindaian dependensi menghasilkan pemberitahuan untuk komponen sumber terbuka apa pun, langsung atau transitif, yang ditemukan rentan yang bergantung pada kode Anda. Kerentanan langsung adalah pustaka yang digunakan langsung kode Anda. Dependensi transitif adalah pustaka atau perangkat lunak lain yang digunakan dependensi langsung.
Tentang deteksi pemindaian dependensi
Rekam jepret baru komponen Anda disimpan setiap kali grafik dependensi untuk repositori berubah, dan setelah alur yang berisi tugas pemindaian dependensi yang membangun kode baru (dengan kata lain, penerapan baru) dijalankan.
Untuk setiap komponen rentan yang terdeteksi digunakan, komponen dan kerentanan tercantum dalam log build dan ditampilkan sebagai pemberitahuan di tab Keamanan Tingkat Lanjut. Hanya saran yang ditinjau oleh GitHub dan ditambahkan ke Database Penasihat GitHub yang membuat pemberitahuan pemindaian dependensi. Log build menyertakan tautan ke pemberitahuan individu untuk penyelidikan lebih lanjut. Untuk informasi selengkapnya tentang detail pemberitahuan, lihat Memperbaiki pemberitahuan pemindaian dependensi.
Log build juga berisi informasi dasar tentang setiap kerentanan yang terdeteksi. Detail ini termasuk tingkat keparahan, komponen yang terpengaruh, judul kerentanan, dan CVE terkait.
Ekosistem paket yang didukung
Pemindaian dependensi mendukung dependensi langsung dan transitif untuk semua ekosistem paket yang didukung.
Pengelolaan paket | Bahasa | Format yang didukung |
---|---|---|
Kargo | Rust | Cargo.toml , Cargo.lock |
CocoaPods | Swift | Podfile.lock |
Modul Go | Go | go.mod , go.sum |
Gradle | Java | *.lockfile |
Maven | Java | pom.xml |
npm | JavaScript | package-lock.json , , package.json npm-shrinkwrap.json ,lerna.json |
NuGet | C# | *.packages.config , , *.project.assets *.csproj |
pip | Python | setup.py , requirements.txt |
pnpm | JavaScript | package.json |
RubyGems | Ruby | Gemfile.lock |
Yarn | JavaScript | package.json |
Tentang pemberitahuan pemindaian dependensi
Tab Keamanan Tingkat Lanjut di Repos di Azure DevOps adalah hub untuk melihat pemberitahuan keamanan Anda, yang secara default menunjukkan pemberitahuan pemindaian dependensi. Anda dapat memfilter menurut cabang, alur, paket, dan tingkat keparahan. Anda dapat memilih pemberitahuan untuk detail selengkapnya, termasuk panduan remediasi. Saat ini, hub pemberitahuan tidak menampilkan pemberitahuan untuk pemindaian yang diselesaikan pada cabang PR.
Ketika paket yang rentan terdeteksi di repositori Anda, memperbaiki pemberitahuan pemindaian dependensi biasanya melibatkan peningkatan ke versi paket yang lebih tinggi atau menghapus paket yang menyinggung. Saran ini berlaku untuk dependensi langsung dan transitif (atau tidak langsung). Tampilan default di tab Keamanan Tingkat Lanjut Anda adalah pemberitahuan aktif untuk cabang default untuk repositori Anda.
Tidak ada efek untuk menghasilkan jika alur atau cabang diganti namanya - mungkin perlu waktu hingga 24 jam sebelum nama baru ditampilkan.
Status pemberitahuan secara otomatis diperbarui ke Closed
ketika komponen yang rentan tidak lagi terdeteksi dalam build terbaru untuk alur apa pun tempat tugas pemindaian dependensi diinstal. Untuk melihat pemberitahuan yang diselesaikan, gunakan State
filter di toolbar utama dan pilih Closed
.
Jika Anda menonaktifkan Keamanan Tingkat Lanjut untuk repositori, Anda akan kehilangan akses ke hasil di tab Keamanan Tingkat Lanjut dan tugas build. Tugas build tidak akan gagal, tetapi hasil apa pun dari build yang dijalankan dengan tugas sementara Keamanan Tingkat Lanjut dinonaktifkan disembunyikan dan tidak dipertahankan.
Detail peringatan
Anda juga dapat menelusuri detail tentang pemberitahuan dengan mengklik pemberitahuan tertentu, dan panduan remediasi.
Bagian | Penjelasan |
---|---|
Rekomendasi | Teks rekomendasi berasal langsung dari penyedia data kerentanan kami, Database Penasihat GitHub. Biasanya, panduan menyarankan peningkatan komponen yang diidentifikasi ke versi yang tidak rentan. |
Lokasi | Bagian Lokasi merinci jalur tempat tugas pemindaian dependensi telah menemukan komponen yang rentan digunakan. Jika file dapat diselesaikan dari pemindaian build yang mendasar ke file yang diterapkan di sumber, kartu Lokasi muncul sebagai tautan yang dapat diklik. Jika file diproduksi sebagai bagian dari build (misalnya, artefak build), tautan tidak dapat diklik. Tinjau log build untuk lebih memahami bagaimana komponen dibawa ke dalam build. |
Deskripsi | Deskripsi disediakan oleh deskripsi GitHub Advisory. |
Deteksi
Alur yang tercantum di bawah tab Deteksi adalah alur tempat komponen rentan ditemukan. Setiap baris merinci build terbaru dari alur yang terpengaruh dan tanggal ketika paket pertama kali diperkenalkan. Jika paket yang rentan telah diperbaiki di beberapa alur tetapi tidak semua, Anda akan melihat sebagian baris tetap.
Setelah pemberitahuan diselesaikan, pemberitahuan secara otomatis berpindah ke Closed
status dan alur eksekusi terbaru di bawah tab Deteksi menampilkan tanda centang hijau, yang berarti bahwa kode yang berisi komponen yang diperbarui dijalankan dalam alur tersebut:
Tingkat keparahan
Database Penasihat GitHub menyediakan skor CVSS, yang kemudian diterjemahkan ke dalam tingkat keparahan rendah, sedang, tinggi, atau kritis untuk pemberitahuan melalui panduan berikut:
Skor CVSS | Tingkat keparahan |
---|---|
1.0 < Skor < 4.0 | Kurang Penting |
4.0 < Skor < 7.0 | Medium |
7.0 < Skor < 9.0 | Sangat Penting |
Skor >= 9,0 | Kritis |
Menemukan detail
Dua bagian umumnya ditemukan di bawah Detail penemuan: paket yang rentan dan dependensi akar. Paket yang rentan adalah komponen yang berpotensi rentan. Bagian dependensi akar berisi komponen tingkat atas yang bertanggung jawab atas rantai dependensi yang mengarah pada kerentanan.
Jika paket yang rentan hanya direferensikan sebagai dependensi langsung, Anda hanya melihat bagian "paket yang rentan".
Jika paket yang rentan direferensikan baik sebagai dependensi langsung dan transitif, paket ditampilkan di bagian "paket rentan" dan "dependensi akar".
Jika paket yang rentan hanya dirujuk sebagai dependensi transitif, paket ditampilkan di bagian "paket rentan", dan dependensi akar yang mereferensikan paket yang rentan ditampilkan di bagian "dependensi akar".
Mengelola pemberitahuan pemindaian dependensi
Menampilkan pemberitahuan untuk repositori
Siapa pun dengan izin kontributor untuk repositori dapat melihat ringkasan semua pemberitahuan untuk repositori di Repos>Advanced Security.
Secara default, halaman pemberitahuan menunjukkan hasil pemindaian dependensi untuk cabang default repositori.
Status pemberitahuan mencerminkan status untuk cabang default dan alur eksekusi terbaru, bahkan jika pemberitahuan ada di cabang dan alur lain.
Memperbaiki pemberitahuan pemindaian dependensi
Dependensi langsung adalah komponen yang Anda miliki di repositori Anda. Dependensi transitif atau tidak langsung adalah komponen yang digunakan oleh dependensi langsung. Proyek Anda masih rentan terlepas dari apakah kerentanan ditemukan dalam dependensi langsung atau transitif.
Memperbaiki dependensi transitif yang rentan biasanya mengambil bentuk mengesampingkan versi komponen yang rentan secara eksplisit yang digunakan untuk setiap dependensi langsung yang diidentifikasi. Setelah dependensi akar meningkatkan penggunaan komponen yang rentan ke versi yang aman, Anda dapat meningkatkan setiap dependensi akar daripada beberapa penimpaan individu.
Memperbarui dependensi untuk Yarn/Npm
Secara hipotetis, mengatakan paket ini memiliki dua kerentanan. Salah satunya adalah untuk axios
, dependensi langsung, dan satu untuk acorn
, dependensi transitif (juga dikenal sebagai dependensi tidak langsung atau dependensi dependensi).
{
"name": "my-package",
"version": "1.0.0",
"dependencies": {
"axios": "0.18.0",
"eslint": "5.16.0",
}
}
Versi saat ini memiliki kerentanan axios
penolakan layanan (DoS) dengan rekomendasi untuk memperbarui ke v0.18.1 atau yang lebih tinggi. Karena ini adalah dependensi langsung, Anda memiliki kontrol atas versi axios
yang Anda gunakan; yang perlu Anda lakukan adalah memperbarui versi axios
yang Anda tarik. Tampilan yang diperbarui package.json
mirip dengan:
{
"name": "my-package",
"version": "1.0.0",
"dependencies": {
"axios": "0.19.2",
"eslint": "5.16.0",
}
}
Sekarang, versi eslint
dalam yang package.json
ditampilkan tergantung pada versi acorn
yang merupakan kerentanan penolakan regex layanan (ReDoS) dengan rekomendasi untuk memperbarui ke versi 5.7.4, 6.4.1, 7.1.1
atau yang lebih tinggi. Jika Anda mendapatkan pemberitahuan dari alat pemindaian dependensi, itu harus memberi tahu Anda dependensi akar yang memerlukan dependensi yang rentan.
Yarn
Jika Anda menggunakan Yarn, Anda dapat menggunakan yarn mengapa untuk menemukan rantai dependensi lengkap.
> $ yarn why acorn
yarn why v1.22.4
[1/4] Why do we have the module "acorn"...?
[2/4] Initialising dependency graph...
[3/4] Finding dependency...
[4/4] Calculating file sizes...
=> Found "acorn@6.4.0"
info Reasons this module exists
- "eslint#espree" depends on it
- Hoisted from "eslint#espree#acorn"
info Disk size without dependencies: "1.09MB"
info Disk size with unique dependencies: "1.09MB"
info Disk size with transitive dependencies: "1.09MB"
info Number of shared dependencies: 0
Done in 0.30s.
Rantai dependensi penuh adalah eslint
acorn
>espree
>. Setelah Anda mengetahui rantai dependensi, Anda dapat menggunakan fitur lain dari Yarn, resolusi dependensi selektif, untuk mengambil alih versi acorn yang akan digunakan.
Gunakan bidang resolusi di package.json
untuk menentukan penggantian versi. Tiga metode berbeda untuk mengambil alih paket ditampilkan, dalam urutan terburuk ke terbaik:
{
"name": "yarn-resolutions",
"version": "1.0.0",
"license": "MIT",
"dependencies": {
"axios": "0.19.2",
"eslint": "5.16.0"
},
"resolutions": {
// DO NOT USE!
"**/acorn": "6.4.1",
// BETTER
"eslint/**/acorn": "6.4.1",
// BEST
"eslint/espree/acorn": "6.4.1"
}
}
**/acorn
Menggunakan pola akan mengambil alih semua penggunaan paket acorn di semua dependensi. Ini berbahaya, dan istirahat saat runtime. Akibatnya, telah dihapus di Yarn v2.
eslint/**/acorn
Menggunakan pola mengambil alih semua penggunaan paket acorn di bawah paket eslint, dan dalam paket apa pun itu tergantung pada. Ini lebih aman daripada mengesampingkan paket untuk semua dependensi, tetapi masih memiliki beberapa risiko jika grafik dependensi untuk paket besar. Pola ini direkomendasikan ketika ada banyak subpaket yang menggunakan paket yang rentan dan menentukan penimpaan untuk subpaket individu tidak akan praktis.
Menggunakan pola eslint/espree/acorn
hanya mengambil alih penggunaan acorn
dalam espree
paket dalam eslint
paket. Ini secara khusus menargetkan rantai dependensi yang rentan, dan merupakan cara yang disarankan untuk mengambil alih versi paket.
npm
Jika Anda menggunakan npm 8.3 atau yang lebih tinggi, Anda dapat menggunakan bidang penimpaan di package.json
Tambahkan penimpaan jika Anda perlu membuat perubahan khusus pada dependensi transitif. Misalnya, Anda mungkin perlu menambahkan penimpaan untuk mengganti versi dependensi dengan masalah keamanan yang diketahui, mengganti dependensi yang ada dengan fork, atau memastikan bahwa versi paket yang sama digunakan di mana-mana.
{
"name": "npm-overrides",
"version": "1.0.0",
"license": "MIT",
"dependencies": {
"axios": "0.19.2",
"eslint": "5.16.0"
},
"overrides":{
"eslint": {
"espree": {
"acorn": "6.4.1"
}
}
}
}
Contoh penimpaan yang ditampilkan menunjukkan cara npm untuk mengatakan "ambil alih hanya penggunaan acorn
dalam espree
paket dalam eslint
paket." Ini secara khusus menargetkan rantai dependensi yang rentan, dan merupakan cara yang disarankan untuk mengambil alih versi paket. Penimpaan adalah fitur asli npm. Ini menyediakan cara untuk mengganti paket di pohon dependensi Anda dengan versi lain, atau paket lain sepenuhnya.
Setelah mengatur penimpaan, Anda harus menghapus package-lock.json
dan node_modules
menjalankan npm install
lagi.
Anda mungkin tidak mengatur penimpaan untuk paket yang Anda andalkan secara langsung kecuali dependensi dan penimpaan itu sendiri berbagi spesifikasi yang sama persis. Misalnya, katakanlah axios: "0.18.0"
rentan dan kami ingin meningkatkan ke axios: "0.19.2"
. Secara langsung mengubah versi dependensi alih-alih menggunakan penimpaan.
{
"name": "npm-overrides",
"version": "1.0.0",
"license": "MIT",
"dependencies": {
"axios": "0.18.0"
},
"overrides": {
// BAD, will throw an EOVERRIDE error
// "axios": "0.19.2",
}
}
Perbarui versi dependensi tanpa mengatur penimpaan:
{
"name": "npm-overrides",
"version": "1.0.0",
"license": "MIT",
"dependencies": {
"axios": "0.19.2"
}
}
Memperbarui dependensi untuk Maven
Mekanisme resolusi dependensi tidak se canggih seperti yang digunakan di Yarn. Akibatnya, Anda hanya dapat memiliki satu versi dependensi dalam proyek. Untuk mengatasi masalah ini, Maven menggunakan algoritma "kemenangan terdekat". Artinya, ia menggunakan versi dependensi terdekat dengan proyek Anda di pohon dependensi.
Misalnya, Anda memiliki grafik dependensi berikut:
your-project --- A:1.0.0 --- B:2.0.0
\
\__ B:1.0.0
your-project
tergantung pada A:1.0.0
, yang pada gilirannya bergantung pada B:2.0.0
tetapi proyek Anda juga memiliki dependensi langsung pada B:1.0.0
. Jadi, Anda memiliki dua versi dependensi B yang berbeda dalam grafik dependensi Anda, tetapi dependensi versi 1.0.0 menang karena 'terdekat' dengan proyek Anda.
Dalam beberapa kasus, skenario ini mungkin berfungsi jika versi kompatibel. Namun, jika A:1.0.0
bergantung pada beberapa fitur B yang hanya tersedia dalam versi 2.0.0
maka perilaku ini tidak berfungsi. Dalam skenario terburuk, proyek ini mungkin masih dikompilasi tetapi gagal pada runtime.
Mari kita lihat contoh dunia nyata.
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.microsoft.customer360</groupId>
<artifactId>maven-dependencies</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>maven-dependencies</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.10.3</version>
</dependency>
</project>
Katakanlah versi com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider
Anda bergantung pada tergantung pada versi com.fasterxml.jackson.core:jackson-databind
yang memiliki deserialisasi kerentanan data yang tidak tepercaya.
Anda dapat memverifikasi dependensi ini dengan menggunakan plugin dependensi Maven. Dalam hal ini Anda akan menjalankan mvn dependency:tree -Dincludes=com.fasterxml.jackson.core:jackson-databind
dan mendapatkan output berikut:
> $ mvn dependency:tree -Dincludes=com.fasterxml.jackson.core:jackson-databind
[INFO] Scanning for projects...
[INFO]
[INFO] ------------< com.microsoft.customer360:maven-dependencies >------------
[INFO] Building maven-dependencies 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ maven-dependencies ---
[INFO] com.microsoft.customer360:maven-dependencies:jar:1.0-SNAPSHOT
[INFO] \- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:jar:2.10.3:compile
[INFO] \- com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:jar:2.10.3:compile
[INFO] \- com.fasterxml.jackson.core:jackson-databind:jar:2.10.3:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.928 s
[INFO] Finished at: 2020-04-27T14:30:55+02:00
[INFO] ------------------------------------------------------------------------
Pertama, periksa apakah ada versi com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider
baru yang tidak bergantung pada versi yang rentan dari com.fasterxml.jackson.core:jackson-databind
. Jika demikian, Anda dapat meningkatkan com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider
dan berhenti di sana. Jika tidak, ambil alih versi com.fasterxml.jackson.core:jackson-databind
.
Seperti yang ditunjukkan dalam cuplikan kode, saat menggunakan Maven "kemenangan terdekat", jadi resolusinya adalah menambahkan dependensi langsung ke com.fasterxml.jackson.core:jackson-databind
yang memperbaiki kerentanan.
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.microsoft.customer360</groupId>
<artifactId>maven-dependencies</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>maven-dependencies</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.10.3</version>
</dependency>
<!-- Dependency resolutions -->
<!-- jackson-jaxrs-json-provider -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.10.4</version>
</dependency>
</dependencies>
</project>
Anda dapat memverifikasi bahwa resolusi berfungsi dengan menjalankan mvn dependency:tree -Dincludes=com.fasterxml.jackson.core:jackson-databind
lagi.
$ mvn dependency:tree -Dincludes=com.fasterxml.jackson.core:jackson-databind
[INFO] Scanning for projects...
[INFO]
[INFO] ------------< com.microsoft.customer360:maven-dependencies >------------
[INFO] Building maven-dependencies 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ maven-dependencies ---
[INFO] com.microsoft.customer360:maven-dependencies:jar:1.0-SNAPSHOT
[INFO] \- com.fasterxml.jackson.core:jackson-databind:jar:2.9.10.4:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.827 s
[INFO] Finished at: 2020-04-27T14:32:42+02:00
[INFO] ------------------------------------------------------------------------
Disarankan untuk menambahkan komentar di dekat resolusi dependensi, sehingga siapa pun yang datang nanti tahu mengapa dependensi ada di sana. Ini dapat dihapus setelah dependensi akar menggunakan versi baru; jika tidak, Anda mengakumulasi dependensi.
Dalam proyek nyata, tambahkan dependensi setingkat mungkin rantai. Misalnya, Anda dapat menambahkan resolusi dalam file POM induk, alih-alih satu per satu di setiap file POM proyek.
Memperbarui dependensi untuk NuGet
Algoritma resolusi dependensi yang digunakan dalam NuGet mirip dengan Maven, karena hanya satu versi dependensi yang dapat digunakan. Namun, NuGet tidak menyematkan versi dependensi.
Misalnya, jika Anda memiliki dependensi <PackageReference Include="A" Version="1.2.3" />
, Anda mungkin mengharapkan paket ini setara dengan = 1.2.3
, tetapi sebenarnya berarti >= 1.2.3
. Untuk menyematkan versi yang tepat, Anda harus menggunakan Version="[1.2.3]"
. Untuk informasi selengkapnya, lihat dokumentasi rentang versi NuGet.
Selain perilaku rentang default, NuGet memulihkan versi terendah yang berlaku untuk memenuhi rentang. Perilaku ini berarti bahwa dalam banyak kasus Anda harus menentukan rentang.
Mari kita lihat proyek sampel ini, yang memiliki dependensi pada Microsoft.AspNetCore.App
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>NuGet.Dependencies</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.14" />
</ItemGroup>
</Project>
Ini tergantung pada versi Microsoft.AspNetCore.Http.Connections
yang rentan terhadap kerentanan eksekusi kode jarak jauh (RCE).
Pertama, Anda harus memeriksa untuk melihat apakah ada versi Microsoft.AspNetCore.App
yang diperbarui tergantung pada versi yang lebih baru dari Microsoft.AspNetCore.Http.Connections
. Jika demikian, Anda dapat meningkatkan Microsoft.AspNetCore.App
dan berhenti di sini. Jika tidak, Anda harus mengambil alih versinya Microsoft.AspNetCore.Http.Connections
tergantung pada.
NuGet tidak memiliki benang yang setara mengapa atau dependensi mvn:bawaan pohon, jadi cara term mudah untuk melihat pohon dependensi sering mengunjungi nuget.org. Jika Anda mengunjungi halaman NuGet untukMicrosoft.AspNetCore.App
, Anda melihat bahwa itu tergantung pada Microsoft.AspNetCore.Http.Connections
version >= 1.0.4 && < 1.1.0
. Atau, dalam rentang versi NuGet, sintaks perwakilannya adalah [1.0.4,1.1.0)
.
Kerentanan RCE dalam Microsoft.AspNetCore.Http.Connections
diperbaiki dalam versi 1.0.15
, jadi Anda perlu mengambil alih rentang[1.0.15, 1.1.0)
versi menjadi.
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>NuGet.Dependencies</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" Version="2.2.8" />
</ItemGroup>
<ItemGroup Label="Dependency Resolutions">
<!-- Microsoft.AspNetCore.App -->
<PackageReference Include="Microsoft.AspNetCore.Http.Connections" Version="[1.0.15,1.1.0)" />
</ItemGroup>
</Project>
Disarankan untuk menambahkan komentar di dekat resolusi dependensi sehingga siapa pun yang datang nanti tahu mengapa dependensi ada di sana. Ini dapat dihapus setelah dependensi akar menggunakan versi baru. Jika tidak, Anda mengakumulasi dependensi.
Bagaimana jika tidak ada perbaikan yang tersedia?
Ketika tidak ada perbaikan yang diketahui tersedia, opsi berikut tersedia sebagai metode remediasi lain hingga komponen yang ditingkatkan tersedia:
- Berhenti menggunakan komponen dan hapus dari kode Anda - penghapusan ini akan terdeteksi pada build Anda berikutnya dengan tugas pemindaian dependensi yang diinstal
- Berkontribusi perbaikan pada komponen itu sendiri. Jika organisasi Anda memiliki panduan khusus sekeliling kontribusi sumber terbuka, ikuti panduan tersebut.
- Menutup pemberitahuan. Namun, pemberitahuan tanpa perbaikan yang diketahui masih dapat menimbulkan ancaman keamanan bagi organisasi Anda. Kami menyarankan agar Anda tidak menutup pemberitahuan hanya karena tidak ada perbaikan yang diketahui.
Menutup pemberitahuan pemindaian dependensi
Untuk menutup pemberitahuan di Advanced Security, Anda memerlukan izin yang sesuai. Secara default, hanya administrator proyek yang diberikan kemampuan untuk menutup pemberitahuan Keamanan Tingkat Lanjut.
Untuk menutup pemberitahuan:
- Buka pemberitahuan yang ingin Anda tutup dan pilih pada pemberitahuan
- Pilih menu drop-down Tutup pemberitahuan
- Jika belum dipilih, pilih Risiko diterima atau Positif palsu sebagai alasan penutupan
- Menambahkan komentar opsional ke dalam kotak teks Komentar
- Pilih Tutup untuk mengirimkan dan menutup pemberitahuan
- Status pemberitahuan berubah dari Terbuka ke Ditutup dan menampilkan alasan pemecatan Anda
Tindakan ini hanya menutup pemberitahuan untuk cabang yang Anda pilih. Cabang lain yang mungkin berisi kerentanan yang sama tetap aktif sampai ditindaklanjuti. Pemberitahuan apa pun yang sebelumnya telah diberhentikan dapat dibuka kembali secara manual.
Mengelola pemberitahuan pemindaian dependensi pada permintaan pull
Jika pemberitahuan dibuat untuk perubahan dependensi baru dalam permintaan pull, pemberitahuan akan dilaporkan sebagai anotasi di bagian komentar tab Gambaran Umum dari permintaan pull dan sebagai pemberitahuan di tab repositori Keamanan Tingkat Lanjut, dengan hasil pemilih cabang baru untuk cabang permintaan pull.
Anda dapat melihat manifes paket yang terpengaruh, melihat ringkasan temuan, dan mengatasi anotasi di bagian Gambaran Umum.
Untuk menutup pemberitahuan permintaan pull, Anda harus menavigasi ke tampilan detail pemberitahuan untuk menutup pemberitahuan dan menyelesaikan anotasi. Jika tidak, hanya mengubah status komentar (1) menyelesaikan anotasi tetapi tidak menutup atau memperbaiki pemberitahuan yang mendasarinya.
Untuk melihat seluruh kumpulan hasil untuk cabang permintaan pull Anda, navigasi ke Repos>Advanced Security dan pilih cabang permintaan pull Anda. Memilih Perlihatkan detail selengkapnya (2) pada anotasi akan mengarahkan Anda ke tampilan detail pemberitahuan di tab Keamanan Tingkat Lanjut.
Tip
Anotasi hanya akan dibuat ketika baris kode yang terpengaruh sepenuhnya unik untuk perbedaan permintaan pull.
Pemecahan masalah pemindaian dependensi
Pemindaian dependensi tidak mengidentifikasi komponen apa pun
Jika tugas pemindaian dependensi selesai tanpa menandai komponen apa pun dan gagal menghasilkan pemberitahuan untuk komponen dengan kerentanan yang diketahui, pastikan Anda memiliki langkah pemulihan paket sebelum AdvancedSecurity-Dependency-Scanning@1
tugas.
Misalnya, untuk proyek C# (.NET Core), berikut adalah cuplikan YAML sampel:
- task: DotNetCoreCLI@2
displayName: 'Restore NuGet packages'
inputs:
command: 'restore'
projects: '**/*.csproj'
# If you are using a private package feed such as Azure Artifacts, you will need additional variables.
# For more information, see https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/dotnet-core-cli-v2?view=azure-pipelines
feedsToUse: 'select'
...
- task: AdvancedSecurity-Dependency-Scanning@1
Untuk proyek JavaScript, berikut adalah cuplikan YAML sampel:
- task: Npm@1
displayName: 'npm install'
inputs:
command: 'install'
workingDir: '$(System.DefaultWorkingDirectory)'
- task: AdvancedSecurity-Dependency-Scanning@1
Pemindaian dependensi tidak mengambil kerentanan baru
Jika Anda menjalankan build baru tetapi tidak melihat kerentanan baru seperti yang diharapkan, pastikan bahwa build dijalankan dengan penerapan baru.
Batas waktu tugas pemindaian dependensi
Waktu default yang dijalankan tugas pemindaian dependensi sebelum waktu habis adalah 300 detik, atau 5 menit. Jika waktu tugas habis sebelum penyelesaian, Anda dapat mengatur variabel DependencyScanning.Timeout
alur , yang mengharapkan bilangan bulat yang mewakili detik, seperti DependencyScanning.Timeout: 600
. Apa pun di bawah batas waktu default 300 detik tidak berpengaruh.
Untuk menggunakan variabel ini, tambahkan DependencyScanning.Timeout
sebagai variabel alur:
- task: AdvancedSecurity-Dependency-Scanning@1
- env:
DependencyScanning.Timeout: 600
Skenario break-glass untuk tugas build
Jika tugas build pemindaian dependensi memblokir keberhasilan eksekusi alur Anda dan Anda perlu melewati tugas build secara mendesak, Anda dapat mengatur variabel DependencyScanning.Skip: true
alur .
Izin tugas pemindaian dependensi
Tugas build pemindaian dependensi menggunakan identitas alur untuk memanggil API REST Keamanan Tingkat Lanjut. Secara default, alur dalam proyek yang sama memiliki akses untuk mengambil pemberitahuan. Jika Anda menghapus izin tersebut dari akun layanan build atau jika Anda memiliki penyiapan kustom (misalnya, alur yang dihosting dalam proyek yang berbeda dari repositori), Anda harus memberikan izin ini secara manual.
Berikan Advanced Security: View Alerts
izin ke akun layanan build yang digunakan dalam alur Anda, yang untuk alur cakupan proyek adalah [Project Name] Build Service ([Organization Name])
, dan untuk alur cakupan koleksi adalah Project Collection Build Service ([Organization Name])
.