Skip to content

Latest commit

 

History

History
83 lines (83 loc) · 168 KB

CL-2021-12-01.md

File metadata and controls

83 lines (83 loc) · 168 KB
Affected Clients UID Bug Type Summary Links Security Advisory Reported Fixed Date Published CVSS Severity CVE Bounty Hunter Bounty Points Bounty Reward (USD)
Lighthouse CL-2020-01 Network agent crashes lighthouse discovery DoS A network agent, capable of creating a large number of discv5 sessions, crashed the discovery service on several lighthouse nodes. ethereum/public-attacknets#4 2020-03-27 2020-07-21 2021-12-01 Medium Jonny Rhea 500 1000
Prysm CL-2020-02 DoS Attack DoS Prysm nodes are vulnerable to a DoS attack that prevents them from participating in consensus. ethereum/public-attacknets#12 https://groups.google.com/g/golang-announce/c/NyPIaucMgXo/m/GdsyQP6QAAAJ 2020-07-01 2020-08-06 2021-12-01 High Jonny Rhea 1250 2500
Teku CL-2020-03 DoS Attack DoS Teku nodes are vulnerable to a simple DoS attack that prevents them from participating in consensus. ethereum/public-attacknets#7 2020-07-26 2020-07-31 2021-12-01 High Jonny Rhea 1250 2500
Prysm CL-2020-04 L4 Distributed Denial of Service attack ruins the P2P connectivity and stops finality DoS Prysm nodes are vulnerable to L4 DDoS attacks. The attacker can stop finality for any amount of time. ethereum/public-attacknets#9 2020-07-29 2020-07-30 2021-12-01 High Alexander Sadovskyi 2500 5000
Prysm CL-2020-05 Remote crash nodes over p2p DoS There is (was) a bug in Prysm that made it possible for an attacker to crash arbitrary remote nodes via p2p protocol. ethereum/public-attacknets#11 2020-07-29 2020-07-29 2021-12-01 High Martin Holst Swende 2500 0
All clients CL-2020-06 DoS Attack due to Discv5 spec DoS A DoS attack that exploits an RLP ecoding error (and lack of packet size validation) that eventually causes client crash and reply with a flood of WHOAREYOU messages that are larger than the attackers message. https://hackmd.io/Bmq_GlVXQtu3Z-YfVVFioA?view 2020-08-25 2020-10-07 2021-12-01 High Jonny Rhea 5000 10000
Teku CL-2020-07 DoS Attack via gossipsub DoS Teku nodes are vulnerable to a resource exhaustion attack caused by allocating a buffer from an unchecked attacker-controlled length field causing a DoS condition that prevents them from participating in consensus. ethereum/public-attacknets#15 2020-09-04 2020-09-04 2021-12-01 High Tintin 2500 5000
Teku CL-2020-08 Crash discovery service with malformed WHOAREYOU packet DoS Using a malformed RLP packet, we crash the discovery service of Teku permanently. ethereum/public-attacknets#18 2020-09-08 2020-09-10 2021-12-01 High Antoine Toulme 2500 5000
Teku CL-2020-09 DoS Attack: UDP random 46 bytes packets DoS Random UDP packets of 46 bytes, sent over multiple UDP source ports, take down Teku. ethereum/public-attacknets#16 2020-09-08 2020-09-09 2021-12-01 High Antoine Toulme 2500 5000
Prysm CL-2020-10 Starting gRPC with missing SSL credentials does not fail Bug Prysm currently marks the node as unhealthy, but will continue to serve an unsecured gRPC server.
This should be changed to a fatal condition on startup.
prysmaticlabs/prysm#7577 2020-10-11 2020-10-23 2021-12-01 Low Stefan Kobrc 1700 3400
None CL-2020-11 py_ecc arbitrary signature verification bypass Crypto In elliptic curves, the most dangerous point is infinity O. This is because xO = O for all x which means that all arithmetic verification becomes trivially satisfied. Therefore, checking for infinity is crucial. py_cc checks for infinity but the check is not accurate ethereum/py_ecc#107 2020-11-13 2020-11-16 2021-12-01 High Quan 5000 10000
None CL-2020-12 py_ecc signature malleability leads to transaction malleability Crypto BLS point (de)compression issue ethereum/py_ecc#108 2020-11-13 2020-11-16 2021-12-01 High Quan 2000 4000
None CL-2020-13 blst empty message crash Go bindings Crypto https://github.com/supranational/blst/commit/64a22698fcfae9845c07c5030adadaab4a258dd3
https://github.com/supranational/blst/commit/9ba7210542a1dd582f0acb8150c60f2caa953ed0
2020-11-27 2020-12-01 2021-12-01 Medium Quan 2500 5000
None CL-2020-14 herumi empty message/signature crash Crypto 2020-11-28 2021-12-01 Medium Quan
None CL-2020-15 signature bypass for zero public keys Crypto 2020-11-28 2021-12-01 High Quan
Teku CL-2020-16 Subscriptions hashmap CPU pain DoS Subscriptions are stored in a Hashmap. Subscriptions are keyed by topic, a byte string. Hashcodes are super weak. Bad actor can make 56000 unique preimages, all 6 bytes, with the same hashcode. This can be amplified with longer pre-images. Then Hashmaps are "optimized" to fallback on "comparable" strings in tree structure for O(log(n)) lookup behavior if bucket exceeds limit.
https://notes.ethereum.org/MEFRmwGsT3ykoeSfSn21Ig 2020-12-03 2021-12-01 Low Proto 750 0
Teku CL-2020-17 CPU blowup with message uniqueness DoS With the same hashcode trick to make 56000 unique 6 byte preimages with same hashcode, put these in the publish-list (wrapped with protobuf Message type, in Data field).
The rest of the message is the same, and uses the data hashcode for its total hashcode, so the different messages will also have the same hashcode.
The kicker: protobuf containers are not "comparable", whereas strings are. So these messages, when put in a hash-set (backed by hashmap) will all go into the same bucket, but not get expanded into a subtree for O(log(n)) lookup performance as quickly.
The hashmap then resorts to JVM system-level hashcodes, after traversing the full depth of the tree.
From tests it appears that a 1 MB crafted gossip container can stall the gossip inbound-messages handler for about 4.5 seconds. This should run on the main gossip routine, thus make the node skip about 6-7 heartbeats.
https://notes.ethereum.org/MEFRmwGsT3ykoeSfSn21Ig 2020-12-03 2021-12-01 Low Proto 1000 0
None CL-2020-18 FastAggregateVerify inconsistencies across libraries herumi, py_ecc, milagro_bls and blst using the same test vector Crypto 2020-12-05 2021-12-01 High Quan
None CL-2020-19 py_ecc bad prime_field_inv implementation Crypto Reproduction:
prime_field_inv(7, 7)
prime_field_inv(0, 7)

