MakerDAO

Submit a Bug
10 February 2022
Live since
No
KYC required
$10,000,000
Maximum bounty
05 May 2023
Last updated

Program 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/.

Responsible Publication

MakerDAO adheres to category 3. 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.

Primacy of Impact vs Primacy of Rules

MakerDAO adheres to the Primacy of Rules, which means that the whole bug bounty program is run strictly under the terms stated in this page. Governance-Run Program

Governance-Run Program

This bug bounty program is governed by a governance proposal. To view the governance proposal poll, visit https://mips.makerdao.com/mips/details/MIP64.

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.

Rewards by Threat Level

Rewards are distributed according to the impact the vulnerability could otherwise cause based on the Impacts in Scope table further below.

Reward Calculation for Critical Level Reports

For critical Smart Contract bugs, the reward amount is 10% of the funds directly affected up to a maximum of USD 10 000 000. The calculation of the amount of funds at risk is based on the time and date the bug report is submitted. However, a minimum reward of USD 150 000 is to be rewarded in order to incentivize security researchers against withholding a bug report.

Critical website and application bug reports will be rewarded with USD 100 000, only if the impact leads to a direct loss in funds involving an attack that does not require any user action at all. An impact of minting tokens on-chain beyond intended activity without requiring any user action would also be rewarded this amount due to the undesired dilution of existing circulating tokens. All other impacts that would be classified as Critical, or an impact resulting in a theft of funds that does not fall under this definition, would be rewarded USD 50 000.

Repeatable Attack Limitations

In cases of repeatable attacks for smart contract bugs, only the first attack is considered if the smart contracts where the vulnerability exists can be upgraded, paused, or killed. If the attack impacts a smart contract directly holding funds that cannot be upgraded or paused, the amount of funds at risk will be calculated with the first attack being at 100% of the funds that could be stolen and then a reduction of 25% from the amount of the first attack for every 300 blocks the attack needs for subsequent attacks from the first attack, rounded down. For avoidance of doubt, if a second attack would happen at 600 blocks and then a third at 900 blocks, the funds at risk would be counted at 50% and 25% of the reward from the first attack, respectively.

Reward Calculation for High Level 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 or NFTs could be temporarily frozen, rounded down to the nearest multiple of 5, up to the hard cap of USD 100 000.

Restrictions on Security Researcher Eligibility

Security researchers who fall under any of the following are ineligible for a reward:

  • Compensated team members of any MakerDAO core unit
  • 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
  • Members of IS-001
  • Third party suppliers of IS-001
  • 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

Public Disclosure of Known Issues

Bug reports covering previously-discovered bugs acknowledged below are not eligible for any reward through the bug bounty program.

  • 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.

Previous Audits

MakerDAO has provided these completed audit review reports for reference. Any unfixed vulnerability mentioned in these reports are not eligible for a reward.

Feasibility Limitations

Bug reports that require an attack that involve one or more other protocols (e.g. utilizing flash loans from a margin protocol or manipulating the spot prices on a DEX), 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, would be out-of-scope. However, they will be considered as in-scope and categorized according to the program rules as 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.
  • The losses or other negative effects could be prevented via changes to the MCD smart contracts already included in the bounty scope.
  • The additional protocols used must have enough liquidity in various assets to allow the attack to succeed at the time of bug report submission. 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

Proof of Concept (PoC) Requirements

A PoC is required for the following severity levels:

  • Smart Contract - Critical
  • Smart Contract - High
  • Smart Contract - Medium
  • Smart Contract - Low
  • Web/App - Critical
  • Web/App - High
  • Web/App - Medium

All PoCs submitted must comply with the Immunefi-wide PoC Guidelines and Rules. Bug report submissions without a PoC when a PoC is required will not be provided with a reward.

Other Terms and Information

Exceptions to the PoC requirement for smart contract bugs 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. 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 would also qualify for a reward of USD 100 000.

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.

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.

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 asset.

All Medium and High level bug reports are not in-scope for the https://vote.makerdao.com/ asset. Only Critical severity reports are in-scope for this asset.

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.

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.

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/).

For the High impact “Causing the ESM to fail at preventing the theft or permanent locking of funds when triggered, regardless of other manual mitigations or GSM delay length”, there is a minimum reward of USD 5 000.

With regards to the terms under “Feasibility Limitations”, consideration may be made if the first two bullet points are met but the third isn’t, pending confirmation from the steward core unit.

Reward Payment Terms

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. As per MIP64, for bug bounty rewards over USD 1 000 000, after the first million is paid out, the remaining amount is paid out over time with up to USD 1 000 000 per consecutive month until the determined amount for payout is reached.

Smart Contract

Critical
Level
Up to $USD 10,000,000
Payout
PoC Required
High
Level
Up to USD $100,000
Payout
PoC Required
Medium
Level
USD $5,000
Payout
PoC Required
Low
Level
USD $1,000
Payout
PoC Required

Websites and Applications

Critical
Level
Up to USD $100,000
Payout
PoC Required
High
Level
USD $5,000
Payout
PoC Required
Medium
Level
USD $2,500
Payout
PoC Required

Assets in scope

