ReserveSubmit a Bug
The Reserve Protocol is the first platform that allows for the permissionless creation of asset-backed, yield-bearing & overcollateralized stablecoins on Ethereum. The end goal of the Reserve Protocol is to provide highly scalable, decentralized, stable money in contrast to volatile cryptocurrencies such as Bitcoin and Ether.
In our view, clear flaws can be demonstrated with many existing stablecoin designs. In the 2018 Reserve Protocol whitepaper, we present arguments for why a widely used stablecoin should implement an exchange rate peg to a fiat currency first and a basket of assets later, using off-chain foreign collateral that has been tokenized by a diversity of issuers.
Furthermore, we believe that open exploration and competition can lead to the discovery of the best type of basket and governance system for ideal on-chain money. There's a lot to explore, and it's better not to keep that under the control of the initial founding team. For this reason, the Reserve Protocol is entirely permissionless — allowing anyone to deploy a Reserve stablecoin (RToken) with their preferred collateral basket, governance system and revenue distribution.
For more information about Reserve, please visit https://reserve.org/
Reserve adheres to category 2. This Policy determines what information whitehats are allowed to make public from their submitted bug reports. For more information about the category selected, please refer to our Responsible Publication page.
For Whitehats: It is highly recommended that you review the details of this program in full. Although many Bug Bounty programs have standard terms and conditions, each also has their own unique details that are critical to your success.
Prior to submitting a report please review the Immunefi Bug Report Template and Best Practices.
If the bug report has been closed, and 2 weeks has passed since final upgrade, and the security researcher does not want to publish but Reserve would like to publish, then Reserve will take over all intellectual property of the bug report and can publish at will in coordination with Immunefi.
Rewards by Threat Level
Please review how rewards are distributed based on the Immunefi Vulnerability Severity Classification System V2.2. This is a simplified 5-level scale system with separate scales for Smart Contracts and Websites/Apps.
Rewards for critical smart contract bug reports will be further capped at 5% of direct funds at risk if the bug discovered is exploited. In cases of repeatable attacks, only the first attack is considered unless the smart contract cannot be upgraded or paused. However, there is a minimum reward of USD 100 000.
Rewards for high smart contract vulnerabilities are further capped at 5% of the funds at risk. In cases of repeatable attacks, only the first attack is considered unless the smart contract cannot be upgraded or paused. However, there is a minimum reward of USD 10 000 for High smart contract bug reports.
|Impact||Criteria for assessing economic damage|
|Temporary freezing of RToken ERC20 functionality (% TVL frozen at time of submission)||Temporary freezing time < 24hr: medium. 24hr < Temporary freezing time < governance cycle + 1 day: high, 1%. governance cycle + 1 day < Temporary freezing time: high|
|Temporary freezing of funds||Temporary freezing time < 24hr: medium 1%. 24hr < Temporary freezing time < governance cycle + 1 day8 days: high, 12%. governance cycle + 1 day8 days < Temporary freezing time: 5% high|
- governance cycle = the total time between when a proposal is made to when it can be executed. For eUSD, 1 governance cycle = 2 days (voting delay) + 3 days (voting period) + 3 days (execution delay) = 8 days
Payouts and Payout Requirements
Payouts are handled by the Reserve team directly and are denominated in USD. However, payouts are done in USDC and RSR. Reserve commits to honoring payouts according to the terms set out in this program at the time of report submission, and to treat this program as the agreement and source of truth concerning bug reports and responsible disclosures.
For the purposes of determining report validity, this is a Primacy of Rules program.
Learn more about report validity best practices here: Best Practice - Primacy of Impact vs Primacy of Rules.
Reserve does have a Know Your Customer (KYC) requirement for bug bounty payouts.
KYC Info Required
- Anyone who receives $600 or more from our company will need to either provide their US taxpayer information via a form W-9, or a W-8BEN declaring that they are not a US taxpayer subject to withholding.
KYC information is only required on confirmation of the validity of a bug report.
Audit Discoveries and Known Issues
Bug reports covering previously-discovered bugs are not eligible for any reward through the bug bounty program. If a bug report covers a known issue, it may be rejected together with proof of the issue being known before escalation of the bug report via Immunefi.
Previous audits and known issues can be found at:
|Description of known issue||Related Impact-in-Scope|
|Asset.lotPrice() doesn't use the most recent price in case of oracle timeout (https://github.com/code-423n4/2023-01-reserve-findings/issues/326)||Smart-Contract|
|Unsafe cast of uint8 datatype to int8 (https://github.com/code-423n4/2023-01-reserve-findings/issues/265)||Smart-Contract|
|refresh() will revert on Oracle deprecation, effectively disabling part of the protocol (https://github.com/code-423n4/2023-01-reserve-findings/issues/234)||Smart-Contract|
|Shortfall might be calculated incorrectly if a price value for one collateral isn't fetched correctly (https://github.com/code-423n4/2023-01-reserve-findings/issues/200)||Smart-Contract|
|BasketHandler: Users might not be able to redeem their rToken when protocol is paused due to refreshBasket function (https://github.com/code-423n4/2023-01-reserve-findings/issues/39)||Smart-Contract|
|Attacker can cause loss to rToken holders and stakers by running BackingManager._manageTokens before rewards are claimed (https://github.com/code-423n4/2023-02-reserve-mitigation-contest-findings/issues/22)||Smart-Contract|
|StRSR: attacker can steal excess rsr that is returned after seizure (https://github.com/code-423n4/2023-02-reserve-mitigation-contest-findings/issues/17)||Smart-Contract|
|All audit reports (Ackee, Halborn, Solidified, Trail of Bits)||Smart-Contract|
- USD $100,000 to USD $5,000,000
- USD $10,000 to USD $100,000
- USD $5,000
- USD $1,000
Assets in scope
- Smart Contract - MainP1 (Proxied)Type
- Smart Contract - AssetRegistryP1 (Proxied)Type
- Smart Contract - BackingManagerP1 (Proxied)Type
- Smart Contract - BasketHandlerP1 (Proxied)Type
- Smart Contract - BrokerP1 (Proxied)Type
- Smart Contract - DistributorP1 (Proxied)Type
- Smart Contract - FurnaceP1 (Proxied)Type
- Smart Contract - RTokenP1 (Proxied)Type
- Smart Contract - RevenueTraderP1 (Proxied)Type
- Smart Contract - RSRType
- Smart Contract - StRSRP1Votes (Proxied)Type
- Smart Contract - GnosisTradeType
- Smart Contract - DeployerP1Type
- Smart Contract - RecollateralizationLibP1Type
- Smart Contract - AssetType
- TargetSmart Contract - RTokenAssetType
- Smart Contract - FiatCollateral (multiple deployments)Type
- Smart Contract - EURFiatCollateralType
- Smart Contract - NonFiatCollateralType
- Smart Contract - SelfReferentialCollateralType
- https://github.com/reserve-protocol/protocol/blob/master/contracts/plugins/assets/AppreciatingFiatCollateral.solTargetSmart Contract - AppreciatingFiatCollateralType
- Smart Contract - ATokenFiatCollateralType
- Smart Contract - CTokenFiatCollateralType
- Smart Contract - CTokenNonFiatCollateral (multiple deployments)Type
- Smart Contract - CTokenSelfReferentialCollateralType
- https://github.com/reserve-protocol/protocol/blob/master/contracts/plugins/assets/lido/LidoStakedEthCollateral.solTargetSmart Contract - LidoStakedEthCollateralType
- https://github.com/reserve-protocol/protocol/blob/master/contracts/plugins/assets/rocket-eth/RethCollateral.solTargetSmart Contract - RethCollateralType
- https://github.com/reserve-protocol/protocol/blob/master/contracts/plugins/assets/compoundv3/CusdcV3Wrapper.solTargetSmart Contract - CusdcV3WrapperType
- https://github.com/reserve-protocol/protocol/blob/master/contracts/plugins/assets/compoundv3/CTokenV3Collateral.solTargetSmart Contract - CTokenV3CollateralType
- Smart Contract - GovernanceType
- Smart Contract - ArrayType
- Smart Contract - FixedType
- Smart Contract - PermitType
- Smart Contract - StringType
- Smart Contract - ThrottleType
- Smart Contract - AuthType
- TargetSmart Contract - ComponentRegistryType
Only those listed in the Assets in Scope table are considered to be in-scope of the bug bounty program.
- Smart Contracts - PoC, Smart Contract bug reports are to include a runnable Proof of Concept (PoC) in order to prove impact.
- For more information on PoCs please visit: Proof of Concept (PoC) Guidelines and Rules
- All smart contracts of Reserve can be found at:
- Branches out of scope:
Whitehats are highly encouraged to review any potential subdomains and what specific port(s) are in scope. Even though the domain may be the same, different ports may point to different assets.
Dev Environment and Documentation
Reserve has included dev documentation and/or instructions to help in reviewing code and exploring for bugs:
Impacts in Scope
(For Blockchain/DLTR and Smart Contracts Only) This program is considered to be governed by Primacy of Rules. For more information on what this means visit: Best Practice - Primacy of Impact vs Primacy of Rules.
Impacts are based on the Immunefi Vulnerability Severity Classification System V2.2.
At Immunefi, we classify bugs on a simplified 5-level scale:
Impacts in scope
Only the following impacts are accepted within this bug bounty program. All other impacts are not considered as in-scope, even if they affect something in the assets in scope table.
- Any governance voting result manipulationCriticalImpact
- Direct theft of any user funds, whether at-rest or in-motion, other than unclaimed yieldCriticalImpact
- Permanent freezing of assetsCriticalImpact
- Theft of unclaimed yieldHighImpact
- Permanent freezing of unclaimed yieldHighImpact
- Protocol insolvencyHighImpact
- Temporary freezing of RToken ERC20 functionalityMediumImpact
- Temporary freezing of fundsMediumImpact
- Griefing (e.g. no profit motive for an attacker, but damage to the users or the protocol)MediumImpact
- Contract fails to deliver promised returns, but doesn't lose valueLowImpact
- Theft of gasLowImpact
- Unbounded gas consumption, that does not cause a more severe bugLowImpact
Out of Scope & Rules
The following impacts and attack vectors are excluded from rewards by default for all Immunefi bug bounty programs:
- Attacks that the reporter has already exploited themselves, leading to damage
- Attacks requiring access to leaked keys/credentials
- Attacks requiring access to privileged addresses (governance, strategist), except in such cases where the contracts are intended to have no privileged access to functions that make the attack possible
- Broken link hijacking is out of scope
Smart Contracts and Blockchain/DLT
- Basic economic governance attacks (e.g. 51% attack)
- Lack of liquidity
- Best practice critiques
- Sybil attacks
- Centralization risks
|Category||Additional specific vulnerabilities and/or attacks to exclude|
|Smart Contract||RToken minting can be DoS’d by a grief-attack where the attacker redeems an amount equal to the available mint throttle, then mints that amount in the same transaction.|
|Smart Contract||RToken redeeming can be DoS’d by a grief-attack where the attacker mints an amount equal to the available redeem throttle, then redeems that amount in the same transaction.|
|Smart Contract||Malicious governance. We assume governance is trusted and competent for all protocol configurations over which it has control|
|Smart Contract||Malicious guardians. We assume guardians are trusted and competent for their given duties.|
|Smart Contract||Malicious long-freezers. We assume long-freezers are trusted and competent for their given duties.|
The following activities are prohibited by this bug bounty program. Violation of these rules can result in a temporary suspension or permanent ban from the Immunefi platform at the sole discretion of the Immunefi team, which may also result in: 1) the forfeiture and loss of access to all bug submissions, and 2) zero payout.
Please note that Immunefi has no tolerance for spam/low-quality/incomplete bug reports, “beg bounty” behavior, and misrepresentation of assets and severity. Immunefi exists to protect the global crypto community, not facilitate grift.
- Any testing with mainnet or public testnet deployed code; all testing should be done on private testnets
- Attempting phishing or other social engineering attacks against our employees and/or customers
- Any testing with third party systems and applications (e.g. browser extensions) as well as websites (e.g. SSO providers, advertising networks)
- Any denial of service attacks
- Automated testing of services that generates significant amounts of traffic
- Public disclosure of an unpatched vulnerability in an embargoed bounty
- Any other actions prohibited by the Immunefi Rules. These rules are subject to change at any time.