Audit Competition | ENS-logo

Audit Competition | ENS

|

ENS (Ethereum Name Service) is a distributed, open, and extensible naming system based on the Ethereum blockchain. ENS maps human-readable names like 'alice.eth' to machine-readable identifiers such as Ethereum addresses, other cryptocurrency addresses, content hashes, and metadata. It functions as a decentralized alternative to the traditional DNS, allowing users to replace long, complex wallet addresses with simple, memorable names.

Built on a system of smart contracts, ENS supports both the '.eth' top-level domain native to Ethereum and the integration of traditional DNS names. Its architecture is composed of two principal components: the registry, which maintains the record of all domains and their owners, and resolvers, which are responsible for translating names into the corresponding addresses or resources.

Live

7d: 13h remaining
Primary Pool
$49,000
All Stars Pool
$14,000
Podium Pool
$7,000
Vault TVL
$69,994.40
Start Date
18 August 2026
End Date
14 September 2026
Rewards Token
USDC
Lines of Code
137,845
  • Triaged by Immunefi

  • Step-by-step PoC Required

  • Vault program

  • KYC required

This Audit Competition Is Live!

MilestoneDate
AnnouncementAug 10, 2026
Launch (competition goes live)Aug 18, 2026
Competition endsSep 14, 2026
Project deadline to resolve all reportsSep 20, 2026
Results frozen and calculatedSep 28, 2026
Final 48-hour dispute deadlineSep 29, 2026
Payment completeOct 26, 2026
Results publishedOct 26, 2026
Start Date
18 August 2026 08:00 UTC
End Date
14 September 2026 11:00 UTC

VaultImmunefi vault program

Funds available

$69,994.40

30d Avg. Funds availability

$69,987.41

Assets in vault

  • 70k  USDC

Public vault address

0x39befB5b7F778278Cc1d9Ee3a4F1e06CBA163293

Rewards

Audit Competition | ENS provides rewards in USDC on ETH, denominated in USD.

Rewards by Threat Level

Websites and Applications
Critical
Portion of the Reward Pool
High
Portion of the Reward Pool
Medium
Portion of the Reward Pool
Low
Portion of the Reward Pool
All categories *
Insight
Portion of the Reward Pool
Rewards Body

Rewards Terms

Rewards are distributed among SRs according to Immunefi’s Standardized Competition Reward Terms and includes All Star Pool and Podium Pool reserved for All Star Program participants.

Rewards are denominated in USD and distributed in USDC on ETH.

The reward pool is determined by the greatest severity bug found.

  • A Critical is found - $70,000 USD
  • A High is found - $50,000 USD
  • A Medium or Low is found - $30,000 USD

If not a single security vulnerability is found (Insights do not count as bugs) the reward pool is $3k USD.

Private Known Issues Reward Policy

Private known issues — known issues that were not publicly disclosed — are valid for a reward at their full severity. They unlock reward pools as though they were one severity level lower; however, the severity level of the private known issue itself remains unchanged, and researchers earn their portion of the reward pool and their position on the leaderboard according to that unchanged severity level.

Public known issues are invalid.

KYC Requirement

ENS requires KYC information to pay for bug submissions. The following information will be required:

  • Full name
  • Date of birth
  • Proof of address (either a redacted bank statement with address or a recent utility bill)
  • Copy of Passport or other Government issued ID

Security researchers are required to submit KYC within 7 days of KYC being requested, else their rewards may be forfeited. Immunefi may make exceptions due to extenuating circumstances.