Assets of MakerDAO can be found at https://github.com/makerdao

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/

Unless explicitly listed, only pages of the web/app assets in addition to the direct link are considered in-scope of the bug bounty program. Other subdomains are not considered as in-scope.

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:

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

  • Manipulation of governance voting result deviating from voted outcome and resulting in a direct change from intended effect of original results
    Critical
    Impact
  • Direct theft of any user funds, whether at-rest or in-motion, other than unclaimed yield
    Critical
    Impact
  • Permanent freezing of funds
    Critical
    Impact
  • Protocol Insolvency
    Critical
    Impact
  • Theft of unclaimed yield
    High
    Impact
  • Permanent freezing of unclaimed yield
    High
    Impact
  • Temporary freezing of funds for at least five blocks
    High
    Impact
  • Causing the ESM to fail at preventing the theft or permanent locking of funds when triggered, regardless of other manual mitigations or GSM delay length
    High
    Impact
  • Smart contract unable to operate due to lack of token funds
    Medium
    Impact
  • Block stuffing
    Medium
    Impact
  • Griefing (e.g. no profit motive for an attacker, but damage to the users or the protocol)
    Medium
    Impact
  • Theft of gas
    Medium
    Impact
  • Unbounded gas consumption
    Medium
    Impact
  • Smart contract fails to work correctly, but doesn’t lose value
    Low
    Impact

Websites and Applications

  • Taking Down the application/website
    Critical
    Impact
  • Direct theft of user funds
    Critical
    Impact
  • Execute arbitrary system commands
    Critical
    Impact
  • 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)
    Critical
    Impact
  • 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.
    Critical
    Impact
  • Subdomain takeover with already-connected wallet interaction
    Critical
    Impact
  • Malicious interactions with an already-connected wallet such as modifying transaction arguments or parameters, substituting contract addresses, submitting malicious transactions
    Critical
    Impact
  • 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.
    High
    Impact
  • 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.
    High
    Impact
  • Improperly disclosing confidential user information such as email address, phone number, physical address, etc.
    High
    Impact
  • Subdomain takeover without already-connected wallet interaction
    High
    Impact
  • Redirecting users to malicious websites (Open Redirect)
    Medium
    Impact
  • 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 notification
    Medium
    Impact
  • Injecting/modifying the static content on the target application without Javascript (Reflected) such as reflected HTML injection or loading external site data
    Medium
    Impact

Out of Scope & Rules

The following vulnerabilities are excluded from the rewards for this bug bounty program:

  • Impacts requiring attacks that the reporter has already exploited themselves, leading to damage
  • Impacts caused by attacks requiring access to leaked keys/credentials
  • Impacts caused by 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
  • Impacts relying on attacks involving the depegging of an external stablecoin where the attacker does not directly cause the depegging due to a bug in code
  • Mentions of secrets, access tokens, API keys, private keys, etc. in Github will be considered out of scope without proof that they are in-use in production
  • Best practice recommendations
  • Feature requests
  • Impacts on test files and configuration files unless stated otherwise in the bug bounty program
  • All impacts relying on attacks involving the depegging of an external stablecoin where the attacker does not directly cause the depegging due to a bug in code

Smart Contracts

  • Incorrect data supplied by third party oracles
    • Not to exclude oracle manipulation/flash loan attacks
  • Impacts requiring basic economic and governance attacks (e.g. 51% attack)
    • With the exception for the impact "Causing the ESM to fail at preventing the theft or permanent locking of funds when triggered"
  • Lack of liquidity impacts
  • Impacts from Sybil attacks
  • Impacts involving centralization risks

Websites and Apps

  • Theoretical impacts without any proof or demonstration
  • Impacts involving attacks requiring physical access to the victim device
  • Impacts involving attacks requiring access to the local network of the victim
  • Reflected plain text injection (e.g. url parameters, path, etc.)
    • This does not exclude reflected HTML injection with or without JavaScript
    • This does not exclude persistent plain text injection
  • Any impacts involving self-XSS
  • Captcha bypass using OCR without impact demonstration
  • CSRF with no state modifying security impact (e.g. logout CSRF)
  • Impacts related to missing HTTP Security Headers (such as X-FRAME-OPTIONS) or cookie security flags (such as “httponly”) without demonstration of impact
  • Server-side non-confidential information disclosure, such as IPs, server names, and most stack traces
  • Impacts causing only the enumeration or confirmation of the existence of users or tenants
  • Impacts caused by vulnerabilities requiring un-prompted, in-app user actions that are not part of the normal app workflows
  • Lack of SSL/TLS best practices
  • Impacts that only require DDoS
  • UX and UI impacts that do not materially disrupt use of the platform
  • Impacts primarily caused by browser/plugin defects
  • Leakage of non sensitive API keys (e.g. Etherscan, Infura, Alchemy, etc.)
  • Any vulnerability exploit requiring browser bugs for exploitation (e.g. CSP bypass)
  • SPF/DMARC misconfigured records)
  • Missing HTTP Headers without demonstrated impact
  • Automated scanner reports without demonstrated impact
  • UI/UX best practice recommendations
  • Non-future-proof NFT rendering

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