Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
LABS
Guides

Setting Up a Critical Vulnerability Disclosure Policy

A technical guide for protocol teams to establish a formal process for receiving and handling critical security vulnerability reports from external researchers.
Chainscore © 2026
introduction
SECURITY FUNDAMENTALS

Setting Up a Critical Vulnerability Disclosure Policy

A formal vulnerability disclosure policy (VDP) is a foundational security practice for any Web3 protocol. This guide explains why you need one and how to establish it.

A vulnerability disclosure policy (VDP) is a public document that defines the rules of engagement for security researchers who discover bugs in your protocol. For Web3 projects, where smart contracts often manage significant value, a clear VDP is non-negotiable. It acts as a structured channel for receiving and triaging security reports, moving them away from public forums like Twitter or Discord where panic can spread. Without a VDP, researchers may resort to public disclosure, which can lead to exploits before a fix is deployed, or they may attempt to negotiate bounties directly, creating legal and operational risks for your team.

The core components of a robust VDP include a secure reporting channel (like a dedicated email or a platform like HackerOne), a scope defining which systems are in-bounds (e.g., mainnet contracts, official frontends), and a commitment not to pursue legal action for good-faith research. You must also define your response service level agreement (SLA), such as acknowledging receipt within 48 hours and providing status updates. Public examples from leading protocols like Uniswap, Aave, and Compound provide excellent templates to adapt.

Implementing the policy requires internal coordination. Designate a security response lead and a backup. Use a private, encrypted channel for report intake, such as security@yourproject.com with PGP encryption. Establish an internal triage process to assess severity using a framework like the CVSS. For critical bugs, you must have a pre-defined incident response plan that includes steps for pausing contracts (if you have a guardian or timelock), developing and testing a patch, coordinating with auditors, and planning the deployment and communication strategy.

Finally, integrate your VDP with a bug bounty program to incentivize research. While a VDP is for coordinated disclosure regardless of reward, a bug bounty sets financial incentives for severity levels. Platforms like Immunefi and HackerOne specialize in Web3 and can manage both. Start by launching your VDP publicly on your website's security page. Then, based on your treasury and risk profile, you can layer on a bounty program. Transparency about past disclosures, as practiced by Ethereum, builds trust with the security community.

prerequisites
PREREQUISITES

Setting Up a Critical Vulnerability Disclosure Policy

A formal vulnerability disclosure policy (VDP) is a foundational security requirement for any Web3 protocol. This guide outlines the essential components and steps to establish one.

A Vulnerability Disclosure Policy (VDP) is a public document that defines the secure process for security researchers to report vulnerabilities in your protocol's smart contracts, front-end applications, or infrastructure. It establishes clear rules of engagement, protecting both the project and ethical hackers. Without a VDP, you risk receiving reports through insecure channels like public social media, which can lead to zero-day exploits. Leading frameworks like Disclose.io and the ISO/IEC 29147:2018 standard provide templates and best practices. Your policy should be easily accessible, typically linked in your project's GitHub repository security policy or website footer.

The core of an effective VDP is a dedicated, secure communication channel. A private security@yourproject.com email address monitored by your core engineering team is the minimum. For higher-value protocols, consider a dedicated bug bounty platform like Immunefi, HackerOne, or Code4rena. These platforms provide structured reporting forms, encrypted communication, and triage services. The policy must explicitly state what is in scope (e.g., mainnet smart contracts, official web app) and out of scope (e.g., third-party dependencies, low-impact UI bugs). Clearly defining severity classifications (Critical, High, Medium, Low) using the CVSS (Common Vulnerability Scoring System) framework is crucial for consistent evaluation.

Your policy must include a safe harbor clause. This legal statement assures researchers that they will not face legal action under laws like the CFAA (Computer Fraud and Abuse Act) or DMCA if they follow the policy's guidelines. It should grant explicit permission for security testing on your in-scope systems. The clause should be written in clear, unambiguous language. You can adopt standardized safe harbor language from the Disclose.io project. This is a critical step to encourage responsible disclosure and build trust with the security community.

Finally, establish a clear internal process for response and remediation. Define roles: who receives the report, who validates it, who coordinates the fix, and who communicates with the reporter. Set explicit response time SLAs (e.g., acknowledge receipt within 24-48 hours). The policy should outline the reward structure, if any, including bounty amounts for different severity levels. For critical vulnerabilities, have a pre-defined incident response plan for deploying emergency fixes and coordinating disclosures with affected parties, such as users or integrated protocols. Publishing this policy is the first step in building a proactive security posture.

policy-scope-definition
FOUNDATION

Define Policy Scope and Assets

The first step in creating an effective vulnerability disclosure policy is to clearly define what is in and out of scope. This establishes the rules of engagement for security researchers.

