CVE-2022-31170: OpenZeppelin Contracts's ERC165Checker may revert instead of returning false
OpenZeppelin Contracts is a library for smart contract development. Versions 4.0.0 until 4.7.1 are vulnerable to ERC165Checker reverting instead of returning false. ERC165Checker.supportsInterface is designed to always successfully return a boolean, and under no circumstance revert. However, an incorrect assumption about Solidity 0.8's abi.decode allows some cases to revert, given a target contract that doesn't implement EIP-165 as expected, specifically if it returns a value other than 0 or 1. The contracts that may be affected are those that use ERC165Checker to check for support for an interface and then handle the lack of support in a way other than reverting. The issue was patched in version 4.7.1.
Affected Software
Remediation
Event History
Frequently Asked Questions
What is the vulnerability ID for this issue?
The vulnerability ID for this issue is CVE-2022-31170.
What is the severity level of CVE-2022-31170?
The severity level of CVE-2022-31170 is high with a CVSS score of 7.5.
Which software versions of OpenZeppelin Contracts are affected by CVE-2022-31170?
Versions 4.0.0 until 4.7.1 of OpenZeppelin Contracts are affected by CVE-2022-31170.
What is the impact of CVE-2022-31170?
CVE-2022-31170 can allow an attacker to cause a denial of service by causing the ERC165Checker to revert instead of returning `false`.
Is there a fix or patch available for CVE-2022-31170?
Yes, a patch has been released by OpenZeppelin. It is recommended to update to a version later than 4.7.1 of OpenZeppelin Contracts.