Output:
1
0
ethereum/py_ecc#114 2020-12-07 2020-12-14 2021-12-01 Medium Quan 500
None CL-2020-20 BLS: keygen.c: enforce limitation on IKM_len. Crypto https://github.com/supranational/blst/commit/91f45b6be29ba2d5cc78d95f1642e0c20409c074 2020-12-07 2020-12-7 2021-12-01 Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11679 0
Prysm CL-2020-21 Gossip MsgID with snappy alloc blowup DoS Message ID of gossip message uses Snappy block compression. Contains a varint header to define decompressed size. Unchecked in Prysm, enables a single gossip message to alloc 4 GB byte array. Which is then also hashed for message ID, if crafted to be valid. 2020-12-09 2021-12-01 Medium Proto 7000 0
Lighthouse CL-2020-22 Gossip message cache OOM DoS Rust libp2p puts message in cache before user-validation. Crafting ~10 byte messages that decompress to 80x or more is possible. Now use the unbounded publish list to put 100k messages in a single 1 MB gossip RPC container. The messages stay in the cache for 6 heartbeats (4.7 seconds). Send ~12 crafted 1 MB messages in that window for a 1 GB memory spike. 2020-12-10 2021-12-01 Medium Proto 7000 0
Spec CL-2020-23 Forkchoice selfish mining alike attack Forkchoice Due to the fork choice being rooted on a block graph, rather than a (block, slot) graph, an attacker can withhold blocks and some attestations until after committee voting on (empy) and subsequent blocks/slots to purposefully oprhan proposals. When 30%+ cartel, they can cause finality delays with non-trivial probability. 2020-12-11 2021-12-01 Medium WINE Academic Workshop 0 0
All clients CL-2020-24 Forkchoice proto-array delayed head update edge-case Forkchoice The original proto-array algo did two sweeps: one to update weights, one to update node relations (calculating the new head). The translated version only does 1 sweep, combining the two.

