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 der ServiceIndexRessource entfernt werden.
  • @namemuss innerhalb des Indexes eindeutig sein, darf zwischen 1 und 32 Zeichen lang sein und darf nur die Zeichen A bis Z, a bis z, 0 bis 9, - 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.ToLowerInvariantKleinbuchstaben 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)"
        }
    ]
}