A well-defined scope protects both your project and external researchers. It specifies which systems, smart contracts, and applications are eligible for testing and reporting. For example, your policy might cover the mainnet deployment of your ProtocolV2.sol contract, your official web frontend at app.yourprotocol.xyz, and your public API. Crucially, you must also explicitly list what is out of scope, such as third-party dependencies, testnet environments not listed, or social engineering attacks against team members. This clarity prevents wasted effort and potential legal issues.

Start by creating an inventory of your in-scope assets. This typically includes: - Production smart contract addresses (e.g., 0x742d35Cc6634C0532925a3b844Bc9e... on Ethereum Mainnet). - Official front-end domains and subdomains. - Public API endpoints and documentation. - Any other client software distributed by your team. Use a version-controlled file, like a SECURITY.md in your GitHub repository, to maintain this list. For blockchain projects, consider using a tool like truffle-flattener or hardhat-etherscan to publish verified source code, which is a critical asset for researchers.

Your scope must also define the types of vulnerabilities you are interested in. Common categories for Web3 include: - Smart contract logic errors (e.g., reentrancy, integer overflow). - Access control flaws in onlyOwner functions. - Frontend vulnerabilities like cross-site scripting (XSS) targeting your dApp interface. - Cryptographic weaknesses in signature verification. Be specific. Instead of "financial impact," state "vulnerabilities that could lead to a direct loss of user funds or protocol-controlled assets." This focuses researcher efforts on high-severity issues.

Finally, communicate the scope effectively. The Open Source Security Foundation (OpenSSF) provides excellent templates. Your policy's scope should be easily accessible, typically linked from your website's footer, your GitHub repository's README.md, and on bug bounty platforms like Immunefi or HackerOne. A clear, public scope demonstrates a professional security posture and invites responsible collaboration from the white-hat community.

secure-communication-channels
VULNERABILITY DISCLOSURE

Establish Secure Communication Channels

A structured vulnerability disclosure policy (VDP) is a foundational security control for any Web3 project. It defines the process for security researchers to report vulnerabilities safely and legally.

02

Implement a Dedicated Security Contact

Establish a dedicated, monitored email address (e.g., security@, vuln@) or a web form for submissions. Do not rely solely on public social channels like Discord or Twitter DMs for initial reports, as they are prone to being missed. For critical projects, consider using a PGP key for encrypted communication. This channel must be monitored 24/7 by your security team to meet your promised response SLA.

04

Define Clear Severity and Reward Tiers

Use a standardized framework like the Immunefi Vulnerability Severity Classification System to categorize bugs (Critical, High, Medium, Low). Link each tier to specific, pre-defined bounty rewards. For example:

  • Critical (e.g., direct theft of funds): Up to 10% of funds at risk, with a minimum of $50,000.
  • High (e.g., permanent freezing of funds): Up to 5% of funds at risk. Clear, financially significant rewards incentivize the highest-quality research.
05

Create a Responsible Disclosure Timeline

Outline the process for handling a validated vulnerability post-fix. A common 90-day disclosure policy involves:

  1. Day 0: Researcher submits report.
  2. Day 1-60: Your team develops, tests, and deploys a fix.
  3. Day 61-90: Grace period after the fix is live before the researcher may publicly disclose details. This balances the need for user protection with the researcher's right to publish their work.
06

Document and Learn from Incidents

After a vulnerability is resolved, publish a post-mortem or transparency report. This should cover:

  • A technical breakdown of the root cause.
  • The steps taken to remediate it.
  • Lessons learned and process improvements. This practice builds community trust, demonstrates your security maturity, and educates the broader ecosystem. See examples from major protocols like Compound or Uniswap.
SERVICE LEVEL AGREEMENTS

Define Response and Remediation SLAs

Comparison of SLA tiers for handling critical vulnerability disclosures, balancing speed, cost, and resource allocation.

SLA MetricTier 1: StandardTier 2: PriorityTier 3: Critical

Initial Response Time

72 hours

24 hours

< 8 hours

Triage & Acknowledgement

5 business days

48 hours

24 hours

Remediation Timeframe

30-90 days

14-30 days

< 7 days

Public Disclosure Coordination

Bounty Payment Window

30 days post-fix

14 days post-fix

48 hours post-fix

Dedicated Security Contact

Escalation to Core Devs

Compensation Range (CVSS 9.0+)

$5,000 - $25,000

$25,000 - $100,000

$100,000+

Post-Mortem Report

internal-handling-procedure
SECURITY POLICY

Create an Internal Triage and Handling Procedure

A structured internal procedure is essential for efficiently and securely managing vulnerability reports from external researchers.

An internal triage and handling procedure defines the clear workflow your team follows from the moment a vulnerability report is received until its resolution. This process minimizes response time, reduces internal confusion, and ensures consistent, professional communication with the reporter. The core stages typically include initial receipt and acknowledgment, technical validation and severity assessment, internal coordination for a fix, patch deployment and verification, and finally, disclosure and bounty payment. Without this structure, critical reports can be lost, delayed, or mishandled, increasing your protocol's exposure to risk.

