MakerDAO
Submit a BugProgram Overview
MakerDAO is one of the first DeFi protocols in the crypto space that introduced the first crypto-backed stablecoin called Dai (DAI), which is set at a value of 1:1 with the United States Dollar. It is governed by those who hold and/or are delegated MKR, the governance token of the protocol. Since 2021, the project has become more decentralized, with the MakerDAO Foundation being shut down in order to move operations to decentralized business units known as core units.
One of these core units is the Immunefi Security (IS-001) core unit, a result of two decentralized organizations collaborating together. One mandate of this core unit is to launch a bug bounty program to protect the critical infrastructure of the ecosystem.
For more information about MakerDAO, please visit https://makerdao.com/. For more information about the Immunefi Security core unit (IS-001), please visit https://immunefi.com/immunefi-security-core-unit-makerdao/.
This bug bounty program is governed under the terms set in MIP64. Resolution of payouts may be longer compared to normal timelines due to requiring governance activity. However, proposed amendments are in process to speed up the payment of rewards to bug bounty hunters.
All Critical and High bug reports will have a postmortem written by the Immunefi Security core unit to be published on the Immunefi Medium blog and distributed on its social media channels after the payout is made and the fixes finalized. The identity of the bug reporter may be included, either with their real name or pseudonymously, if they choose to, or they can choose to remain anonymous.
This bug bounty program is launched in a roll-out plan towards the end of February 2022 with regular expansions provided until the end of the month. Though further additions may be included after the end of the month, this initial phasing process is to ensure that all infrastructure is working in place.
Rewards by Threat Level
Rewards are distributed according to the impact of the vulnerability based on the Immunefi Vulnerability Severity Classification System V2.2. This is a simplified 5-level scale, with separate scales for websites/apps, smart contracts, and blockchains/DLTs, focusing on the impact of the vulnerability reported.
Critical smart contract vulnerabilities are further capped at 10% of economic damage, which primarily takes into consideration 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 150 000 for valid Critical smart contract bug reports.
High smart contract vulnerabilities will be further capped at up to 100% of the funds affected. In the event of temporary freezing, the reward doubles for every additional 5 blocks that the funds could be temporarily frozen, rounded down to the nearest multiple of 5, up to the hard cap of USD 100 000. This is implemented in order to account for the increased relative impact based on the duration of the freezing of funds.
All calculations of the amount of funds at risk are done based on the time the bug report is submitted.
All web/app bug reports must come with a PoC with an end-effect impacting an asset-in-scope in order to be considered for a reward. Explanations and statements are not accepted as PoC and code is required. Smart contracts bug reports are required to include a runnable PoC in order to prove impact. Exceptions may be made in cases where the vulnerability is objectively evident from simply mentioning the vulnerability and where it exists. However, the bug reporter may be required to provide a PoC at any point in time.
Critical website and application bug reports will be rewarded with USD 100,000 only if the impact leads to a direct loss in funds or a manipulation of the votes or the voting result, as well as the modification of its display leading to a misrepresentation of the result or vote. All other impacts that would be classified as Critical would be rewarded USD 50,000.
Bug reports from compensated team members of any MakerDAO core unit will not be eligible for a reward. Employees and team members of third-party suppliers to core units that operate in a technical capacity and have assets covered in this bug bounty program will also not be eligible for a reward. All team members of IS-001, and its third-party suppliers, including Immunefi itself and its subsidiaries, are not eligible for a reward.
Bug reports from team members and third-party suppliers of businesses and organizations that are not a MakerDAO Core Unit but have assets considered as critical infrastructure covered under the bug bounty program are also not eligible for the bug bounty program.
Bug reports covering previously-discovered bugs are not eligible for the 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. Previous audits of MakerDAO can be found at:
https://chainsecurity.com/security-audit/maker-protocol-liquidations-2-0/
https://chainsecurity.com/security-audit/makerdao-g-uni-lp-oracle/ (narrowly scoped subsystem)
https://chainsecurity.com/security-audit/makerdao-direct-deposit-module-d3m/
https://chainsecurity.com/security-audit/makerdao-optimism-dai-bridge/
Other audits that currently don’t cover any of the assets listed in the Assets in Scope table and are currently a work in progress can be found, for further reading, at:
https://chainsecurity.com/security-audit/makerdao-dss-charter-smart-contracts/
The following issues are considered known and are not eligible for a reward:
Considering MCD_ETH - The steward core unit is aware that the balance of the contract may be different than the total amount that is deposited if users send ETH directly to the contract. They do not believe this has a negative impact on the system and so unless a report can show how having a higher balance does have negative consequences we will consider reports on the actual balance being higher than the sum of balanceOf values out of scope.
Considering all adapters - The steward core unit is aware that the balance (ETH or token) of the contract may be different than the total amount that is joined through the contract if users send tokens or ETH directly to the contract. They do not believe this has a negative impact on the system and so unless a report can show how having a higher balance does have negative consequences they will consider reports on the actual balance being higher than the sum of tokens 'join'ed out of scope.
In order to be eligible for a reward, the vulnerability must exist both in the deployed smart contract and the GitHub file in the Assets in Scope table. For more information, please check the Assets in Scope section.
Payouts are handled by the MakerDAO governance with coordination by the Immunefi Security core unit and are denominated in USD. However, payouts are done in DAI assuming a full 1:1 ratio with the USD. However, if the price of DAI deviates from the USD value by more than 1%, the amount of DAI will be adjusted.
Smart Contract
- Critical
- Level
- Up to USD $10,000,000
- Payout
- High
- Level
- Up to USD $100,000
- Payout
- Medium
- Level
- USD $5,000
- Payout
- Low
- Level
- USD $1,000
- Payout
Websites and Applications
- Critical
- Level
- Up to USD $100,000
- Payout
- High
- Level
- USD $5,000
- Payout
- Medium
- Level
- USD $2,500
- Payout
Assets in scope
- Smart Contract - MCD_DAIType
- Smart Contract - MCD_SPOTType
- Smart Contract - MCD_POTType
- Smart Contract - MCD_ENDType
- Smart Contract - MCD_FLAPType
- Smart Contract - MCD_FLOPType
- Smart Contract - MCD_VOWType
- Smart Contract - MCD_ETHType
- Smart Contract - MCD_VATType
- Smart Contract - MCD_JUGType
- Smart Contract - MediansType
- Smart Contract - OSMType
- Smart Contract - Value (OSM)Type
- Smart Contract - DssCdpManagerType
- Smart Contract - GetCdpsType
- Smart Contract - DssProxyActionsType
- Smart Contract - DssAutoLineType
- Smart Contract - Clipper MomType
- Smart Contract - DssVestType
- Smart Contract - CollateralOptsType
- Smart Contract - DssActionType
- Smart Contract - DssExecType
- Smart Contract - DssExecLibType
- Smart Contract - OasisDexCalleeType
- Smart Contract - UniswapV2CalleeType
- Smart Contract - UniswapV2LpTokenCalleeType
- Smart Contract - UniswapV3CalleeType
- Smart Contract - WstETHCurveUniv3CalleeType
- Smart Contract - Ilk RegistryType
- Smart Contract - Gem AbstractType
- Smart Contract - DS Authority AbstractType
- Smart Contract - DS Chief AbstractType
- Smart Contract - DS Pause AbstractType
- Smart Contract - DS Pause Proxy AbstractType
- Smart Contract - DS Roles AbstractType
- Smart Contract - DS Rune AbstractType
- Smart Contract - DS Spell AbstractType
- Smart Contract - DS Thing AbstractType
- Smart Contract - DS Token AbstractType
- Smart Contract - DS Value AbstractType
- Smart Contract - Auth Gem Join AbstractType
- Smart Contract - Cat AbstractType
- Smart Contract - Chainlog AbstractType
- Smart Contract - Clip AbstractType
- Smart Contract - Clipper Mom AbstractType
- Smart Contract - Dai AbstractType
- Smart Contract - DaiJoinAbstractType
- Smart Contract - Dog AbstractType
- Smart Contract - Dss Auto Line AbstractType
- Smart Contract - Dss Cdp ManagerType
- Smart Contract - ESM AbstractType
- Smart Contract - ETH Join AbstractType
- Smart Contract - End AbstractType
- TargetSmart Contract - Exponential Decrease AbstractType
- Smart Contract - Faucet AbstractType
- Smart Contract - Flap AbstractType
- Smart Contract - Flash AbstractType
- Smart Contract - Flip AbstractType
- Smart Contract - Flipper Mom AbstractType
- Smart Contract - Flop AbstractType
- Smart Contract - Gem Join AbstractType
- TargetSmart Contract - Gem Join Implementation AbstractType
- Smart Contract - Gem Join Managed AbstractType
- Smart Contract - Get Cdps AbstractType
- Smart Contract - Ilk Registry AbstractType
- Smart Contract - Jug AbstractType
- Smart Contract - LPOsm AbstractType
- Smart Contract - Lerp AbstractType
- Smart Contract - Lerp Factory AbstractType
- Smart Contract - Linear Decrease AbstractType
- Smart Contract - MKR AbstractType
- Smart Contract - Median AbstractType
- Smart Contract - MKR Authority AbstractType
- Smart Contract - Osm AbstractType
- Smart Contract - Osm Mom AbstractType
- Smart Contract - Pip AbstractType
- Smart Contract - Pot AbstractType
- Smart Contract - Pot HelperType
- Smart Contract - Psm AbstractType
- Smart Contract - Spot AbstractType
- Smart Contract - Stairstep Exponential Decrease AbstractType
- Smart Contract - Vat AbstractType
- Smart Contract - Vest AbstractType
- Smart Contract - Vow AbstractType
- Smart Contract - Gem Pit AbstractType
- Smart Contract - Sai Mom AbstractType
- Smart Contract - Sai Tap AbstractType
- Smart Contract - Sai Token AbstractType
- Smart Contract - Sai Top AbstractType
- Smart Contract - Sai Tub AbstractType
- Smart Contract - Sai Vox AbstractType
- Smart Contract - Wards AbstractType
- Smart Contract - Interfaces (Abstracts)Type
- Smart Contract - Dss VestType
- Smart Contract - Join AuthType
- Smart Contract - Join 2Type
- Smart Contract - Join 3Type
- Smart Contract - Join 4Type
- Smart Contract - Join 5Type
- Smart Contract - Join 6Type
- Smart Contract - Join 7Type
- Smart Contract - Join 8Type
- Smart Contract - JoinType
- Smart Contract - AbaciType
- Smart Contract - Join 5 AuthType
- Smart Contract - Join 8 AuthType
- Smart Contract - Join Auth (Dss PSM)Type
- Smart Contract - PSMType
- Smart Contract - ESMType
- Smart Contract - Dss EndType
- Smart Contract - Dss DogType
- Smart Contract - Dss ClipType
- Smart Contract - L1 DAI Token Bridge (Optimism DAI Bridge)Type
- Smart Contract - L1 Escrow (Optimism DAI Bridge)Type
- TargetSmart Contract - L1 Governance Relay (Optimism DAI Bridge)Type
- Smart Contract - L2 DAI Token Bridge (Optimism DAI Bridge)Type
- TargetSmart Contract - L2 Governance Relay (Optimism DAI Bridge)Type
- Smart Contract - DAI (Optimism DAI Bridge)Type
- TargetSmart Contract - L1 Cross Domain Enabled (Arbitrum DAI Bridge)Type
- Smart Contract - L1 DAI Gateway (Arbitrum DAI Bridge)Type
- Smart Contract - L1 Escrow (Arbitrum DAI Bridge)Type
- TargetSmart Contract - L1 Governance Relay (Arbitrum DAI Bridge)Type
- Smart Contract - L1 Token Gateway (Arbitrum DAI Bridge)Type
- TargetSmart Contract - L2 Cross Domain Enabled (Arbitrum DAI Bridge)Type
- Smart Contract - L2 DAI Gateway (Arbitrum DAI Bridge)Type
- TargetSmart Contract - L2 Governance Relay (Arbitrum DAI Bridge)Type
- Smart Contract - L2 Token Gateway (Arbitrum DAI Bridge)Type
- Smart Contract - DAI (Arbitrum DAI Bridge)Type
- Smart Contract - Teleport JoinType
- Smart Contract - Teleport Oracle AuthType
- Smart Contract - Teleport Constant FeeType
- Smart Contract - Teleport RouterType
- Smart Contract - Basic RelayType
- Smart Contract - Enumerable SetType
- Smart Contract - Teleport FeesType
- Smart Contract - Teleport GUIDType
- Smart Contract - ChainLogType
- Websites and Applications - Governance VotingType
- Websites and Applications - Contract addressesType
Due to the regularly-updating smart contracts, only the GitHub links are provided. However, to find the most up-to-date deployment addresses, you can refer to https://chainlog.makerdao.com/. Vulnerabilities that are exploitable in old versions of smart contracts and have since been mitigated (either deliberately or accidentally) in current versions (as demonstrated by the listing at https://chainlog.makerdao.com/) are not in-scope for the bug bounty program. In the event that a vulnerability exists on the GitHub file but not on the most recently deployed contract, this may be due to a “dark spell” to fix a vulnerability quietly. If your bug report is rejected as a known issue due to this, details will be provided to you. This means that in order to be eligible for a reward, the vulnerability needs to exist in both the GitHub file and the respective deployment contract.
https://chainlog.makerdao.com/ is designed to be easy to run locally. Hence, taking down the application/website is considered out-of-scope for this website.
Vote comments are stored in a database accessed by https://vote.makerdao.com/. The critical functionality of the site (e.g., voting) is in-scope, but non-critical voter comments are out-of-scope.
Assets of MakerDAO can be found at https://github.com/makerdao. If you discover a vulnerability with Critical impact on any deployed smart contract, you may submit it for consideration by the Immunefi Security core unit.
Full documentation can be found at https://docs.makerdao.com/ and annotations can be found at https://docs.makerdao.com/other-documentation/smart-contract-annotations. A comprehensive guide to the smart contracts can be found at https://docs.makerdao.com/maker-protocol-101.
Further information about the Governance Voting asset can be found at:
- https://github.com/makerdao/gov-polling-db
- https://github.com/makerdao/governance-portal-v2
- API documentation: https://vote.makerdao.com/api-docs
- Gov polling db endpoint (can be used to view graphql schema)
The dai.js repo (https://github.com/makerdao/dai.js/ ) is NOT in scope even though it's a dependency of the Governance Portal (https://vote.makerdao.com/).
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.
Smart Contract
- Any governance voting result manipulationCriticalImpact
- Direct theft of any user funds, whether at-rest or in-motion, other than unclaimed yieldCriticalImpact
- Permanent freezing of fundsCriticalImpact
- Miner-extractable value (MEV)CriticalImpact
- Protocol InsolvencyCriticalImpact
- Theft of unclaimed yieldHighImpact
- Permanent freezing of unclaimed yieldHighImpact
- Temporary freezing of funds for at least five blocksHighImpact
- Smart contract unable to operate due to lack of token fundsMediumImpact
- Block stuffing for profitMediumImpact
- Griefing (e.g. no profit motive for an attacker, but damage to the users or the protocol)MediumImpact
- Theft of gasMediumImpact
- Unbounded gas consumptionMediumImpact
- Smart contract fails to work correctly, but doesn’t lose valueLowImpact
Websites and Applications
- Taking Down the application/websiteCriticalImpact
- Direct theft of user fundsCriticalImpact
- Execute arbitrary system commandsCriticalImpact
- Retrieve sensitive data/files from a running server such as /etc/shadow, database passwords, and blockchain keys(this does not include non-sensitive environment variables, open source code, or usernames)CriticalImpact
- Taking state-modifying authenticated actions (with or without blockchain state interaction) on behalf of other users without any interaction by that user, such as, changing registration information, commenting, voting, making trades, withdrawals, etc.CriticalImpact
- Subdomain takeover with already-connected wallet interactionCriticalImpact
- Malicious interactions with an already-connected wallet such as modifying transaction arguments or parameters, substituting contract addresses, submitting malicious transactionsCriticalImpact
- Injecting/modifying the static content on the target application without Javascript (Persistent) such as HTML injection without Javascript, replacing existing text with arbitrary text, arbitrary file uploads, etc.HighImpact
- Changing sensitive details of other users (including modifying browser local storage) without already-connected wallet interaction and with up to one click of user interaction, such as email or password of the victim, etc.HighImpact
- Improperly disclosing confidential user information such as email address, phone number, physical address, etc.HighImpact
- Subdomain takeover without already-connected wallet interactionHighImpact
- Redirecting users to malicious websites (Open Redirect)MediumImpact
- Changing non-sensitive details of other users (including modifying browser local storage) without already-connected wallet interaction and with up to one click of user interaction, such as changing the first/last name of user, or en/disabling notificationMediumImpact
- Injecting/modifying the static content on the target application without Javascript (Reflected) such as reflected HTML injection or loading external site dataMediumImpact
Out of Scope & Rules
The following vulnerabilities are excluded from the rewards for this bug bounty program:
- 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)
Smart Contracts and Blockchain
- Incorrect data supplied by third party oracles
- Not to exclude oracle manipulation/flash loan attacks
- Basic economic governance attacks (e.g. 51% attack)
- Lack of liquidity
- Best practice critiques
- Sybil attacks
- Centralization risks
Websites and Apps
- Theoretical vulnerabilities without any proof or demonstration
- Self-XSS
- Captcha bypass using OCR
- CSRF with no security impact (logout CSRF, change language, etc.)
- Missing HTTP Security Headers (such as X-FRAME-OPTIONS) or cookie security flags (such as “httponly”)
- Server-side information disclosure such as IPs, server names, and most stack traces
- Vulnerabilities used to enumerate or confirm the existence of users or tenants
- Vulnerabilities requiring unlikely user actions
- URL Redirects (unless combined with another vulnerability to produce a more severe vulnerability)
- Lack of SSL/TLS best practices
- DDoS vulnerabilities
- Attacks requiring privileged access from within the organization
- Feature requests
- Best practices
- Vulnerabilities primarily caused by browser/plugin defects
- Any vulnerability exploit requiring CSP bypass resulting from a browser bug
Further Scope Restrictions
Attacks Leveraging Other DeFi Protocols
Attacks in the DeFi space sometimes combine multiple protocols (e.g. utilizing flash loans from a margin protocol or manipulating the spot prices on a DEX). PoCs or descriptions of bug exploits may utilize such mechanisms, either to make an attack more severe than it would be in isolation, or to achieve an attack that would otherwise be impossible or infeasible. However, they will only be considered in-scope so long as all of the following are true:
- Losses or other negative effects of the attack are inflicted upon Maker ecosystem participants—MKR holders, DAI holders, Vault holders, or Keepers. If the losses or negative effects are inflicted solely upon other (external) protocols, the attack is not in scope for this bounty program (though we would encourage you to responsibly disclose to those protocols).
- The losses or other negative effects could be prevented via changes to the MCD smart contracts already included in the bounty scope.
- The additional DeFi protocols used exist as smart contracts on the Ethereum mainnet and can reasonably be expected to have enough liquidity in various assets to allow the attack to succeed (when there is insufficient liquidity to achieve the claimed severity level but the attack is still possible, it may still be considered in-scope but with a downgraded severity level). For example: if an attack requires an ETH flash loan, but the amount is larger than all the ETH available for loan across the ecosystem, the attack would be downgraded.
The following activities are prohibited by this bug bounty program:
- Any testing with mainnet or public testnet contracts; 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