setFips() / setEngine do not evict ciphers cache
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- JavaScript
- Sterne
- 122k
- Forks
- 37.3k
- Ø Merge
- 4 T. 2 Std.
- Gemergte PRs (30 T.)
- 283
Beschreibung
> require('crypto').getCiphers().length
130
> require('crypto').setFips(true)
undefined
> require('crypto').getCiphers().length
130
but
> require('crypto').setFips(true)
undefined
> require('crypto').getCiphers().length
0
Also (unverified):
getCiphersmemoizes the cipher name list forever (cachedResult(() => filterDuplicateStrings(_getCiphers()))). WhensetEngine(id, flags)(also exported from this module) successfully loads an OpenSSL engine that registers additional ciphers, those new ciphers are not reflected in subsequentgetCiphers()results because the cache is never invalidated. Similarly, on BoringSSL builds the cache is force-populated during module initialization viaconditionalAlgorithms(the'ChaCha20-Poly1305'probe callsgetCiphers()), freezing the answer before any user code runs. The sibling_hashCachehelper in the same file explicitly clears on snapshot build / dynamic-link scenarios viaaddSerializeCallback;getCiphershas no such mechanism.
getHashesreturns a permanently-cached list from_getHashes()(viacachedResult). After a successfulsetEngine(id, flags)call (exported from this same module) loads an OpenSSL engine that registers new digest algorithms,getHashes()will continue to return the pre-engine snapshot. Downstream consumers — including this file's ownconditionalAlgorithmsgates forcSHAKE*/SHA3-*/ChaCha20-Poly1305 (evaluated once at module-load, so already locked in) and any external callers usingcrypto.getHashes()— will not observe engine-provided hashes. Contrast with the siblinggetHashCache(line 81–91) which is explicitly designed to be refreshed.
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Finde die Datei des crypto-Moduls, die cachedResult, setFips, setEngine, conditionalAlgorithms und den getHashCache-Helfer in den Zeilen 81–91 enthält. Verfolge, wie getCiphers und getHashes zwischengespeichert werden und wie das bestehende Verhalten zur Aktualisierung des Caches funktioniert; abgeschlossen ist die Aufgabe, wenn erfolgreiche FIPS- oder Engine-Änderungen in den nachfolgenden Ergebnissen der Algorithmenlisten widergespiegelt werden.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- javascript, node.js
- Bereich
- security
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Ruhig
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 48/100