Informasi kerentanan
Klien NuGet, mulai dari versi 6.7, dapat mengunduh informasi kerentanan paket yang diketahui untuk digunakan dalam skenario seperti memeriksa paket selama operasi pemulihan. Meskipun sumber daya metadata paket juga berisi informasi kerentanan yang diketahui, jika aplikasi perlu memeriksa sejumlah besar paket untuk kerentanan yang diketahui, jauh lebih cepat untuk mengunduh file kerentanan dan pencarian yang diketahui secara lokal, daripada membuat sejumlah besar permintaan HTTP. Misalnya, ini memungkinkan Pemulihan NuGet untuk dengan cepat memeriksa paket yang dipulihkan untuk kerentanan yang diketahui, yang secara historis tidak pernah mengunduh detail paket dari sumber daya metadata paket.
API terdiri dari setidaknya dua file, indeks kerentanan dan satu atau beberapa file halaman kerentanan. Data kerentanan yang diketahui dapat dipartisi ke dalam beberapa file, dan indeks kerentanan memberi klien informasi yang diperlukan untuk menyimpan file, dan memperbarui cache, secara efisien.
Sumber daya yang digunakan untuk membangun URL ini adalah sumber daya yang VulnerabilityInfo
ditemukan dalam indeks layanan.
Halaman yang tercantum dalam indeks kerentanan idealnya harus dioptimalkan untuk memaksimalkan penembolokan, dan karenanya meminimalkan pembaruan ke file besar. Ini akan memungkinkan klien untuk meminimalkan frekuensi yang diperlukan untuk mengunduh pembaruan.
Strategi yang disarankan untuk pemartisian data kerentanan adalah memiliki dua halaman, base.json
dan updates.json
.
File base.json
diperbarui secara berkala (misalnya sebulan sekali), dan berisi semua kerentanan yang diketahui pada saat file diregenerasi.
File updates.json
harus berisi saran baru yang diterbitkan sejak base.json
terakhir kali diregenerasi.
Ini akan memungkinkan klien untuk jarang mengunduh besar base.json
, sementara file yang sering berubah updates.json
selalu relatif kecil.
Klien NuGet menggabungkan data dari beberapa file secara aditif, dan dapat memuat file dalam urutan apa pun.
Skema file data tidak memungkinkan modifikasi atau redaksi kerentanan yang diketahui dari file lain.
Oleh karena itu jika sumber data kerentanan server (misalnya Database Penasihat GitHub) memodifikasi saran yang ada, server NuGet harus memodifikasi halaman yang sebelumnya dilaporkan informasi kerentanan.
Salah satu cara untuk mencapainya dengan skema partisi yang disarankan adalah dengan memperlakukan semua modifikasi dan penghapusan kerentanan sebagai pemicu untuk meregenerasi file lengkap base.json
, dan kosong updates.json
.
Nilai berikut @type
digunakan:
@type nilai | Catatan |
---|---|
KerentananInfo/6.7.0 | Rilis awal |
Indeks kerentanan adalah array objek JSON dengan properti berikut:
Nama | Tipe | Diperlukan | Catatan |
---|---|---|---|
@name | string | yes | Nama pendek untuk file, digunakan sebagai kunci cache. |
@id | string | yes | URL lengkap (absolut) ke file data kerentanan. |
@updated | string | yes | String ISO 8601 yang mewakili tanggal dan waktu file terakhir diperbarui, idealnya dengan zona waktu UTC. |
komentar | string | no | String deskriptif opsional. |
Pembatasan berikut berlaku:
- Indeks harus berupa array objek dengan antara 1 dan 16 item.
Jika server tidak memiliki data kerentanan (nol halaman), maka harus menghapus
VulnerabilityInfo
sumber daya dariServiceIndex
. @name
harus unik dalam indeks, harus panjangnya antara 1 dan 32 karakter, dan hanya dapat menggunakan karakterA
untuk , kez
,0
a
ke9
,-
, atau_
Z
.@id
harus berupa URL absolut, bukan URL relatif.
File halaman kerentanan adalah objek JSON yang digunakan sebagai kamus. Kunci properti adalah id paket huruf kecil dan nilai properti adalah array dari objek berikut dengan properti berikut:
Nama | Tipe | Diperlukan | Catatan |
---|---|---|---|
keparahan | Integer | yes | 0 berarti rendah, 1 berarti sedang, 2 berarti tinggi, 3 berarti kritis. |
url | string | yes | URL tempat pengguna bisa mendapatkan informasi selengkapnya tentang kerentanan. |
versi | string | yes | Rentang versi yang rentan, menggunakan sintaks rentang versi NuGet. |
ID paket (kunci objek akar) harus di-lowercas dengan String.ToLowerInvariant
.
Daftar kerentanan yang diketahui untuk paket harus diurutkan dalam urutan turun dari versi maksimum rentang versi, diikuti dengan versi turun dari versi min, diikuti oleh urutan naik URL. Rentang dengan versi null min atau maks (tidak terbatas) dalam rentang versi harus diurutkan sebelum versi non-null (terikat).
Halaman kosong, yang tidak memberikan kerentanan yang diketahui, harus berupa array JSON kosong ([]
).
Berikut adalah sampel indeks kerentanan:
[
{
"@name": "base",
"@id": "https://nuget.contoso.com/v3/vulnerabilities/3bb6b300-2f74-45bc-af06-746fd21c024b.json",
"@updated": "2023-06-01T06:14:58.4159909Z",
"comment": "The base data for vulnerability update periodically"
},
{
"@name": "update",
"@id": "https://nuget.contoso.com/v3/vulnerabilities/ffd572cd-33f3-4372-8714-a9cab2e86b45.json",
"@updated": "2023-06-14T11:35:30.3155764Z",
"comment": "The patch data for the vulnerability. Contains all the vulnerabilities since base was last updated."
}
]
Berikut adalah sampel file data kerentanan:
{
"contoso.library": [
{
"url": "https://cve.contoso.com/advisories/1",
"severity": 1,
"versions": "(, 2.0.0)"
},
{
"url": "https://cve.contoso.com/advisories/2",
"severity": 2,
"versions": "(1.0.0, 2.0.0)"
}
],
"contoso.utilities": [
{
"url": "https://cve.contoso.com/advisories/3",
"severity": 3,
"versions": "(, 1.0.0)"
}
]
}