In a situation where lots of votes move to a different fork, this causes the weights to update after the node relations, leaving the proto-array with consistent weights, but invalid node relations. Thus left with the old (now incorrect) head.

The next sweep resolves it, and should be within a slot. Exploiting this within a slot may be possible on epoch boundary, but requires a significant split in forkchoice votes between two contending splits, or a significant amount of votes.
2020-12-11 2021-12-01 Medium Saulius Grigaitis (+team). 9000 18000
Teku CL-2020-25 Unlimited gossip subscription info OOM DoS RPC container can contain a list of ~200.000 unique subscription info updates. JVM libp2p will track subscriptions of all peers, without pruning. Simply fill the subscriptions lists slowly (attack bandwidth <> victim memory ratio of at least 1:2). Then eventually cause the victim to run out of memory.

Variant of the subscriptions bug that hit Prysm and Lighthouse a month ago.
https://notes.ethereum.org/MEFRmwGsT3ykoeSfSn21Ig 2020-12-12 2021-12-01 Low Proto 1000 0
Teku CL-2020-26 Unlimited gossip RPC size DoS Teku does not limit the protobuf RPC container size when decoding. So there is potential to amplify the other attacks by making messages 10 or 100 times as big.

A more basic attack, just as effective: send a 100 MB container, with about 100 million 1-byte empty messages. Each of these will have a heap object allocated (pointer, length, type) and get hashed (4 bytes cache + maybe 4 byte system hash in object header). And then referenced in a hashmap (another pointer or two at least). So assuming 1 byte = ~40 bytes memory, streaming a 100 MB malicious gossip can cause teku to bite in 4 GB worth of useless decoding and data, possibly enough for an OOM.
https://notes.ethereum.org/MEFRmwGsT3ykoeSfSn21Igg 2020-12-13 2021-12-01 Medium Proto 6000 0
None CL-2020-27 blst maleability from accepting uncompressed signatures Crypto 2020-12-13 2021-12-01 Medium Quan
Teku CL-2020-28 Libp2p identify unlimited protobuf stream DoS JVM libp2p has an identify protocol handler that abstracts over a protobuf protocol handler, which does not have any timeouts or limits applied to the stream. To DoS, simply feed Teku with a valid start of a protobuf container on a new identify stream, and a very large protobuf length. Then keep feeding more bytes in bandwidth than it has memory available, until it goes OOM. https://github.com/ConsenSys/teku/security/advisories/GHSA-r228-46jg-46x8 2020-12-14 2021-12-01 Low Proto 250 0
Prysm CL-2020-29 Libp2p identify-delta add-protocols spam - force OOM within a minute DoS Prysm upgraded to libp2p 0.12.1, which has identify sub-protocols. The "delta" feature can add protocols to a previous peer. These are added to the peerstore of the host implicitly. Prysm keeps this peerstore in memory. https://gist.github.com/protolambda/18e7575462a58bf495346fa1db9f1ebe 2020-12-14 2021-12-01 High Proto 12000 0
Nimbus CL-2020-30 Gossipsub Subscriptions OOM DoS Like previously with other clients, but now in Nim: put 100k+ tiny unique subscriptions in a gossipsub RPC container, and each of them will allocate a hashmap, and persist in memory forever. https://notes.ethereum.org/MEFRmwGsT3ykoeSfSn21Ig 2020-12-15 2021-12-01 Low Proto 0
Nimbus CL-2020-31 Gossipsub quadratic topic IDs list DoS The topicIDs list in a gossip publishlist entry of an RPC is processed, all items are added to a Table (read: hashmap). Zah says a murmur3 hash is used for strings. This a uint32. Brute or compute 50.000 collisions (6 -> 4 bytes reduction should have them), and put them into the topicIDs list. https://github.com/nim-lang/Nim/blob/04f8fcfbd06e72eb45f36e487a110316370e47c1/lib/pure/hashes.nim#L220 2020-12-15 2021-12-01 Low Proto 0
None CL-2020-32 BLS: Check that IKM is > 32B in KeyGen Crypto IKM should be checked to be at least 32 bytes as per https://tools.ietf.org/html/draft-irtf-cfrg-bls-signature-04#section-2.3. sigp/milagro_bls#45 2020-12-17 2021-12-01 Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11680 0
None CL-2020-33 BLS: Incomplete key validation Crypto Key validation checks group membership, but should also check that the key is not the point at infinity ChainSafe/blst-ts#24 2020-12-18 2020-12-18 2021-12-01 Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11682 0
Lighthouse CL-2020-34 BLS: Missing check on seed and password length Bug This is called in wallet.rs, where a wallet can be created from non-empty seed and password of any size (no length check inWalletBuilder::from_seed_bytes()): sigp/lighthouse#2102 2020-12-18 2021-12-01 Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11683 0
Prysm CL-2021-01 Prysm Fast-SSZ containers not monomorphic, can contain junk data Bug Prysm uses Fast-SSZ, which was not checking if the first dynamic offset in containers matches the fixed-length part, and skipping over (or before) fixed-length data, to make SSZ decoding not monomorphic, and sneak in junk data on e.g. gossipsub, for different message IDs and such. https://gist.github.com/protolambda/a60468548ae6a70199961f969ae36327 2021-01-09 2021-12-01 Low Proto 300 0
None CL-2021-02 Herumi maleability with extra signature byte Crypto 2021-01-18 2021-12-01 Medium Quan
Prysm CL-2021-03 Mplex unlimited open streams + bad Prysm rate limit + stall on SSZ decode DoS First create a normal healthy connection with Go, then hijack the mplex loop to send custom mplex frames. Craft 100.000 streams, each with an open-frame (no title contents required) and a message frame. Totals around 8-10 MB. Each message must contain pro-active protocol negotiation, to avoid traffic back. And then send just the first bytes of the RPC contents: the length prefix. This opens 100.000 go routines, each allocating the length prefix (up to 1 MB due to lacking type based limiting), and stalling at least until decode timeout (at which point go routines clog the CPU and OOM is likely). https://gist.github.com/protolambda/c45a4d9167fc4b20f2f76c749eeb7105 2021-02-12 2021-12-01 Medium Proto 7000 0
Teku CL-2021-04 Mplex unlimited open streams + decode problems, but saved by snappy-frame decoding edge-case DoS Teku does not spawn many threads, but does allocate more per basic stream. Due to a snappy-frame decoding bug (if mplex frame is smaller than snappy frame), the payload is silently ignored, and it does not hang on it. But remove the protocol negotiation, and just spawn 100.000 (or many more) open streams, by just sending the create frames. Unsure if it works better with a 1 byte title per frame. Adds min. 2-3 GB of memory to running node, and makes JVM heap go jump up and down multiple gigabytes repeatedly for minutes on end per attack (giving GC a hard time too). Consensys/teku#3738 2021-02-12 2021-03-18 2021-12-01 Medium Proto
Teku CL-2021-05 Avoid basic authentication credentials from being leaked to log files Bug Similarly to Consensys/teku#3622 the authentication credentials might end up being leaked in the log files when voluntary exits are performed Consensys/teku#3668 2021-02-26 2021-03-09 2021-12-01 Note Antonio Sanso 250 500
Teku CL-2021-06 Discovery uses the same AES/GCM Nonce throughout the session Bug https://github.com/ConsenSys/teku/security/advisories/GHSA-vx9f-w7h3-94844 2021-03-02 2021-12-01 Medium Antonio Sanso 1000 2000
None CL-2021-07 BLST: Inverse modulo produces wrong result Crypto 2021-03-09 2021-12-01 High Guido Vranken 11000 22000
None CL-2021-08 BLST: NULL pointer dereference (crash) if 'msg' is empty and 'aug' is non-empty Crypto 2021-03-11 2021-12-01 Low Guido Vranken 500 1000
None CL-2021-09 BLST: Using non-standard 'dst' parameter uses uninitialized memory Crypto 2021-03-12 2021-12-01 Low Guido Vranken 500 1000
None CL-2021-10 Golang: Crash in parsing HTTP request Language golang/go#45710 https://groups.google.com/g/golang-announce/c/cu9SP4eSXMc?pli=1 2021-03-12 2021-05-06 2021-12-01 5.9 Medium CVE-2021-31525. Guido Vranken 500 1000
None CL-2021-11 BLST: Inverse modulo hangs on i386 if input is 0 or multiple of modulo Crypto 2021-03-13 2021-12-01 Medium Guido Vranken 1000 2000
None CL-2021-12 Herumi/MCL: Different output from HashToG1/G2 when DST > 255 bytes Crypto https://github.com/herumi/mcl/commit/b01ef452a5a4acae584c0b27956cbf55b5275607 2021-03-14 2021-04-21 2021-12-01 Low Guido Vranken 250 500
Spec CL-2021-13 Spec violation in BLS AggregateVerify Crypto 2021-04-02 2021-12-01 Low Antonio Sanso 500 1000
All clients CL-2021-14 Previous epoch attestation list limit overflow Bug 2021-04-07 2021-12-01 Medium Jacek 0
Prysm CL-2021-15 Prysm missing state root check Bug Prysm checks the state root in the transition function that is used by tests, but uses a different transition function during sync and gossip block handling, that missed the validation of the state-root. The function was a "no verify version" that would return a signature set for batch-verification outside of the function, but did not defer the state-root check in the same way. This makes the state-root effectively a graffiti field. The state-transition ignores the state-root when inserting the latest-header, but the block-root is still affected. This causes prysm to run into a bad block, store the resulting hot state with the bad block-root as key, and not find the state in the DB when someone builds a block with a parent-root based on the root of the latest-header of the latest state. The damage is limited because the chain cannot grow beyond one bad block, since the header-validation of the next block would fail against the state, which has a state-root in the header with deferred computation in the start of the next slot, which was still correct. 2021-04-07 2021-12-01 Medium Proto 0
None CL-2021-16 Insufficient Validation on decompress_G2 Deserialization in py_ecc and nimbus Bug 2021-04-08 2021-12-01 Medium Antonio Sanso 2000 4000
Prysm CL-2021-17 BLS: Missing input validation in SecretKeyFromBigNum Crypto BLS's SecretKeyFromBigNum is an exported function that creates a BLS private key. It can be misused as follows:
SecretKeyFromBigNum("1") will produce a BLS private key consisting of 31 zero bytes.
prysmaticlabs/prysm#8819 2021-04-26 2021-04-27 2021-12-01 Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11685 0
None CL-2021-18 Launchpad: Doesn't fully validate public key Bug The fromBytes implemented for blst does offer the option to validate the public key, but since it is called from verify without the validate parameter set, it won’t verify the public key https://notes.ethereum.org/UUHf4_MyRvmooxgD11rG-Q 2021-04-27 2021-08-09 2021-12-01 Low Guido Vranken, Antonio Sanso 250 500
None CL-2021-19 ChainSafe/bls lack of validation Crypto 2021-04-27 2021-12-01 Low Antonio Sanso 250 500
None CL-2021-20 Point aggregation with the BLST Go bindings Crypto 2021-05-01 2021-12-01 Medium Onur Kılıç 6000 12000
Prysm CL-2021-21 Update go-libp2p-noise to release v0.2.0 BUG At the present time, the project is using go-libp2p-noise v0.1.2 based on github.com/flynn/noise package that has two bugs in nonce handling in versions prior to v1.0.0. prysmaticlabs/prysm#8863 2021-05-05 2021-06-28 2021-12-01 Low Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11685 0
None CL-2021-22 BLST: POINTonE1_mult_w4/POINTonE2_mult_w4 crash with empty input Crypto https://notes.ethereum.org/uqZoHPxPR86cuHW6EVlCAg 2021-05-07 2021-05-08 2021-12-01 Low Guido Vranken 250 500
Prysm CL-2021-23 Prysm integer square root bug Bug Prysm computes the integer square root using a float64 intermediate value, which does not have enough precision, and ouputs different results for high enough values. No danger until about 172K validators https://gist.github.com/protolambda/a89add95e0f8e5acfd3ae79be4cd2cd1 2021-05-15 2021-05-31 2021-12-01 High Proto 0
Prysm CL-2021-24 Add HTTP Secure Headers BUG The HTTP responses from WebUI do not contain secure headers.

