
$ENS Token Allocation (Claiming Opens Nov 8)
Since we announced that ENS would be launching a DAO and $ENS token to govern key components of the ENS protocol, we’ve had a lot of inquiries as to how the DAO will be structured and what the token airdrop to community members will look like. Here’s an overview of what we have planned.ENS Token and DAO OverviewThe core components of ENS are decentralized and self-running (e.g., no one can take away another person’s .ETH name), but there are a few things that require some human discretion. Du...

$ENS Now Available for Claiming
We’re pleased to announce the launch of $ENS, the governance token of ENS. Here’s what you need to know.ENS Token & Claim SiteThe claim site is now open: claim.ens.domains. The ENS token contract is token.ensdao.eth: 0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72 Double check the website URL and contract address to avoid scams. Users have until May 4th, 2022 to claim their tokens, after which any remaining tokens will be sent to the DAO treasury. The snapshot for all allocations - airdrop, contri...

A Deep Dive into the ENS Name Wrapper
Table of ContentsIntroductionThe ENS Name WrapperExample - Step By StepExample - Parent Locks Subname All-In-OneExample - Multiple Subnames in Various StatesName Wrapper FusesName Wrapper ExpiryApproved OperatorsDNS Domains and FusesUse-Cases1.) I want to give subnames out to all of my DAO members / NFT holders!2.) I want to sell / rent out subnames!3.) Other cool things you can doIssue subdomains as tickets to an eventLock the resolved records for a nameRecapOther LinksIntroductionBefore we ...

$ENS Token Allocation (Claiming Opens Nov 8)
Since we announced that ENS would be launching a DAO and $ENS token to govern key components of the ENS protocol, we’ve had a lot of inquiries as to how the DAO will be structured and what the token airdrop to community members will look like. Here’s an overview of what we have planned.ENS Token and DAO OverviewThe core components of ENS are decentralized and self-running (e.g., no one can take away another person’s .ETH name), but there are a few things that require some human discretion. Du...

$ENS Now Available for Claiming
We’re pleased to announce the launch of $ENS, the governance token of ENS. Here’s what you need to know.ENS Token & Claim SiteThe claim site is now open: claim.ens.domains. The ENS token contract is token.ensdao.eth: 0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72 Double check the website URL and contract address to avoid scams. Users have until May 4th, 2022 to claim their tokens, after which any remaining tokens will be sent to the DAO treasury. The snapshot for all allocations - airdrop, contri...

A Deep Dive into the ENS Name Wrapper
Table of ContentsIntroductionThe ENS Name WrapperExample - Step By StepExample - Parent Locks Subname All-In-OneExample - Multiple Subnames in Various StatesName Wrapper FusesName Wrapper ExpiryApproved OperatorsDNS Domains and FusesUse-Cases1.) I want to give subnames out to all of my DAO members / NFT holders!2.) I want to sell / rent out subnames!3.) Other cool things you can doIssue subdomains as tickets to an eventLock the resolved records for a nameRecapOther LinksIntroductionBefore we ...

Subscribe to ENS

