#39027 [BC-Insight] abusive join request handler node
#39027 [BC-Insight] Abusive Join request handler node
Submitted on Jan 20th 2025 at 18:13:42 UTC by @ZhouWu for Audit Comp | Shardeum: Core III
Report ID: #39027
Report Type: Blockchain/DLT
Report severity: Insight
Target: https://github.com/shardeum/shardeum/tree/bugbounty
Impacts:
Bypassing Penalties
Description
Description
When a validator wants to join the network. It send the join request to one of the node in consensus group, during the join request, the joining validator will need to get an account to gather staking info. The malicous validator that is hanlding the join request can delay the http call up to minutes so that joining validator will not be able to join for the whole duration of the delay.
Impact
Using the parameter in the bugbounty branch, network baseline is 1280, and the shard size will be 128. Since the joining validator will only request join request to 1 of the node in consensus group. And the retries again for 3 times if the first one fails. The probability for malicious node to be picked is [ 1 - (127/128)^3 ] = 0.0233 = 2.3%
. Although this is not a high probability overtime maclicious node will be picked and it'll reject legit validator for 30 cycles, increasing more malicous node from same operator or other party with same malicous practice will increase the probability of the attack. This will have a compunding effect and it only need 69 nodes to make the probability of the attack to be ~90%. 69 nodes is only 5.4% of the network size which is 1280. On summary 90% probability of the attack can be achieved by having only 5.4% of the malicious node that are exercising same practice. Overtime this attack will make network more centralized without anyone realizing it. Since there's no penalty for such attack this can be grow into wide spread practice among validator to have their own validator earn more time and more rewards.
Fix
The primary cause of the attack is the joining validator does not have a timeout when executing getNodeAccount()
will indefinte wait for the response as long as the server hang it.
Proof of Concept
Proof Of Concept
Please launch a network to act as legitimate network
Apply this patch file to the malicious node at shardeum repo code
Launch the malicious node and wait for it to go active
Launch the new joining validator node
Now if the joining validator pick the malicous node to send the join request, the joining validator will not be able to join the network for 30 cycles
Was this helpful?