At least, WebUI MUST provide an X-Frame-Options header to be protected against Clickjacking attack.
At the present, WebUI can be framed and employed by malicious actors to trick users.

Other useful headers are described here:
https://web.dev/security-headers/

The minimal recommended set: HSTS, X-Frame-Options, and X-Content-Type-Options
prysmaticlabs/prysm-web-ui#178 2021-05-20 2021-10-27 2021-12-01 Low Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11685 0
None CL-2021-25 BLS:
Incorrect result for zero lengths arrays in aggregateVerify
Crypto aggregateVerify doesn't check the size of public keys/messages arrays. A zero-length array is possible. ChainSafe/blst-ts#43 2021-05-24 2021-05-27 Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11682 0
Lodestar CL-2021-26 BLS: No BLS public key validation due to validate parameter missing Crypto To create a public key BLS spec requires first validate the public key bytes.
To validate the input bytes fromBytes must be called as fromBytes(bytes, type, true).

The following fragments call fromBytes without validation:

https://github.com/ChainSafe/lodestar/blob/master/packages/lodestar/src/chain/bls/multithread/worker.ts#L39
https://github.com/ChainSafe/lodestar/blob/master/packages/lodestar/src/chain/bls/multithread/worker.ts#L53
ChainSafe/lodestar#2555 2021-05-24 2021-09-22 2021-12-01 Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11685 0
None CL-2021-27 BLS: BLS secret key validation is missing Crypto The BLS spec requires that the secret key (SK) must be a uniformly random integer such that 1 <= SK < r.
Where r is the order curve.

