Biblioteka @dfinity/identity generuje pary kluczy ed25519 przy użyciu niewiarygodnego (insecure) ziarna losowości zamiast kryptograficznie bezpiecznego źródła. Podatność może prowadzić do kompromitacji klucza prywatnego tożsamości, a w konsekwencji do utraty środków lub kontroli nad zasobami na platformie Internet Computer.
▸ Pokaż oryginał (EN)
Impact: The library offers a function to generate an ed25519 key pair via Ed25519KeyIdentity.generate with an optional param to provide a 32 byte seed value, which will then be used as the secret key. When no seed value is provided, it is expected that the library generates the secret key using secure randomness. However, a recent change broke this guarantee and uses an insecure seed for key pair generation. Since the private key of this identity (535yc-uxytb-gfk7h-tny7p-vjkoe-i4krp-3qmcl-uqfgr-cpgej-yqtjq-rqe) is compromised, one could lose funds associated with the principal on ledgers or lose access to a canister where this principal is the controller.
Funkcja Ed25519KeyIdentity.generate umożliwia generowanie pary kluczy ed25519 z opcjonalnym 32-bajtowym ziarnem (seed) podawanym przez użytkownika. Gdy ziarno nie jest przekazywane przez wywołującego, biblioteka powinna samodzielnie wygenerować klucz prywatny przy użyciu kryptograficznie bezpiecznej losowości. Na skutek błędu wprowadzonego w jednej z późniejszych zmian kodu, biblioteka zaczęła używać przewidywalnego, niezabezpieczonego ziarna, co sprawia, że generowane klucze prywatne są deterministyczne i możliwe do odtworzenia przez atakującego. Znany, skompromitowany klucz prywatny odpowiada konkretnej tożsamości (535yc-uxytb-gfk7h-tny7p-vjkoe-i4krp-3qmcl-uqfgr-cpgej-yqtjq-rqe).
Atakujący może odtworzyć klucz prywatny tożsamości wygenerowanej przez podatną wersję biblioteki, co umożliwia przejęcie kontroli nad powiązanymi zasobami — w tym kradzież środków z portfeli (ledgerów) oraz przejęcie kontroli nad kanisterami (canisters), dla których dana tożsamość jest kontrolerem.
Należy zaktualizować pakiet @dfinity/identity do wersji 1.0.1 lub nowszej, dostępnej na npm (https://www.npmjs.com/package/@dfinity/identity/v/1.0.1). Wszelkie pary kluczy wygenerowane przez podatne wersje biblioteki bez podania własnego bezpiecznego ziarna należy uznać za skompromitowane i niezwłocznie wymienić, a powiązane zasoby (środki, kontrola nad kanisterami) zabezpieczyć poprzez zmianę tożsamości kontrolera.
Biblioteka @dfinity/identity (pakiet npm) — wersje, w których wprowadzono zmianę psującą generowanie bezpiecznego ziarna; zgodnie z referencjami poprawka dostępna jest w wersji 1.0.1
W opisie technicznym wprost wskazano skompromitowany identyfikator tożsamości: 535yc-uxytb-gfk7h-tny7p-vjkoe-i4krp-3qmcl-uqfgr-cpgej-yqtjq-rqe. Każda aplikacja korzystająca z tej konkretnej tożsamości powinna zostać potraktowana jako bezpośrednio zagrożona.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:NDfinity Icp Js Core
APPDfinity0.20.0 – 1.0.1 (bez)
Powiązane podatności
When a canister method is called via ic_cdk::call* , a new Future CallFuture is created and can be awaited by...
The Candid library causes a Denial of Service while parsing a specially crafted payload with 'empty' data typ...
Motoko's incremental garbage collector is impacted by an uninitialized memory access bug, caused by incorrect ...
When storing unbounded types in a BTreeMap, a node is represented as a linked list of "memory chunks". It was ...