
Isoliertes Regression- und Sicherheitskontroll-Labor für CVE-2026-59891 in @sigstore/oci
Ein isoliertes Übungs- und Read-only-Audit-Projekt, das die tatsächlich verwundbare Version und die korrigierte Version von @sigstore/oci mit identischen Eingaben vergleicht und die Expositionsbedingungen je Umgebung prüft.
Der CVE Reporter dieses Projekts ist gyubin02.
Zusammenfassung für Bewerbung und Vorstellungsgespräch: Fallbeispiel zur Automatisierung des Schwachstellenmanagements CVE-2026-59891
Der Kern von CVE-2026-59891 ist eine Hostname-Verwechslung, die bei der Auswahl von Registry-Anmeldeinformationen auftritt.
0.7.0: cr.io kann Anmeldeinformationen für ghcr.io auswählen, weil cr.io als Zeichenkette in ghcr.io enthalten ist.0.7.1: Nach der Normalisierung des Hostnamens werden nur exakt übereinstimmende Anmeldeinformationen ausgewählt.Dieses Repository verifiziert zunächst automatisch zwei Szenarien der Credential-Auswahl.
ghcr.io vorhanden, das Ziel ist jedoch cr.iocr.io vorhanden, die exakt mit dem Ziel übereinstimmenDie verwundbare Version wählt im ersten Szenario die falschen Anmeldeinformationen aus, während die korrigierte Version dies ablehnen muss. In beiden Versionen muss das zweite, reguläre Szenario erfolgreich sein.
Zusätzlich wurde ein dynamischer Vergleich mit einer einmaligen Mock-Registry auf 127.0.0.1 anstelle einer echten externen Registry hinzugefügt. Die verwundbare Version 0.7.0 stellt zwei Anfragen an localhost, und nach der Authentifizierungs-Challenge wird bei der zweiten Anfrage ein synthetischer Authorization-Header beobachtet. Die korrigierte Version 0.7.1 wird bereits bei der Credential-Auswahl abgelehnt, sodass keine Anfragen erfolgen. In den Ergebnissen werden anstelle der Header-Werte nur die Beobachtung und die Anzahl der Anfragen festgehalten.
cve-2026-59891-audit liest nur die Metadaten der package-lock.json des Zielprojekts und der explizit angegebenen Docker-Config und unterscheidet Folgendes:
@sigstore/ociSofortige Ausführung mit synthetischen Fixtures:
npm run audit:demo
Andere Node.js-Projekte prüfen:
npm run audit:project -- \
--project ../target-project \
--docker-config ../review-copy/config.json \
--image cr.io/example/demo \
--destination-trust unknown \
--format markdown \
--output reports/cve-2026-59891.md
--destination-trust muss genau eines der folgenden angeben.
trusted: Bestätigt, dass das Ziel durch Code und Allowlist eingeschränkt istuntrusted: Externe Eingaben oder Workflow-Eingaben beeinflussen das Zielunknown: Noch nicht bestätigtDie Bewertung wird in exposure_conditions_met, potential_exposure,
affected_component_only, not_detected, indeterminate unterteilt.
Auch not_detected ist lediglich ein Ergebnis für den dokumentierten
Eingabebereich und bedeutet weder „sicher“ noch „regelkonform“.
~/.docker/config.json nicht.HOME und ein wertloses
lab-user / LAB_ONLY_FAKE_TOKEN verwendet.HOME, Lab-Markierung und Fake-Werte
alle exakt übereinstimmen.fetch-
Aufrufe mit einem Tripwire.127.0.0.1-Port
zugelassen. Externes HTTP, HTTP an andere Ports, DNS-Resolver, TLS, UDP sowie
globales fetch und WebSocket werden blockiert.--docker-config nicht weglassen und leitet die Datei nicht
aus HOME oder DOCKER_CONFIG ab.npm-shrinkwrap.json mit höherer Priorität gefunden werden, wird nicht
vorschnell auf Sicherheit geschlossen, sondern es schlägt fehl.Da absichtlich verwundbare Pakete installiert werden, ist die npm-Paketverteilung
mit "private": true gesperrt. Sie darf nicht als Abhängigkeit von
Produktionscode verwendet werden.
Aus diesem Grund ist es ein erwartetes Ergebnis, dass npm audit 0.7.0 meldet;
Umfang und Grund der Ausnahme sind in SECURITY.md dokumentiert.
Anforderungen: Node.js 22.22.2+, 24.15.0+ oder 26 und höher. Die empfohlene
Version ist in .nvmrc festgeschrieben.
npm ci --ignore-scripts
npm test
npm run demo
npm run dynamic:demo
npm run audit:fixture
npm run audit:demo
npm run evidence
Zentrale erwartete Ergebnisse von npm run demo:
0.7.0 collision credential-selected
0.7.1 collision credential-rejected
0.7.0 exact credential-selected
0.7.1 exact credential-selected
Regression result: PASS
Die zentralen erwarteten Ergebnisse von npm run dynamic:demo:
{
"vulnerable": {
"packageVersion": "0.7.0",
"credentialSelection": "credential-selected",
"requestCount": 2,
"authorizationObserved": true,
"digestVerified": true,
"networkPolicy": "exact-loopback-only"
},
"fixed": {
"packageVersion": "0.7.1",
"credentialSelection": "credential-rejected",
"requestCount": 0,
"authorizationObserved": false,
"digestVerified": false,
"networkPolicy": "exact-loopback-only"
},
"regressionResult": "PASS"
}
Es gibt insgesamt 34 automatisierte Tests. npm run evidence erzeugt insgesamt 7 Dateien: 6 zu prüfende Artefakte sowie SHA256SUMS, das deren Integrität verifiziert.