Informationen zu Sicherheitsrisiken
NuGet-Client ab Version 6.7 kann bekannte Paketrisikoinformationen herunterladen, um sie in Szenarien wie dem Überprüfen von Paketen während Wiederherstellungsvorgängen zu verwenden. Die Paketmetadatenressource enthält auch bekannte Sicherheitsrisikeninformationen, wenn eine App jedoch eine große Anzahl von Paketen auf bekannte Sicherheitsrisiken überprüfen muss, ist es viel schneller, eine Datei bekannter Sicherheitsrisiken herunterzuladen und lokal nachzuschlagen, anstatt eine große Anzahl von HTTP-Anforderungen zu erstellen. So kann NuGet Restore beispielsweise schnell wiederhergestellte Pakete auf bekannte Sicherheitsrisiken überprüfen, die in der Vergangenheit nie Paketdetails aus der Paketmetadatenressource heruntergeladen haben.
Die API besteht aus mindestens zwei Dateien, dem Sicherheitsrisikoindex und einer oder mehreren Seitendateien für Sicherheitsrisiken. Bekannte Sicherheitsrisikodaten können in mehrere Dateien partitioniert werden, und der Sicherheitsrisikoindex stellt Clients Informationen bereit, die zum Zwischenspeichern von Dateien erforderlich sind, und den Cache effizient zu aktualisieren.
Die Zum Erstellen dieser URL verwendete Ressource ist die VulnerabilityInfo
Ressource im Dienstindex.
Vorgeschlagene Partitionierungsstrategie
Die im Sicherheitsrisikoindex aufgeführten Seiten sollten idealerweise optimiert werden, um das Zwischenspeichern zu maximieren und daher Updates für große Dateien zu minimieren. Auf diese Weise können Clients die Häufigkeit minimieren, mit der Updates heruntergeladen werden müssen.
Eine vorgeschlagene Strategie für die Partitionierung von Sicherheitsrisikendaten besteht darin, zwei Seiten base.json
und updates.json
.
Die base.json
Datei wird regelmäßig aktualisiert (z. B. einmal pro Monat), und enthält alle bekannten Sicherheitsrisiken zum Zeitpunkt der Neugenerierung der Datei.
Die updates.json
Datei sollte alle neuen Empfehlungen enthalten, die seit der base.json
letzten Neugenerierung veröffentlicht wurden.
Dadurch können Clients die große base.json
Datei selten herunterladen, während die häufig geänderte updates.json
Datei immer relativ klein ist.
NuGet-Clients kombinieren die Daten aus mehreren Dateien additiv und können die Dateien in beliebiger Reihenfolge laden.
Das Datendateischema lässt keine Änderung oder Redaction bekannter Sicherheitsrisiken aus einer anderen Datei zu.
Wenn daher die Sicherheitsrisikodatenquelle eines Servers (z. B. die GitHub Advisories-Datenbank) eine vorhandene Empfehlung ändert, muss der NuGet-Server die Seite ändern, auf der die Sicherheitsrisikoinformationen zuvor gemeldet wurden.
Eine Möglichkeit, dies mit dem vorgeschlagenen Partitionsschema zu erreichen, besteht darin, alle Sicherheitslückenänderungen und Löschungen als Trigger zu behandeln, um die vollständige base.json
Datei neu zu generieren und leer zu sein updates.json
.
Versionsverwaltung
Die folgenden @type
-Werte werden verwendet:
Wert vom Typ @type | Hinweise |
---|---|
VulnerabilityInfo/6.7.0 | Erstrelease |
Verwundbarkeitsinformationen
Der Schwachstellenindex ist ein JSON-Array von Objekten mit den folgenden Eigenschaften:
Name | Type | Erforderlich | Notizen |
---|---|---|---|
@name | Zeichenfolge | ja | Ein kurzer Name für die Datei, der als Cacheschlüssel verwendet wird. |
@id | Zeichenfolge | ja | Die vollständige (absolute) URL zu einer Sicherheitsrisikodatendatei. |
@updated | Zeichenfolge | ja | Eine ISO 8601-Zeichenfolge, die das Datum und die Uhrzeit der letzten Aktualisierung der Datei darstellt, idealerweise mit der UTC-Zeitzone. |
Kommentar | Zeichenfolge | Nein | Eine optionale beschreibende Zeichenfolge. |
Es gelten folgende Einschränkungen:
- Der Index muss ein Array von Objekten mit zwischen 1 und 16 Elementen sein.
Wenn der Server keine Sicherheitsrisikodaten (Nullseiten) enthält, muss die
VulnerabilityInfo
Ressource aus derServiceIndex
Ressource entfernt werden. @name
muss innerhalb des Indexes eindeutig sein, darf zwischen 1 und 32 Zeichen lang sein und darf nur die ZeichenA
bisZ
,a
bisz
,0
bis9
,-
oder_
enthalten.@id
muss eine absolute URL und keine relative URL sein.
Verwundbarkeitsseite
Seitendateien für Sicherheitsrisiken sind ein JSON-Objekt, das als Wörterbuch verwendet wird. Eigenschaftsschlüssel sind die Kleinbuchstaben-Paket-ID und Eigenschaftswerte sind ein Array des folgenden Objekts mit den folgenden Eigenschaften:
Name | Type | Erforderlich | Hinweise |
---|---|---|---|
severity | integer | ja | 0 bedeutet niedrig, 1 bedeutet mittel, 2 bedeutet hoch, 3 bedeutet kritisch. |
url | Zeichenfolge | ja | URL, über die Benutzer weitere Informationen zur Sicherheitsanfälligkeit erhalten können. |
versions | Zeichenfolge | ja | Der Versionsbereich, der anfällig ist, mithilfe der Versionsbereichssyntax von NuGet. |
Paket-IDs (Schlüssel des Stammobjekts) müssen in String.ToLowerInvariant
Kleinbuchstaben geschrieben werden.
Die Liste der bekannten Sicherheitsrisiken für ein Paket sollte in absteigender Reihenfolge der maximalen Version des Versionsbereichs sortiert werden, gefolgt von absteigender Version der Min.-Version, gefolgt von der aufsteigenden Reihenfolge der URL. Bereiche mit null min- oder max.-Versionen (ungebunden) in einem Versionsbereich sollten vor Nicht-Null-Versionen (gebunden) sortiert werden.
Eine leere Seite, die keine bekannten Sicherheitsanfälligkeiten bereitstellt, muss ein leeres JSON-Array ([]
) sein.
Proben
Hier ist ein Beispiel für einen Sicherheitsrisikoindex:
[
{
"@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."
}
]
Hier ist ein Beispiel für eine Datendatei für Sicherheitsrisiken:
{
"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)"
}
]
}