Subscribe to ENS
Share Dialog
Share Dialog
>900 subscribers
>900 subscribers
In April 2022, we were informed of a vulnerability in our subgraph implementation by community contributor lcfr. Due to the way null characters are handled by The Graph and its PostgreSQL backend, it was possible to create lookalike domains that couldn’t be distinguished from the names they imitated using only data from our subgraph.
We implemented and deployed mitigations for this in both the subgraph and the metadata API, paid lcfr a bounty, and closed the issue. However, in December 2022, the issue reocurred. The below is a postmortem describing the process issues that led to its reappearance, and describing how we will improve our process going forward to prevent this kind of reversion happening in future. We’re posting it as part of our commitment to transparency and process improvement. We’ve also awarded lcfr a further bounty of $20k for finding the reversion.
Reported date: 05.04.2022 / 10.01.2023
When an attacker creates a domain with null byte character added in front or back of the name, due to a known issue in The Graph, the attacker is able to impersonate any domain which is already registered by someone else. The issue, first reported around April 2022, we as ENSLabs took an immediate action to prevent it from happening. 9 months later the issue re-appeared.
PostgreSQL does not store null characters in text columns. The Graph uses PostgreSQL, meaning that any text data saved in a subgraph would never include null characters.
After hotfixes, we haven’t followed up with persistent actions (as I know of) and the hotfix was never pushed into a repository. There was only a hot-fix shipment during the event, to prevent the issue happening till the permanent solution to be put in place. Later, during some other feature changes and refactors, patch was removed unintentionally on the metadata-service side.
The subgraph fix was never tested, and therefore was never confirmed as working. It assumed that the input label was already void of any null characters. However, event data in graph-node is stored as raw bytes in PostgreSQL. This meant that the label used for generating the comparison labelhash was yet to be stored in PostgreSQL, therefore still had null characters.
In the first incident, as an immediate solution to the given problem we decided to make a hotfix on both metadata-service and our subgraph repositories (as I know). The solution was simply double checking if queried labelhash matches with the one provided by the subgraph.
In the second incident, we will be re-applying the same patches compatible with the current feature set in the metadata-service, will have necessary tests and descriptions, comments alongside the code. https://github.com/ensdomains/ens-metadata-service/pull/142
The fix for the subgraph is a different implementation, each label will be manually checked for null characters and disallowed if the label contains any. Alongside this, a unit test will be added to prevent regression.
Reporting and following persistent fix from the TheGraph side? Having a procedure for both temporary and permanent solutions?
Semi - automated deployment for metadata-service, all the code merged into master branch will trigger –no-traffic deployment then we will split the traffic later.
There are 14 incidents found, some were taken down by marketplaces after our fixes, the others taken down after we gather the full list.
After an immediate action, be sure persistent solutions are discussed and applied. Even though the hotfixes are temporary, provide necessary testing as soon as possible. Put clear description and comments alongside the hotfixes.
In April 2022, we were informed of a vulnerability in our subgraph implementation by community contributor lcfr. Due to the way null characters are handled by The Graph and its PostgreSQL backend, it was possible to create lookalike domains that couldn’t be distinguished from the names they imitated using only data from our subgraph.
We implemented and deployed mitigations for this in both the subgraph and the metadata API, paid lcfr a bounty, and closed the issue. However, in December 2022, the issue reocurred. The below is a postmortem describing the process issues that led to its reappearance, and describing how we will improve our process going forward to prevent this kind of reversion happening in future. We’re posting it as part of our commitment to transparency and process improvement. We’ve also awarded lcfr a further bounty of $20k for finding the reversion.
Reported date: 05.04.2022 / 10.01.2023
When an attacker creates a domain with null byte character added in front or back of the name, due to a known issue in The Graph, the attacker is able to impersonate any domain which is already registered by someone else. The issue, first reported around April 2022, we as ENSLabs took an immediate action to prevent it from happening. 9 months later the issue re-appeared.
PostgreSQL does not store null characters in text columns. The Graph uses PostgreSQL, meaning that any text data saved in a subgraph would never include null characters.
After hotfixes, we haven’t followed up with persistent actions (as I know of) and the hotfix was never pushed into a repository. There was only a hot-fix shipment during the event, to prevent the issue happening till the permanent solution to be put in place. Later, during some other feature changes and refactors, patch was removed unintentionally on the metadata-service side.
The subgraph fix was never tested, and therefore was never confirmed as working. It assumed that the input label was already void of any null characters. However, event data in graph-node is stored as raw bytes in PostgreSQL. This meant that the label used for generating the comparison labelhash was yet to be stored in PostgreSQL, therefore still had null characters.
In the first incident, as an immediate solution to the given problem we decided to make a hotfix on both metadata-service and our subgraph repositories (as I know). The solution was simply double checking if queried labelhash matches with the one provided by the subgraph.
In the second incident, we will be re-applying the same patches compatible with the current feature set in the metadata-service, will have necessary tests and descriptions, comments alongside the code. https://github.com/ensdomains/ens-metadata-service/pull/142
The fix for the subgraph is a different implementation, each label will be manually checked for null characters and disallowed if the label contains any. Alongside this, a unit test will be added to prevent regression.
Reporting and following persistent fix from the TheGraph side? Having a procedure for both temporary and permanent solutions?
Semi - automated deployment for metadata-service, all the code merged into master branch will trigger –no-traffic deployment then we will split the traffic later.
There are 14 incidents found, some were taken down by marketplaces after our fixes, the others taken down after we gather the full list.
After an immediate action, be sure persistent solutions are discussed and applied. Even though the hotfixes are temporary, provide necessary testing as soon as possible. Put clear description and comments alongside the hotfixes.
No activity yet