10190 matches found
GaugeController` allows for quick vote and withdraw
Lines of code Vulnerability details This issue was identified in the original Curve Finance audit, finding ID TOB-CURVE-DAO-004. It remains unresolved in the mkt.market implementation, but was fixed in the Curve implementation. Impact A malicious voter is able to use full voting power for multipl...
Delegated Votes Blocking Delegator Undelegation
Lines of code Vulnerability details Impact Once a delegator has delegated their votes to a delegatee, and the delegatee employs those votes in an ongoing proposal, the delegator loses the ability to undelegate their votes. VotingEscrow::delegate is used to delegate user A's votes to User B. Once...
check for the reentrancy attack is missed in the claim function
Lines of code Vulnerability details Impact the function claim in the LendingLedger.sol will send native token $CANTO to the msg.sender by .call which it can be EOA or Contracts, because there is no any RA checks the caller can make double call in the same time to get himself more tokens reward th...
Reusing other user's votes for both nominee and member elections
Lines of code Vulnerability details Impact The two elections nominee and member are sharing the same proposal id. This give an attack opportunity to a malicious user to reuse signature of other users who casted vote by signature in nominee election for casting vote in member election. In other...
lendingMarketTotalBalance isn't updated for first call to _checkpoint_market in markets created in first epoch
Lines of code Vulnerability details Impact This bricks the ability to update the market balance because when the function tries to update the lendingMarketTotalBalance it uses the value of lastMarketBalance = lendingMarketTotalBalancemarketlastMarketUpdateEpoch and since the value in...
Stealing or reusing votes
Lines of code Vulnerability details Impact It is possible to reuse/steal user's votes if they are supposed to cast vote by signature. Proof of Concept Casting votes during nominee election and member election is possible by calling the functions: castVoteWithReasonAndParams...
TEST FINDING
Lines of code Vulnerability details Impact Detailed description of the impact of this finding. Proof of Concept Provide direct links to all referenced code in GitHub. Add screenshots, logs, or any other relevant proof that illustrates the concept. Tools Used Recommended Mitigation Steps Assessed...
Lock owner DOS and funds stuck
Lines of code Vulnerability details Impact The lock's owner will no longer have the ability to use the delegate function. Meaning the person he chose to delegate can withdraw his funds when lock expires, but won't be able to. Proof of Concept Lets imagine 3 users with a Lock each: If user 1...
newEmergencySecurityCouncil in GovernanceChainSCMgmtActivationAction.sol is not given the TIMELOCK_CANCELLER_ROLE
Lines of code Vulnerability details Proof of Concept GovernanceChainSCMgmtActivationAction.sol checks that the prevEmergencySecurityCouncil has the TIMELOCKCANCELLERROLE first. Then, the role is revoked from the prevEmergencySecurityCouncil. In the last few lines, the function makes sure that the...
A user can make sybil attack for manipulate gaugeController dao
Lines of code Vulnerability details Impact When voteforgaugeweights used contract just take info of users slope of exact time. And there is no extra check mechanism in protocol for control is user's delegate amount so slope too until user use voteforgaugeweights. So a user can use...
LendingLedger Lack of method to rescue accidentally sent Canto
Lines of code Vulnerability details Impact There is no function to rescue Canto accidentally sent to LendingLedger so if governance fat-finger those Canto could be lost forever. Proof of Concept There is no function to transfer native token out of LendingLedger Tools Used Manual inspection...
receive function allows any user to lose funds
Lines of code Vulnerability details Impact Lending ledger receive function allows for any user to send funds and lose them forever. Proof of Concept Any user that sends funds to the Lending Ledger contract through the receive function, can't withdraw their funds meaning they would be stuck in...
User is able to delegate to delegatee with shorter lock when calling increaseAmount()
Lines of code Vulnerability details Impact When a user "user A" calls increaseAmount, if he had previously delegated his lock to another user "delegatee" this would update the end of the lock for "user A" while increasing the amount of delegated for the other user aka "delegatee". This is...
Users can abuse VotingEscrow.delegate() to avoid voting power decay. Additionally, users can delegate expired locks to regain full voting power.
Lines of code Vulnerability details Impact Voting power will not decay over the course of the lock. Proof of Concept The VotingEscrow.delegate function allows users to delegate to locks with a longer expiry time. See the below code snippet and inline comments: requiretoLocked.end = fromLocked.end...
GaugeController - Vulnerability with changing gauge weight would make the contract stop working
Lines of code Vulnerability details Impact The issue is applied differently based on how changegaugeweight works. 1. When changing gauge weight is essential for every enabled gauge before any vote happens An attacker can front-run changegaugeweight transaction to manipulate slope which can result...
Anyone can call perform in SecurityCouncilMemberSyncAction to update members of security council multisig
Lines of code Vulnerability details Impact Anyone can update members of security council multisig Proof of Concept SecurityCouncilMemberSyncAction contract has a perform function which is used to update members of security council multisig. File: SecurityCouncilMemberSyncAction.sol /// @notice...
the _checkpoint_market may not work as expected when it called more than twice at least
Lines of code Vulnerability details Impact the checkpointmarket function in the lendingLedger.sol contract did not work as it expected when the caller make a call to the function for the third time. the checkpointmarket would called more than once to update the market, however the function will n...
GaugeController.sol isn't updated when voting power is delegated, enabling users to arbitrarily increase gauge weight
Lines of code Vulnerability details Impact A malicious user can arbitrarily increase any gauge's weight, resulting in loss of rewards for lenders of other gauges. Proof of Concept Note that the below code snippet from GaugeController.voteforgaugeweights called by users to cast and change votes...
Sencond hand Delegatee can Withdraw before owner undelegates
Lines of code Vulnerability details Impact When an original depositor delegates to another address, the new address can call withdraw before the delegator undelegates. Proof of Concept requirelocked.amount 0, "No lock"; requirelocked.end Attack Scenerio: 1. When an original depositor creates a...
currentCohort FUNCTION SHOULD REVERT WHEN electionCount == 0 RATHER THAN RETURNING Cohort.FIRST
Lines of code Vulnerability details Impact In the SecurityCouncilNomineeElectionGovernor.currentCohort function is used to retrieve the current Cohort of the contract. For a cohort to be elected the election should be created with the respective proposal Id. But with in the function scope of...
otherCohort() is not returning different value when the Election has ended.
Lines of code Vulnerability details Impact In SecurityCouncilNomineeElectionGovernor.sol when the otherCohort function is called, it should return the otherCohort. But it is not the case because it returns the cohort at electionIndexToCohort at electionCount - 2 which is only updated when another...
No security council member can be proposed for removal using the propose function because it will always return MemberNotFound
Lines of code L134-L139 Vulnerability details Impact No security council member can be proposed for removal. Proof of Concept Going by the Arbitrum DAO constitution, a security council member cannot belong to first and second cohort at the same time. A security council member can either be in the...
Claim reward can be inaccessible if msg.sender is a smart contract with no fallback/receive function
Lines of code Vulnerability details Impact When calling claim on LendingLedger, the claim reward can be inaccessible if msg.sender is a smart contract with no fallback/receive function. Indeed, msg.sender.callvalue: cantoToSend"" would fail and the claim would revert, not allowing the user to...
Security council election are vulnerable to signature replay attack
Lines of code Vulnerability details Impact SecurityCouncilNomineeElectionGovernor and SecurityCouncilMemberElectionGovernor contracts both inherit castVoteWithReasonAndParamsBySig function from the base GovernorUpgradeable contract, but implement custom countVote function respectively. The...
GaugeController.remove_gauge() may indefinitely trap user voting power
Lines of code Vulnerability details Impact Users will permanently lose voting power equal to their power used to vote in the removed gauge unless the gauge is re-added and users re-vote to remove their voting power from the gauge. Proof of Concept GaugeController.sol does not have any function fo...
replaceMember&rotateMember; has no voting process
Lines of code Vulnerability details Impact The execution of the two methods replaceMember&rotateMember does not implement the voting process, which will violate the provisions of the following articles Address rotation: As a practical matter, a council member can rotate one of their own keys. Thi...
SecurityCouncilMemberElectionGovernor Owner Can Change votingPeriod During an Active Election
Lines of code Vulnerability details Impact In SecurityCouncilMemberElectionGovernor contract : relay function enables the contract owner from making calls to any contract address. And in SecurityCouncilMemberElectionGovernorCountingUpgradeable contract: setFullWeightDuration can be accessed only ...
Missing __Governor_init() call in SecurityCouncilMemberRemovalGovernor's initialize() function
Lines of code Vulnerability details Bug Description The SecurityCouncilMemberRemovalGovernor contract inherits Openzeppelin's GovernorUpgradeable: SecurityCouncilMemberRemovalGovernor.solL17-L19 contract SecurityCouncilMemberRemovalGovernor is Initializable, GovernorUpgradeable, However, in its...
Timelock canceller role is removed from council and transferred to upgrade executor
Lines of code Vulnerability details Impact In L1SCMgmtActivationAction the TIMELOCKCANCELLORROLE is removed from the previous EmergencySecurityCouncil and not transferred to the new EmergencySecurityCouncil but rather to the L1 UpgradeExecutor. In SecurityCouncilNomineeElectionGovernor the...
[M-01] SecurityCouncilNomineeElectionGovernor.includeNominee(): Missing check adhering to constitution when nominee vetter include nominee
Lines of code Vulnerability details Impact SecurityCouncilNomineeElectionGovernor.solL290-L317 function includeNomineeuint256 proposalId, address account external onlyNomineeVetter ProposalState state = stateproposalId; if state != ProposalState.Succeeded revert ProposalNotSucceededStatestate; if...
GovernanceChainSCMgmtActivationAction : TIMELOCK_CANCELLER_ROLE is not set to the newEmergencySecurityCouncil
Lines of code Vulnerability details Impact newEmergencySecurityCouncil will not have the TIMELOCKCANCELLERROLE. Proof of Concept GovernanceChainSCMgmtActivationAction has the function perform which will be used to activate elections on Arbitrum One. while the function set and revoke the...
receive() in LendingLedger should be replaced by an appropriate function to prevent users from sending native by mistake
Lines of code Vulnerability details Impact Users lose funds by transferring them by mistake to LendingLedger. Proof of Concept Since the LendingLedger contract has a receive external payable function which receives native without any validation, which means that anyone can transfer native to it b...
Delegate system can be used to increase voting power without resetting the lockEnd
Lines of code Vulnerability details Impact The added delegate mechanism allows increasing the voting power without resetting the lockEnd. Proof of Concept IncreaseAmount increases the locked amount of a msg.sender staked native in VotingEscrow and resets its lockEnd to block.timestamp + LOCKTIME...
Double voting in GaugeController
Lines of code Vulnerability details Impact Voting with the same collateral multiple times by delegating and undelegating, a process that could manipulatively influenceincrease the weight of a particular lending market where the malicious actor is the major Liquidity provider. Proof of Concept The...
SecurityCouncilMemberElectionGovernor propose() function is not properly restricted
Lines of code Vulnerability details summary The propose function in the SecurityCouncilMemberElectionGovernor contract is not properly restricted. This means that any user can call it, including attackers. Description The propose function in the SecurityCouncilMemberElectionGovernor contract is...
Failed transfer with low level call could be overlooked
Lines of code Vulnerability details Impact In LendingLedger.sol and votingEscrow.sol, low level call made using the call, According to the Solidity docs, "The low-level functions call, delegatecall and staticcall return true as their first return value if the account called is non-existent, as pa...
electionToTimestamp() might return incorrect timestamps depending on the day of the first election
Lines of code Vulnerability details Bug Description For nominee elections, election dates are determined using the the electionToTimestamp function in the SecurityCouncilNomineeElectionGovernorTiming module. When SecurityCouncilNomineeElectionGovernor is initialized after deployment, the first...
Missing validation to ensure that the _l2CoreGovTimelock parameter is not the zero address in the initialize function
Lines of code Vulnerability details Impact The initialize function accepts a parameter l2CoreGovTimelock and does check if it's a contract address using Address.isContract. However, there's no explicit check to ensure that l2CoreGovTimelock is not the zero address...
The Owner of SecurityCouncilMemberElectionGovernor Can Replace Cohorts And Bypass The Election Process
Lines of code Vulnerability details Impact In SecurityCouncilManager contract: the cohorts members are replaced by election via replaceCohort function; the process goes as follows: 1. an election proposal is made by anyone after 6-months of the last election via...
User point history for first epoch remains empty
Lines of code Vulnerability details Impact balanceOfAt will not work correctly if the block number queried is related to user's first epoch. Proof of Concept VotingEscrow.solL142-L149 first assigns userOldPoint to userPointHistoryaddruEpoch + 1 if uEpoch==0 and then always assigns userNewPoint to...
Absence of zero address checks for roles passed to the initialize function.
Lines of code Vulnerability details Impact The initialize function accepts various roles as part of the roles parameter SecurityCouncilManagerRoles. However, it doesn't validate whether any of these role addresses are set to the zero address address0. This omission might result in inadvertently...
Fixed locking period of 5 years doesn't allow the delegator to withdraw funds for atleast another 5 years
Lines of code Vulnerability details Details Let's first understand how the process of delegation, withdraw and increaseAmount works 1. Rule 1: To delegate to some user A, A.lock.end needs to be longer than msg.sender.lock.end and A.Lock.end block.timestampLock mustn't be expired...
If user has delegated someone when locktime expires his tokens will be stuck forever.
Lines of code Vulnerability details Impact tokens will be stuck forever if user's locktime expired when his delegatee someone differant than him. Because he cannot withdraw his money also he cannot delegate himself too because his lock expired.Also he cannot use increaseamount for lockexpired and...
User can claim most of the rewards for a lending market by depositing cNote for just 2 blocks / epoch
Lines of code Vulnerability details Impact For a user to receive rewards for supplying cNote in a lending market LM, he only needs to have supplied the cNote at the end of an epoch. Users staking for the whole duration of an epoch get 0 benefits, compared to users who supply only at the end of th...
Upgraded Q -> 2 from #513 [1691698843467]
Judge has assessed an item in Issue 513 as 2 risk. The relevant finding follows: Issue 2 --- The text was updated successfully, but these errors were encountered: All reactions...
New election can be created when another election is running.
Lines of code Vulnerability details Impact In the SecurityCouncilNomineeElectionGovernor.sol When calling createElection function, there is this check called requireLastMemberElectionHasExecuted which checks if the last election has executed. But this is wrong, the check is done by checking if th...
Vulnerability: Setting the userClaimedEpoch to a wrong Epoch / Contract: LendingLedger / Function: claim
Lines of code Vulnerability details Impact The userClaimedEpoch is setted to a different epoch week more than the actual epoch of the claim. Proof of Concept In the function to claim the canto for a market, the claiming can only be made for a prior epoch and the function does it in that way, but...
The LendingLedger.sync_ledger function is susceptible to a potential reentrancy attack
Lines of code Vulnerability details Impact The primary focus is on the functions deposit/withdraw situated within the LendingMarket smart contracts, as they trigger the invocation of the LendingLedger.syncledger function. These functions carry the potential risk of containing a reentrancy issue,...
Delegation empowers more voting weight than expected
Lines of code Vulnerability details Description and Impact The user's voting power decreases linearly from the moment of the lock. To prevent this decrease, users can delegate their voting power to a new wallet. Here is an example scenario illustrating this: 1. The user owns two wallets, Wallet A...
Missing access control for whitelisted smart contract
Lines of code Vulnerability details Impact Because this contract is a copy from the curve side, the verwa side is missing the check of a whitelisted/blacklisted smart contract. If the "blacklist" check is not added or implemented within the function, then the contract would lack the necessary...