Critical Security Vulnerability for `celo-blockchain 1.0.0`

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.

Action items

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:

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.

Please reach out to the @cLabs team on Discord if you have any questions or need support in this process.

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.