The cLabs team has discovered a security vulnerability that affects the
celo-blockchain codebase. While the difficulty of executing this attack is, in our opinion, very high, and we have not received information from the community to suggest this vulnerability has been exploited to date, its severity is critical.
It is our recommendation that you immediately patch any
celo-blockchain nodes (full nodes, validator proxies, and validators) on the public Celo Mainnet.
A patched version (
v1.0.1) of the
celo-blockchain code, identical to the
v1.0.0 release except for the fix for this issue (about 10 additional lines of code in a single function) can be found in this Docker image: us.gcr.io/celo-org/celo-node:f4bda6d027f0af6c68ae4d146abe791739ae6cba
Validators may upgrade by performing key rotation to switch over to a proxy and validator deployed with the new Docker image at the next epoch boundary. To apply the patch sooner, validators may restart existing instances with the new Docker image. Please note that it is only strictly necessary to deploy the fix for proxies, but we recommend upgrading both proxy and validator.
As of now, the source code for the fix is not public. Once a quorum of validators has upgraded, we will push the fix to the public
celo-blockchain repo so that users who build from the source can upgrade. This delay will prevent would-be attackers from being able to exploit this vulnerability.
Details of the changes
An attacker that possesses an elected validator could potentially use this vulnerability to cause another node to follow a maliciously constructed fork of the blockchain that the attacker controls. This is only possible if the validator is elected and the validator node is directly peered to the target node. At the time of writing, an attacker would need over 1.5 million CELO to elect a validator.
cLabs has already applied and tested this fix to full nodes that it runs on Celo mainnet including its
forno hosted node service, and all full nodes deployed with oracles.
This fix has already been communicated to and deployed by exchanges and custodians building on Celo.
This issue and the fix have been reviewed by Trail of Bits. We anticipate that they will publish a statement about it shortly.
Many thanks to Georgios Konstantopoulos for discovering this issue and to Trail of Bits for assisting with verification.