The last check is missing:

fromBytes
fromBytes

Expected behavior

Check that the provided SK < r.
ChainSafe/bls#96 2021-06-02 2021-12-01 Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11681 0
None CL-2021-28 BLS: Bit security level < 128 Crypto cfrg/draft-irtf-cfrg-bls-signature#42 2021-06-16 2021-06-23 2021-12-01 Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11677 0
None CL-2021-29 BLS: BLS parameters section number fix Crypto cfrg/draft-irtf-cfrg-bls-signature#41 2021-06-16 2021-06-23 2021-12-01 Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11678 0
Teku CL-2021-30 BLS: Public key aggregation ambiguous infinite points handling Crypto BlstPublicKey.aggregate() will return infinitePublicKey in two cases:

If one of the public keys to aggregate is invalid (not in the subgroup or infinity point)
If the sum of (valid) public keys happens to be zero
Consensys/teku#4111 2021-06-24 2021-09-21 2021-12-01 Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11685 0
Teku CL-2021-31 BLS: Detect unsafe coefficients in fast BLS verification Crypto In the implementation of https://ethresear.ch/t/fast-verification-of-multiple-bls-signatures/5407, a zero coefficient would allow the verification of signatures including an invalid one (if assigned a zero r_i).

If the PRNG behaves correctly, the chance of this happening is negligible, but since a non-crypto PRNG is used, and as defense-in-depth measure (along the same lines as ECDSA checks), I would recommend to enforce non-zeroness in:
Consensys/teku#4112 2021-06-24 2021-06-28 2021-12-01 Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11685 0
Prysm CL-2021-32 BLS: No length check in AggregatePublicKeys Crypto There is no length check in AggregatePublicKeys. If pubs is nil or [][]byte{} the function returns a public key without error. prysmaticlabs/prysm#9091 2021-06-24 2021-06-27 2021-12-01 Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11685 0
Prysm CL-2021-33 BLS: Detect unsafe coefficients in verifyMultipleAggregateSignatures Crypto In the implementation of Fast verification of multiple BLS signatures, a zero coefficient would allow the verification of signatures including an invalid one (if assigned a zero r_i).