For the full process, see KYC Process for Audit Competitions (link: https://immunefisupport.zendesk.com/hc/en-us/articles/32264466580497).

Program Overview

This audit competition covers the ENS Manager and Explorer applications. Both are new applications built from scratch.

Scope

The scope is limited to the Manager and Explorer apps as designed. It does not include code from imported libraries or the underlying infrastructure. Researchers should keep the following boundaries in mind:

  • Third-party dependencies: unmodified third-party dependencies are out of scope. Modifications to third-party dependencies are in scope (for example, a modified wallet connector).
  • Third-party services: services such as Cloudflare and testing suites are out of scope.

Prioritized vulnerabilities

Our primary concern is any bug that could lead to a loss of user funds. In particular, vulnerabilities where the application could:

  • direct users to transfer funds to an address other than the intended one,
  • cause a user to reveal their private key to a third party, or
  • cause a user to install software on their machine that could facilitate the theft of personal or private information.

We are also concerned with the transaction-construction and smart-account/session-key paths (packages/transaction-manager, packages/smart-account): anything that lets a transaction be built, signed, or attributed with the wrong chain, sender, target address, or arguments.

Token standards

  • ENS names are ERC-1155 (wrapped v1 names and all v2 names) or ERC-721 (unwrapped v1 .eth names, via the BaseRegistrar).
  • A name can be registered using an ERC-20 stablecoin.

Chains and networks

Ethereum Sepolia is the primary network. Resolution and primary-name flows also read and write the Sepolia testnets of Optimism, Arbitrum, Base, Linea and Scroll.

External dependencies

  • Rhinestone (@rhinestone/sdk)
  • Ensjs (this version) — @ensdomains/ensjs & @ensdomains/ensjs-abi
  • Wagmi
  • Viem

Program Assurances & Guarantees

🎯 Asset Accuracy Assurance

Bugs found on assets that are incorrectly listed as in-scope are considered valid.

🧊 Code Freeze Assurance

Code for in-scope assets is strictly frozen while the program is live.

  • Immediate Fixes: If a bug found during the competition requires an immediate patch, it will be considered a publicly known issue as soon as the fix is deployed.
  • Post-Fix Submissions: Submissions of the same bug received after the fix is public are considered duplicate valid.
  • Fix Bypasses: Bypassing a deployed fix is considered a new, valid bug.
  • Duplicates: Duplicate submissions of bugs are valid. Duplicate submissions of Insights are invalid.

🔒 Confidentiality Commitment The project commits to keeping all information related to bug findings completely private until this program concludes. No details regarding bug findings or planned fixes will be leaked, including findings discovered independently or through concurrent private audits.

Standardized Rules

This program follows Immunefi's standard competition rules. For the full default rules on validity, duplicates, known issues, severity, disputes, KYC, payments, and publication, read How Audit Competitions Work: Rules and Policies. Where this program page defines a specific rule, the program page prevails.

Insight Reporting

  • Insight reports may be submitted to this program. Runnable code is not required, but the PoC section must describe the conditions under which the insight is valuable.
  • Only the best report of a given Insight is rewarded. Duplicates of Insights are not rewarded.
  • Insights are rewarded according to Immunefi's Standardized Competition Reward Terms and are not eligible for mediation or appeal.

Dispute Resolution

  • Disputes may only address report validity, duplicate determinations, and severity.
  • If a researcher disagrees with a closure decision while the competition is live, they may request mediation. A mediation fee, set by Immunefi, is required to initiate the review.
  • After the evaluation phase, a dispute period opens for appealing decisions. Immunefi announces a final 48-hour deadline for the last disputes. Once the window closes, results are final.
  • Immunefi has final say on validity, duplicates, and severity, based on the terms of this program. Insights are not eligible for mediation or appeal.

Responsible Publication Policy

Immunefi will publish bug reports, earnings, and a leaderboard for this Audit Competition. Security researchers may publish their bug reports as well, but only after Immunefi has published the results as part of the competition results.

Eligibility Criteria

Security researchers who wish to participate must adhere to the rules of engagement set forth in this program and cannot be:

  • On OFAC's SDN list
  • An official contributor, past or present
  • Employees and/or individuals closely associated with the project
  • Security auditors that directly or indirectly participated in an audit review of the code in scope (such auditors may participate only if they receive project permission)
  • From a restricted country or territory per Immunefi's Terms of Use
  • Under 18 years of age. Participants under 18 cannot pass KYC and will not receive rewards.

Submission Fees

A submission fee, set and managed by Immunefi, applies to each report and is shown at submission time. If a researcher disagrees with a closure decision, initiating a mediation also requires a fee set by Immunefi.

Known Issues

Reports covering previously identified bugs listed below are not eligible for rewards under this program.

This includes:

  • Known issues that the project is aware of, even if no fix or code changes have been implemented.
  • Issues the project has consciously decided not to remediate.
  • Cases where operational mitigations or procedures have been implemented to reduce potential risk.
Category
Websites and Applications
Description / Link
WEB-580 (Functional, Explorer, Ready, High) — Cancelling a transaction re-prompts the wallet (same as QA-07).
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-716 (Functional, Explorer, fix in QA, Medium) — The Registry page only offers the deploy-subregistry action when the registry slot is empty, even though an account with the set-subregistry role can replace an existing one on-chain.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-1233 (Functional, Explorer, Triage, Low) — The browser tab title keeps showing the previous name when navigating between pages until a reload.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-1305 (Functional, Explorer, Triage) — Attempting to transfer V2 name roles to a V1 name stays pending indefinitely; this transfer should be blocked in the UI (related to QA-01).
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-699 (Functional, Explorer, In Progress, Medium) — A WalletConnect connection from a mobile wallet succeeds but the app UI does not update until the page is refreshed; affects both apps (same as QA-02).
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-1187 (Functional, Explorer, Ready, High) — The checkout flow does not warn that sETH is needed for gas — same behavior as WEB-1188, on the Explorer app.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-1257 (Functional, Explorer, In Review, High) — After a parent name is transferred, its registry is not detached, and the previous owner can no longer set a subname they still hold as their primary name (same as QA-01).
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-390 (Functional, Manager, Ready, Urgent, blocked) — Subnames do not appear in the migration list even when their parent name does.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-441 (Functional, Manager, In Progress, Low) — Support-docs link placed awkwardly in the dashboard FAQ (cosmetic only).
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-1136 (Functional, Manager, In Progress, Low) — Cosmetic visual defect on a new banner.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-1304 (Functional, Manager, Triage, under investigation) — Renewing a wrapped V1 name extends the base registrar expiry but not the NameWrapper expiry, so the wrapper can expire (its owner reads as the zero address) while the registration itself is still valid.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-1263 (Functional, Manager, Triage) — Raw error message rendering in the UI (same as QA-08).
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-1301 (Functional, Manager, Triage, Medium) — The address view displays owner, registered, and expires values taken from the wallet's primary name, which is misleading in an address context.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-1231 (Functional, Manager, Triage, Medium) — Avatar not shown in homepage search results (same as QA-09).
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-1148 (Functional, Manager, In Progress, Medium) — When two users register the same name at the same time, the losing user is stuck in an endless commit loop until they refresh the page.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-1249 (Functional, Manager, Ready, High) — With subregistry and subname-creation permissions on a name, creating a new subname can replace the existing child registry with a fresh empty one, orphaning nested subnames and breaking their primary-name resolution.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-1259 (Functional, Manager, fix in QA, High) — Burning fuses fails for wrapped V1 names (same behavior as QA-04).
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-1188 (Functional, Manager, Ready, High) — The checkout flow does not warn that sETH is needed for gas; the user can proceed until the wallet itself rejects.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-391 (Functional, Manager, Ready, High) — V1 subnames appear greyed out and unclickable in search results, although the profile loads when opened by direct URL.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-626 (Functional, Manager, Ready, High) — Renewing one of your own names that is in grace period shows a modal implying you are extending a name owned by someone else.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-567 (Functional, Manager, In Progress, High) — Uploaded avatar and header images behave inconsistently: some show while editing but not after saving, old images display instead of new ones, and a reload is needed for updates to appear.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-622 (Functional, Manager, In Progress, High) — The testnet deployment shows a browser certificate warning (untrusted issuer) instead of loading the app.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-1255 (Functional, Manager, In Progress, High) — Grace-period helpers take a bare isV2 flag rather than the name's protocol, and one entry point defaults it to true, so V1 names (90-day grace) can be evaluated with the v2 window (28 days) and shown the wrong expiry status.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-1303 (Functional, Manager, In Progress, High) — Editing the profile of a name that cannot be migrated fails with a server 500 error.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
WEB-806 (Functional, Manager, In Progress, Urgent) — After migrating a subname that has records, the records are not visible on its profile in the Manager app.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
QA-10 (Functional, Explorer) — In the bulk renewal flow, names with avatars set do not display them, while names without avatars show an empty box.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
QA-09 (Functional, Manager) — Searching a name from the homepage does not show the name's avatar in the results even when one is set.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
QA-07 (Functional, Explorer) — Rejecting a transaction can surface a large raw error, and the wallet may prompt again several times even after the user cancelled.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
QA-06 (Functional, Manager + Explorer) — If a subname is set as primary while still resolving and is then deleted or stops resolving, it is still shown as the primary name and opening the profile throws an error.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
QA-05 (Functional, Manager) — Renewing a name immediately after registering it fails with a 'this name cannot be renewed here' error; the block clears on its own after some time.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
QA-04 (Functional, Explorer, fix in QA) — Attempting to burn fuses for wrapped V1 names fails with a transaction error.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
QA-03 (Functional, Explorer) — In the registration and extension modals, the per-year discounted price and the displayed total do not always agree (display-level only). A mismatch between the displayed total and the amount actually charged on-chain would be a new finding.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
QA-02 (Functional, Manager + Explorer) — On mobile via WalletConnect, Rainbow wallet fails to connect completely and MetaMask requires a page reload after connecting before it works fully.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
QA-01 (Functional, Manager + Explorer) — Certain role combinations when transferring a name, or a name with subnames, cause errors when later updating profile records or setting a primary name. A demonstrated security consequence (e.g., a role combination that grants unintended authority) would be a new finding.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
R3-08 (Medium) — The error recorded when an attempt fails is not cleared when a later attempt succeeds, so the terminal record carries both a success status and the earlier failure message — the user's transaction history shows a confirmed transaction annotated with a submission error.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
R3-07 (Medium) — Completion is tracked per transaction id and never cleared, and registration/renewal use fixed ids; after a failed attempt, a successful retry with the same id is treated as already completed, so it is never archived, reported to history, or reported to telemetry, and its record stays shown as pending.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
R3-06 (High) — Archived transaction records take the chain identifier only from an explicit option with no fallback to the value on the request; registration call sites do not pass it, so those records carry no chain and history reporting drops any record without one — a successful registration can leave nothing in the user's history.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
R3-05 (High) — In the localStorage fallback used when IndexedDB is unavailable, the scan for active transaction records also matches the history key (shared prefix), so clearing active transactions destroys the entire archive, and the history record is misparsed as a single active transaction, inflating the active count and corrupting exported data.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
R3-04 (High, availability) — If commitment generation fails, the retry path resumes at submission instead of regenerating the commitment, submitting an undefined value and throwing a type error that routes back to the same retry target and loops; the user sees an opaque error and can only proceed by cancelling.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
R3-03 (High, availability) — The registration flow's status poller has the same missing completion handler: if the transaction actor is stopped while the machine awaits confirmation, the waiting state has no timeout or exit, leaving the user on a permanent spinner for a name they may already own.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
R3-02 (High, availability) — Helpers that await a transaction subscribe without a completion handler, so if the underlying actor is stopped (for example by switching or disconnecting the wallet account) the promise never resolves or rejects and the caller awaits forever with a leaked subscription. Any individual site of this shared root-cause pattern is a duplicate of R3-02.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
R3-01 (High, availability) — The telemetry-payload trimming routine halves the event list until two entries remain, then rebuilds the same list each pass without shrinking, so it never terminates; running synchronously on the main thread it freezes the tab and the user loses the session mid-registration. Reachable when two error events carry large serialized simulation data.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
R2-05 (Low, fix in review) — The SendGrid event webhook verifies its ECDSA signature only when the verification key is configured; with the key unset the handler processes unauthenticated request bodies (fails open). Production configuration is being verified.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
R2-04 (Low, fix in QA) — The Explorer's OG-image Cloudflare Worker resolves the requested name's avatar text record (attacker-controlled for any name they own) and fetches it server-side with no host or IP allowlist, giving a limited server-side request forgery (SSRF) primitive.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
EXP-GAP-006 (Medium) — Product analytics receives full transaction context, including calldata, error chains, transaction identifiers, and wallet addresses — a privacy and data-minimization problem with a third-party processor rather than a direct exploit against the apps.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
R2-06 (Low) — Session 'revocation' only clears browser storage; no on-chain revocation is performed, so the co-owner permission persists until it expires, making the 7-day lifetime the real bound.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
R2-03 (Medium, accepted design residual) — The prompt-free session adds an ephemeral key as a time-boxed co-owner of the smart account; because the account rejects scoped-session modules, that key has full owner authority for its 7-day lifetime and is held in browser storage. Reports that this key is broadly scoped or exfiltratable from browser storage are duplicates; authority beyond its stated lifetime or the account's permissions would be a new finding.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
SEC-TXM-002 (High, defensive) — A configured or cached smart-account address is returned without confirming it matches the address the SDK derives live; a divergence would cause callers to treat the wrong address as owner or target. The missing check is confirmed but no concrete attack path is.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
EXP-4337-003 (High) — The 'from' field of an EOA transaction request is supplied by the caller and passed to the wallet as the signing account without being compared to the connected account's address. Most wallets reject a mismatch, so exploitability depends on the wallet in use.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
EXP-4337-002 (High) — Transaction transports do not validate the request's chainId against the connected wallet's chain, and an undefined chain silently falls back to Sepolia rather than failing — a correctness and mis-signing risk across chains.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
EXP-INPUT-005 (Medium) — ENS name validators accept inputs that ENS normalization later rejects or transforms — homoglyphs, bidirectional-control and other control characters, and a single leading or trailing dot — causing homograph-style display confusion in the UI rather than incorrect resolution.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
EXP-INPUT-009 (Low) — The push service worker opens a URL taken from notification data without validating its scheme or origin. Requires control of, or injection into, the notification payload.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
EXP-INPUT-008 (Low, privacy) — The avatar upload pipeline does not strip EXIF metadata from JPEG inputs, so metadata including GPS coordinates can be published with a user's avatar. The MIME check relies on the browser-reported type.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
EXP-INPUT-003 (Medium) — Persisted client state is JSON-parsed with only the wrapper shape validated, not the value types inside it, so locally-writable state of an unexpected type can reach code that assumes otherwise — primarily a denial of service on app or wallet-reconnect paths.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
SEC-MGR-010 (Low) — The avatar-upload EIP-712 typed-data domain omits chainId and verifyingContract. A practical cross-context replay has not been confirmed and the investigation is still open.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
SEC-MGR-008 / SEC-MGR-011 (High) — Development-only surfaces ship in production builds: the debug route group is reachable, its SIWE flow uses a hardcoded localhost domain, and the router devtools component is included. Both findings share one fix.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
SEC-MGR-003 (High) — A persisted client setting can override the backend API base URL while the auth layer attaches the Authorization bearer header to every request regardless of destination, so an attacker who can write that setting can redirect authenticated requests (and the token) to a host they control.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
R2-02 (Medium) — The Manager app serves no Content-Security-Policy or security headers (CSP, X-Frame-Options, Referrer-Policy, X-Content-Type-Options); the Explorer app already ships a full policy. Findings that depend only on the absence of CSP are covered here; an actual injection sink is a separate finding.
Last Updated At
14 August 2026
Category
Websites and Applications
Description / Link
R2-01 (Medium) — Secrets remediation incomplete: several .env/.env.ci files remain tracked in git across the Manager and Explorer apps, exposing provider keys (Rhinestone, Alchemy, analytics) and a test-only CI private key. These VITE_* values are inlined into the browser bundle and are public client identifiers rather than secrets; the concern is key hygiene and blast radius. Recovering one of these keys is not a separate finding.
Last Updated At
14 August 2026

KYC required

The submission of KYC information is a requirement for payout processing.

Participants must adhere to the Eligibility Criteria.
Additional information: KYC & Wallet OFAC SDN screening for every receiver.

Proof of Concept

Proof of concept is always required for all severities.

Responsible Publication

Category 3: Approval Required

Feasibility Limitations

The project may be receiving reports that are valid (the bug and attack vector are real) and cite assets and impacts that are in scope, but there may be obstacles or barriers to executing the attack in the real world. In other words, there is a question about how feasible the attack really is. Conversely, there may also be mitigation measures that projects can take to prevent the impact of the bug, which are not feasible or would require unconventional action and hence, should not be used as reasons for downgrading a bug's severity.

Therefore, Immunefi has developed a set of feasibility limitation standards which by default states what security researchers, as well as projects, can or cannot cite when reviewing a bug report.

30d Avg. Funds Availability
$69,987.41
Total Assets in Scope
5