The first critical step is establishing a dedicated, monitored intake channel. This is often a security@yourproject.com email alias or a web form on a /security page, as recommended by platforms like OpenZeppelin's Security Center. All reports should be encrypted using PGP, with your public key readily available. Upon receipt, an automated or manual acknowledgment must be sent within 24-48 hours, confirming the report is under review. This initial contact builds trust with the researcher and sets expectations.

Technical Validation and Triage involves replicating the issue described in the report. Assign this to a senior engineer or security lead who can access the relevant codebase and test environments. They must assess the bug's impact, categorizing it using a framework like the CVSS calculator. This assessment determines the priority: Critical vulnerabilities affecting mainnet contracts require an immediate all-hands response, while lower-severity UI bugs follow a standard sprint cycle. Document all findings in a private, access-controlled issue tracker.

For validated issues, initiate Internal Coordination. Create a confidential task force including developers, auditors, and protocol leads. The goal is to develop, test, and schedule a fix without revealing exploitable details internally. For smart contracts, this may require crafting a mitigation, having it reviewed by an external auditor (like ChainSecurity or Trail of Bits), and planning an upgrade or migration. Communication with the reporter during this phase should provide general timelines without disclosing technical specifics that could be leveraged.

Once a fix is ready, execute the Remediation and Verification phase. For decentralized applications, this may involve a governance proposal to upgrade proxy contracts. After deployment, the triage lead must verify the patch effectively neutralizes the vulnerability on a testnet or fork. Simultaneously, coordinate with the reporter to confirm the fix resolves the issue from their perspective. Only after successful verification should you proceed to public disclosure.

The final phase is Resolution and Disclosure. Fulfill any bounty agreement per your policy's terms. Work with the researcher on coordinated disclosure, typically allowing a 7-14 day embargo after the fix is live before publishing details. Publish a post-mortem or security advisory that credits the researcher, describes the flaw at a high level, and outlines the corrective actions taken. This transparent closure reinforces your project's security maturity and encourages future responsible reporting.

publication-and-maintenance
OPERATIONALIZATION

Publish and Maintain the Policy

A vulnerability disclosure policy is only effective if it is accessible and actively managed. This section covers publishing your policy and establishing a process for its ongoing maintenance.

Publish your finalized policy in a public, easily discoverable location. The most common and effective practice is to create a SECURITY.md or SECURITY.txt file in the root directory of your project's primary code repository (e.g., on GitHub or GitLab). This file is the industry standard for security documentation. Additionally, link to this policy from your project's main README.md, your official website, and any developer documentation portals. For on-chain protocols, consider storing a hash of the policy on-chain or referencing its location in immutable documentation like IPFS to establish provenance and prevent tampering.

Maintenance is critical. Assign clear ownership of the policy to a specific individual or team, such as a Security Lead or a dedicated committee. This owner is responsible for monitoring the disclosed contact channel, triaging incoming reports, and ensuring the response process outlined in the policy is followed. Establish an internal workflow for handling reports: who is notified, how severity is assessed, and how fixes are coordinated. Use tools like private security advisories on GitHub, dedicated email aliases (e.g., security@yourproject.org), or a webform to manage submissions securely and maintain an audit trail.

Regularly review and update the policy. The blockchain ecosystem and attack vectors evolve rapidly. Schedule an annual review of your policy to ensure contact information is current, the scope of assets is accurate, and the response timelines are still realistic. Furthermore, update the policy after any significant security incident or major protocol upgrade. Publicly acknowledge and thank researchers who submit valid reports; this builds trust and encourages future responsible disclosure. Transparency in patching and disclosure, such as publishing post-mortems for resolved issues, demonstrates your project's commitment to security and completes the feedback loop with the security community.

VULNERABILITY DISCLOSURE

Frequently Asked Questions

Common questions and technical clarifications for developers implementing a Critical Vulnerability Disclosure (CVD) policy for their Web3 protocol or smart contract system.

A Critical Vulnerability Disclosure (CVD) policy is a formal, public document that outlines the process for security researchers to responsibly report critical bugs in your protocol's code. It's essential because it provides a legal safe harbor for white-hat hackers, encouraging them to disclose vulnerabilities to you privately instead of exploiting them or selling them on the black market. For Web3 projects, where smart contracts are immutable and often manage significant value, a CVD policy is a core component of operational security. It establishes clear communication channels, defines what constitutes a valid report, and sets expectations for timelines and potential rewards (bug bounties). Without one, you risk public exploits, loss of funds, and reputational damage.

How to Set Up a Critical Vulnerability Disclosure Policy | ChainScore Guides