VerifyMultipleSignature's comments say that r_i must be generated randomly from 1 to max uint64.
prysmaticlabs/prysm#9098 2021-06-25 2021-06-28 2021-12-01 Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11685 0
None CL-2021-34 BLS: Detect unsafe coefficients in verifyMultipleAggregateSignatures Crypto In the implementation of Fast verification of multiple BLS signatures, a zero coefficient would allow the verification of signatures including an invalid one (if assigned a zero r_i).

At the same time, 0s are possible in the output of crypto.randomBytes() function.

If the PRNG behaves correctly, the chance of this happening is negligible, but as a defense-in-depth measure, we would recommend enforcing a non-zeroness check.
ChainSafe/blst-ts#45 2021-06-28 2021-08-28 2021-12-01 Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11682 0
Nimbus CL-2021-35 BLS: Insufficient private key validation (covers nim-blscurve) Crypto Insufficient private key validation (covers nim-blscurve) status-im/nimbus-eth2#2693 2021-07-02 2021-07-06 2021-12-01 Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11685 0
Lodestar CL-2021-36 Improper nonce handling in Noise handshake BUG There are two issues with nonce handling:

Nonces are 32 bits long. The Noise spec requires 64-bit nonce.

https://github.com/NodeFactoryIo/js-libp2p-noise/blob/master/src/%40types/handshake.d.ts#L12-L15

