10190 matches found
OpenLevV1Lib's and LPool's doTransferOut functions call native payable.transfer, which can be unusable for smart contract calls
Handle hyh Vulnerability details Impact When OpenLev operations use a wrapped native token, the whole user withdraw is being handled with a payable.transfer call. This is unsafe as transfer has hard coded gas budget and can fail when the user is a smart contract. This way any programmatical usage...
SHOULD CHECK RETURN DATA FROM CHAINLINK AGGREGATORS
Handle defsec Vulnerability details Impact The peek function in the contract Cvx3CrvOracle.sol fetches the asset price from a Chainlink aggregator using the latestRoundData function. However, there are no checks on timestamp, resulting in stale prices. The oracle wrapper calls out to a chainlink...
approve return value is ignored
Handle robee Vulnerability details Some tokens don't correctly implement the EIP20 standard and their approve function returns void instead of a success boolean. Calling these functions with the correct EIP20 function signatures will always revert. Tokens that don't correctly implement the latest...
The wrap and unwrap functions lack access control, allowing anyone to consume the convexToken in the contract
Handle cccz Vulnerability details Impact In the wrap and unwrap functions of the ConvexYieldWrapper contract, due to the lack of access control, anyone can consume the convexToken in the contract function wrapaddress to, address from external require!isShutdown, "shutdown"; uint256 amount =...
anyone can change Parameters state
Handle jayjonah8 Vulnerability details Impact In BurnFlashStakeDeposit.sol the parameterize function can be called by anyone setting all the Parameters state in the contract. A user should not be able to do this. This function deals with important governance decisions being execute and should onl...
addVault and removeVault lack validation of caller address
Handle cccz Vulnerability details Impact The addVault and removeVault functions of the ConvexYieldWrapper contract lack validation of the caller address, allowing anyone to add or remove vaults from other addresses function addVaultbytes12 vaultId external address account =...
Oracle prices could be not fresh
Handle 0x1f8b Vulnerability details Impact Unsafe oracle call. Proof of Concept The contract Cvx3CrvOracle doesn't check that the data is fress, it call the method latestRoundData, this method allow you to run some extra validations, but these validations were not made. According to the chain.lin...
ERC20 transfer might fail
Handle hack3r-0m Vulnerability details while withdrawing incentives, the contract does not check if erc20 transfer was successful or not, if due to minor rounding error at 17th/18th decimal place, which is possible and the contract does not have enough token to make the transfer and hence false i...
Unsecure oracle price
Handle 0x1f8b Vulnerability details Impact The oracle price use an unsecure calculation. Proof of Concept The contract Cvx3CrvOracle use the min price of dai, usdt and usdt instead of the average, so if an attacker is able to compromise the oracle end point, and change one of them, the contract...
Unchecked return value for token.transfer call
Handle WatchPug Vulnerability details It is usually good to add a require-statement that checks the return value or to use something like safeTransfer; unless one is sure the given token reverts in case of a failure. Instances include: token.transfermsg.sender, amount; token.transfermsg.sender,...
Pair creation can be denied
Handle cmichel Vulnerability details The LaunchEvent.createPair requires that no previous pool was created for the WAVAX token pair. function createPair external isStoppedfalse atPhasePhase.PhaseThree address wavaxAddress, address tokenAddress = addressWAVAX, addresstoken ; // @audit grief: anyon...
Improper Upper Bound Definition on the Fee
Handle Jujic Vulnerability details Impact The rJoePerSec does not have any upper or lower bounds. Values that are too large will lead to reversions in several critical functions. Proof of Concept function updateEmissionRateuint256 rJoePerSec external onlyOwner updatePool; rJoePerSec = rJoePerSec;...
Reentrancy in withdrawGovernanceAsset
Handle 0x1f8b Vulnerability details Impact The method withdrawGovernanceAsset it's vulnerable to reentrancy attacks. Proof of Concept The method FlashGovernanceArbiter.withdrawGovernanceAsset it's vulnerable to reentrancy attacks because the flag stored in pendingFlashDecision it's deleted AFTER...
Check transferFrom is from msg.sender
Handle mics Vulnerability details The following functions are taking money from a user but not necessary on its control. If a user sets more allowance than they have to, for example if they want to those functions many times and don't want to call approve again, then their funds can be stolen by...
createPair can be griefed to never work
Handle harleythedog Vulnerability details Impact The whole point of the LaunchEvent.sol contract is to gather token and WAVAX to be added to a JoePair. Looking at the JoeRouter02.sol code here, I am not seeing anything preventing a griefer from creating a pair for token and WAVAX before the...
Anyone can withdraw others
Handle mics Vulnerability details Anyone can withdraw users shares. Although we think that they are sent to the right address, it is still 1 not the desired behavior 2 can be dangerous if the receiver is a smart contract 3 the receiver may not know someone withdraw him XOLE.withdrawReward...
No upper limit on coolDownTimeInSeconds allows funds to be locked sNOTE owner.
Handle TomFrenchBlockchain Vulnerability details Impact Inability for sNOTE holders to exit the pool in the case of ownership over SNOTE contract being compromised/malicious. Proof of Concept sNOTE works on a stkAAVE model where users have to wait a set cooldown period before being able to reclai...
LaunchEvent's createPair can be cause to always revert
Handle UncleGrandpa925 Vulnerability details Impact This issue impacts all LaunchEvent, forcing the issuer to write additional contracts to be able to createPair in LaunchEvent else it will always revert. Issue & Proof of Concept In LaunchEvent.sol, the function createPair is supposed to be calle...
Launch event creation can be denied 2
Handle cmichel Vulnerability details The RocketJoeFactory.createRJLaunchEvent requires that no previous pool was created for the WAVAX token pair. function createRJLaunchEvent address issuer, uint256 phaseOneStartTime, address token, uint256 tokenAmount, uint256 tokenIncentivesPercent, uint256...
transferFrom return value unchecked
Handle hack3r-0m Vulnerability details createRJLaunchEvent is followed by initialization of launch event, the balance of launch event address is what is supplied by above mentioned safe transfer call According to EIP20, transferFrom returns boolean function transferFromaddress from, address to,...
Wrong implementation of transferAndCall
Handle wuwe1 Vulnerability details Proof of Concept 1. Transferring token twice in this function. 2. Missing event Transferaddress indexed from, address indexed to, uint value, bytes data; Recommended Mitigation Steps Remove super.transferto, value Emit the Transfer event as: --- The text was...
Users' tokens can be stuck inside LaunchEvent if the token doesn't revert on failed transfers
Handle UncleGrandpa925 Vulnerability details Impact Users' tokens can be stuck inside LaunchEvent if the token doesn't revert on failed transfers. Issue When users call withdrawIncentives, if for any reasons the token transfer fails & the token doesn't revert but only returns a boolean, the user'...
transferAllowed() function can be called by anyone
Handle jayjonah8 Vulnerability details Impact In ControllerV1.sol the transferAllowed function can be called by anyone and supplied with arbitrary values to manipulate the protocol as if it was the LPool address. This function should only be callable by the LPool as can be seen in the mintAllowed...
Lack of input checks (withrawal penalties should always be greater than 0)
Handle pedroais Vulnerability details Impact If penalties are set to 0 the protocol would be vulnerable to price manipulations like the one described in the contest documentation. Proof of Concept The protocol uses economic penalties to punish withdraws to protect against economic price...
LP Tokens May Be Locked in Contract Due to allowEmergencyWithdraw() in Stage 3
Handle kirk-baird Vulnerability details Impact The function allowEmergencyWithdraw may be called by the rocketJoeFactory.owner at any time. If it is called while the protocol is in Stage 3 and a pair has been created then the LP tokens will be locked and both issues and depositors will be unable ...
Use safeTransferFrom instead of transferFrom
Handle saian Vulnerability details Impact transferFrom might return false in some implementation that will go unchecked, use a require or openzeppelin's safeTransferFrom Proof of Concept Tools Used Manual Analysis Recommended Mitigation Steps Use a require statement to check return value or use...
Unchecked token transfers are used in LaunchEvent and RocketJoeFactory
Handle hyh Vulnerability details Impact For some ERC20 tokens no revert occurs but false is returned if transfer failed for any reason. If this isn't checked, the system will enter a wrong state with an accounted, but not executed transfer. This effect can pile up, messing the logic altogether...
Add liquidity before phase 3 can force the launch event to stop
Handle WatchPug Vulnerability details function createPair external isStoppedfalse atPhasePhase.PhaseThree address wavaxAddress, address tokenAddress = addressWAVAX, addresstoken ; require factory.getPairwavaxAddress, tokenAddress == address0 || IJoePair IJoeFactoryfactory.getPairwavaxAddress,...
Uninitialized RocketJoeStaking.lastRewardTimestamp can inflate rJoe supply
Handle cmichel Vulnerability details The RocketJoeStaking.lastRewardTimestamp is initialized to zero. Usually, this does not matter as updatePool is called before the first deposit and when joeSupply = joe.balanceOfaddressthis == 0, it is set to the current time. function updatePool public if...
Unchecked return value for token.transferFrom call
Handle WatchPug Vulnerability details It is usually good to add a require-statement that checks the return value or to use something like safeTransferFrom; unless one is sure the given token reverts in case of a failure. /// ... /// @param token Token that will be issued through this launch event...
Use of deprecated Chainlink API
Handle 0x1f8b Vulnerability details Impact Deprecated API stops working. Prices cannot be obtained. Protocol stops and contracts have to be redeployed. Proof of Concept The contracts use Chainlink’s deprecated API latestAnswer. Such functions might suddenly stop working if Chainlink stopped...
addressShare is not updated on arbRestake
Handle hack3r-0m Vulnerability details when intialStake is called, it mints the nft, and on before transfer hook, addressSharesmsg.sender is credited with minted shares when redeemNFT is called, it burns the nft, and on before transfer hook, addressSharesmsg.sender is subtracted with burned share...
Launch event creation can be denied
Handle cmichel Vulnerability details The RocketJoeFactory.createRJLaunchEvent requires that no previous launch event was already created for the token. function createRJLaunchEvent address issuer, uint256 phaseOneStartTime, address token, uint256 tokenAmount, uint256 tokenIncentivesPercent, uint2...
Potential DoS
Handle robee Vulnerability details the balance of outputToken is checked to be exactly a specified value that is not declared in this specific function. Therefore, a malicious user can transfer to the contract address tiny amount of tokens and the user transactions will always revert. Potential D...
transfer return value of a general ERC20 is ignored
Handle mics Vulnerability details Need to use safeTransfer instead of transfer. As there are popular tokens, such as USDT that transfer/trasnferFrom method doesn’t return anything. The transfer return value has to be checked as there are some other tokens that returns false instead revert, that...
Multiple Reentrancy possibilities
Handle 0v3rf10w Vulnerability details Impact Reentrancy possibilities at multiple places. Proof of Concept Reentrancy in RocketJoeFactory.createRJLaunchEventaddress,uint256,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256 contracts/RocketJoeFactory.sol98-155: External calls...
transferAndCall sends tokens twice
Handle cccz Vulnerability details Impact The Flan contract is inherited from the ERC677 contract. In the transferAndCall function of the ERC677 contract, the super.transfer and transfer functions will be called, which will cause the token to be sent twice. function transferAndCall address to,...
Users can lose value in emergency state
Handle cmichel Vulnerability details Imagine the following sequence of events: LaunchEvent.createPair is called which sets wavaxReserve = 0, adds liquidity to the pair and receives lpSupply LP tokens. LaunchEvent.allowEmergencyWithdraw is called which enters emergency / paused mode and disallows...
Failed transfer with low level call could be overlooked
Handle harleythedog Vulnerability details Impact In LaunchEvent.sol, the function safeTransferAVAX is as follows: function safeTransferAVAXaddress to, uint256 value internal bool success, = to.callvalue: valuenew bytes0; requiresuccess, "LaunchEvent: avax transfer failed"; This function is utiliz...
Unsafe ERC20 Operation(s)
Handle Czar102 Vulnerability details Impact ERC20 tokens may not revert on failure, instead return false. Users may lose their funds as ERC20 calls may fail. They are made to unknown ERC20 tokens that have no additional constraints on their failure reporting. Findings: LaunchEvent.sol::458 =...
transferFrom can return false, and didnt revert
Handle Tomio Vulnerability details Impact in the the user can create launchevent, and providing token to the launchevent contract, however, some token may behave differently when handling a failed transfer and transferFrom, some token may handle failed transfer and transferFrom by returning a fal...
possibility of minting rJOE tokens before ownership is changed to RocketJoeStaking
Handle hubble Vulnerability details Impact There is a possibility of the rJOE tokens in RocketJoeToken.sol to be minted by original owner without staking any JOE, before the ownership is transferred to RocketJoeStaking Proof of Concept Contract : RocketJoeToken.sol Line : 37 function mintaddress...
createRJLaunchEvent() can be called by anyone with 1 Wei of _token and stop others from creating RJLaunchEvent with the same token anymore
Handle WatchPug Vulnerability details function createRJLaunchEvent address issuer, uint256 phaseOneStartTime, address token, uint256 tokenAmount, uint256 tokenIncentivesPercent, uint256 floorPrice, uint256 maxWithdrawPenalty, uint256 fixedWithdrawPenalty, uint256 maxAllocation, uint256...
Unsafe Cast
Handle mics Vulnerability details use openzeppilin's safeCast in: ControllerV1.sol, L190: unsafe cast from uint256 to uint64 of the variable blockTime ControllerV1.sol, L192: unsafe cast from uint256 to uint64 of the variable blockTime --- The text was updated successfully, but these errors were...
Unchecked transfers may lead to funds lost.
Handle bobi Vulnerability details Impact There are some transferFrom and transfer calls without checking the resultseg. against reverting. Moreover, for certain ERC20 tokens, should insufficient tokens be present, no revert occurs whatsoever, and instead, a "false" value is returned, which should...
Missing payable
Handle robee Vulnerability details The following functions are not payable but uses msg.value - therefore the function must be payable. This can lead to undesired behavior. LPool.sol, addReserves should be payable since using msg.value --- The text was updated successfully, but these errors were...
Wrong token allocation computation for token decimals != 18 if floor price not reached
Handle cmichel Vulnerability details In LaunchEvent.createPair, when the floor price is not reached floorPrice wavaxReserve 1e18 / tokenAllocated, the tokens to be sent to the pool are lowered to match the raised WAVAX at the floor price. Note that the floorPrice is supposed to have a precision o...
_supportDexs array length not checked in constructor
Handle jayjonah8 Vulnerability details Impact In OpenLevDelegator.sol an array of supportDexs is passed to the constructor function and then passed to the delegateTo function but the supportDexs arrays length is not checked which can result in costly errors. Proof of Concept Tools Used Manual cod...
ERC20 return values not checked
Handle cmichel Vulnerability details The ERC20.transfer and ERC20.transferFrom functions return a boolean value indicating success. This parameter needs to be checked for success. Some tokens do not revert if the transfer failed but return false instead. Tokens that don't actually perform the...
Sherlock: Decouple yield strategy with withdrawals
Handle GreyArt Vulnerability details Impact If there are funds remaining in an old strategy, there is only 1 way to claim those funds which is through Sherlock.updateYieldStrategy . It is quite an inconvenience to do this. Recommended Mitigation Steps Create an additional function to allow anyone...