39027 [BC-Insight] abusive join request handler node
Was this helpful?
Was this helpful?
Submitted on Jan 20th 2025 at 18:13:42 UTC by @ZhouWu for
Report ID: #39027
Report Type: Blockchain/DLT
Report severity: Insight
Target: https://github.com/shardeum/shardeum/tree/bugbounty
Impacts:
Bypassing Penalties
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.
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.
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.
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