Nonce overflow.
The spec requires returning an error if the maximum number is reached. This is the same issue as in the flynn package but more realistic due to 32-bit length.

https://github.com/NodeFactoryIo/js-libp2p-noise/blob/master/src/handshakes/abstract-handshake.ts#L46-L48
ChainSafe/js-libp2p-noise#102 2021-07-05 2021-12-01 Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11685 0
None CL-2021-37 Improper nonce handling in Go BUG There are two issues with nonce handling in Go:
Nonces are 32 bits long. The Noise spec requires 64-bit nonce.
Nonce overflow.
The spec requires returning an error if the maximum number is reached. This is the same issue as in the flynn package but more realistic due to 32-bit length.
symbolicsoft/noiseexplorer#1 2021-07-05 2021-07-06 2021-12-01 Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11685 0
Lighthouse CL-2021-38 API token can be read from a log file by any user BUG A validator client uses two API keys: ".secp-sk" (secret key) and "api-token.txt" (the corresponding public key).
The spec suggests that an API token can be obtained (read) from a file or from logs.

The second method is highly insecure by design and considered as a very bad practice in web application security (e.g., OWASP Logging).

Moreover, an API token can be read from the log file by any user on the host because the file permissions for the logs are 644.
sigp/lighthouse#2438 2021-07-07 2021-09-13 2021-12-01 Medium Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11684 0
Lighthouse CL-2021-39 File permissions for validator client API keys are insecure BUG A validator client uses two API keys: ".secp-sk" (secret key) and "api-token.txt" (the corresponding public key).
Both files are stored in a user directory with 644 permission bits.
So any user on the host can read them.
sigp/lighthouse#2437 2021-07-07 2021-09-13 2021-12-01 Medium Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11685 0
None CL-2021-40 Libp2p-noise spec BUG Static key signature does not depend on a peer's challenge libp2p/specs#355 2021-07-27 2021-12-01 Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11685 0
None CL-2021-41 BLST: Branching on uninitialized memory in blst_aggregate_in_gX functions Crypto https://notes.ethereum.org/Yo7fDI7XTtmNlbwlRT7Nxg 2021-08-05 2021-08-09 2021-12-01 Low Guido Vranken 500 1000
None CL-2021-42 Golang: x/text/language Parse() panic Language https://github.com/golang/text/commit/383b2e75a7a4198c42f8f87833eefb772868a56f 2021-08-07 2021-08-10 2021-12-01 Low CVE-2021-38561 Guido Vranken 500 1000
Prysm CL-2021-43 Use golang-jwt / jwt imlpementation of JWT BUG To address Issue 9015 you started to use form3tech-oss/jwt-go package that is archived and unmaintained now.

That project is now being maintained at: https://github.com/golang-jwt/jwt. We recommend switching to this one.
prysmaticlabs/prysm#9357 2021-08-11 2021-08-11 2021-12-01 Low Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11685 0
Lighthouse CL-2021-44 VC: requests may not contain Authorization header with API token BUG According to the Validator Client API documentation, all requests (GET, POST, PATCH) must contain Authorization header with the token.

The current implementation only requires the API token in GET requests only, POST/PATCH requests will be processed even if they don't contain the Authorization header.
sigp/lighthouse#2512 2021-08-13 2021-08-18 2021-12-01 Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11685 0
All clients CL-2021-45 Possible to cause Denial of Service if a client has RPC externally available DoS Clients provide clear warnings against doing this. 2021-08-28 2021-08-28 2021-12-01 Note Jim McDonald 100 200
Prysm CL-2021-46 Logout endpoint doesn't require a valid JWT token BUG /api/v2/validator/logout doesn't require a valid JWT.

If a WebUI is accessible then an adversary can regularly send the logout request, the user's JWT key will be invalidated, and the user will not be able to use the UI.
prysmaticlabs/prysm-web-ui#187 2021-09-02 2021-10-21 2021-12-01 Low Taurus Part of EF initiated Security Audit: https://arxiv.org/abs/2109.11685 0
All clients CL-2021-47 Block packing bug An attacker could poison the mempool by slashing and exiting a validator in the same block, which could halt block production as the slashing is processed first which would cause the exit to fail. This happens due to blocks being packed independently of each other. https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/validator.md#voluntary-exits

https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator?vector=AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H/E:H/RL:O/RC:C&version=3.1
2021-10-27 2021-12-01 6.5 Medium Nishant (Prysm) 4600 0