52589 sc low in distribute yield function if there are no legitimate users i e no restricted users the funds will remain stuck
Submitted on Aug 11th 2025 at 19:49:15 UTC by @swarun for Attackathon | Plume Network
Report ID: #52589
Report Type: Smart Contract
Report severity: Low
Target: https://github.com/immunefi-team/attackathon-plume-network/blob/main/arc/src/ArcToken.sol
Impacts
Temporary freezing of funds for at least 1 hour
Temporary freezing of funds for at least 24 hours
Description
Brief/Intro
In the distributeYield function the contract first transfers the tokens into the ArcToken contract and only afterwards checks if there are any legitimate (unrestricted) users. If none exist, the function returns after the transfer and the funds remain stuck in the contract.
Vulnerability Details
distributeYield performs the incoming token transfer first (via safeTransferFrom) and then checks whether there are any holders eligible to receive yield. If there are no eligible holders (effective supply is zero), the function emits YieldDistributed(0, yieldTokenAddr) and returns, leaving the transferred tokens held by the contract with no mechanism to extract them.
Impact Details
Yield tokens can become permanently or temporarily stuck in the contract, effectively lost to users.
Proof of Concept
References
Vulnerable function location: https://github.com/immunefi-team/attackathon-plume-network/blob/580cc6d61b08a728bd98f11b9a2140b84f41c802/arc/src/ArcToken.sol#L408
Related correct implementation: https://github.com/immunefi-team/attackathon-plume-network/blob/580cc6d61b08a728bd98f11b9a2140b84f41c802/arc/src/ArcToken.sol#L518
Was this helpful?