Biblioteka OpenZeppelin Contracts zawiera podatność pozwalającą na atak na niezainicjowane kontrakty implementacyjne używające wzorca `UUPSUpgradeable`. Błąd może umożliwić atakującemu przejęcie kontroli nad kontraktem lub jego uaktualnienie w sposób nieautoryzowany, co w środowisku blockchain może skutkować nieodwracalną utratą środków lub danych.
▸ Pokaż oryginał (EN)
OpenZeppelin Contracts is a library for smart contract development. In affected versions upgradeable contracts using `UUPSUpgradeable` may be vulnerable to an attack affecting uninitialized implementation contracts. A fix is included in version 4.3.2 of `@openzeppelin/contracts` and `@openzeppelin/contracts-upgradeable`. For users unable to upgrade; initialize implementation contracts using `UUPSUpgradeable` by invoking the initializer function (usually called `initialize`). An example is provided [in the forum](https://forum.openzeppelin.com/t/security-advisory-initialize-uups-implementation-contracts/15301).
Kontrakty implementacyjne oparte na wzorcu `UUPSUpgradeable` wymagają jawnej inicjalizacji poprzez wywołanie funkcji inicjalizującej (zazwyczaj `initialize`). Jeśli kontrakt implementacyjny nie zostanie zainicjowany, jego stan pozostaje niezdefiniowany (CWE-665: Improper Initialization), co umożliwia niepowołanej osobie wywołanie funkcji inicjalizującej i przejęcie uprawnień właściciela kontraktu. Atakujący może następnie użyć tych uprawnień do modyfikacji lub zniszczenia logiki kontraktu proxy.
Atakujący może przejąć kontrolę nad niezainicjowanym kontraktem implementacyjnym, co może prowadzić do pełnego naruszenia poufności, integralności i dostępności — w tym nieodwracalnego zniszczenia kontraktu lub kradzieży środków.
Należy zaktualizować biblioteki `@openzeppelin/contracts` oraz `@openzeppelin/contracts-upgradeable` do wersji 4.3.2 lub nowszej. Jeśli aktualizacja nie jest możliwa, należy ręcznie zainicjować kontrakty implementacyjne poprzez wywołanie funkcji inicjalizującej (`initialize`) zgodnie z poradą opublikowaną na forum OpenZeppelin (link w referencjach).
Biblioteki `@openzeppelin/contracts` oraz `@openzeppelin/contracts-upgradeable` w wersjach poprzedzających 4.3.2, w których stosowany jest wzorzec `UUPSUpgradeable`.
OpenZeppelin opublikowało dedykowane security advisory (GHSA-5vp3-v4hc-gx76) wraz z przykładem inicjalizacji kontraktu dostępnym na forum społecznościowym.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HOpenzeppelin Contracts
APPOpenzeppelin4.1.0 – 4.3.2 (bez)
Powiązane podatności
OpenZeppelin TimelockController — privilege escalation przez rolę executor
OpenZeppelin Contracts — privilege escalation w TimelockController
OpenZeppelin Contracts is a library for secure smart contract development. The functions `ECDSA.recover` and `...
OpenZeppelin Contracts is a library for secure smart contract development. This issue concerns instances of Go...
OpenZeppelin Contracts is a library for smart contract development. Versions 4.1.0 until 4.7.1 are vulnerable ...