Summary
ibc-go: Potential Reentrancy using Timeout Callbacks in ibc-hooks
Name: ASA-2024-007: Potential Reentrancy using Timeout Callbacks in ibc-hooks
Component: ibc-go
Criticality: Critical (ACMv1: I:Critical; L:AlmostCertain)
Affected versions: < v4.6.0, < v5.4.0, < v6.3.0, < v7.4.0, < v8.2.0
Affected users: Chain Builders + Maintainers
Through the deployment and subsequent use of a malicious CosmWasm contract via IBC interactions, an attacker could potentially execute the same MsgTimeout inside the IBC hook for the OnTimeout callback before the packet commitment is deleted. On chains where ibc-hooks wraps ICS-20, this vulnerability may allow for the logic of the OnTimeout callback of the transfer application to be recursively executed, leading to a condition that may present the opportunity for the loss of funds from the escrow account or unexpected minting of tokens.
Affected Configurations
Chains which satisfy all of the following requirements are considered to be impacted by this vulnerability:
- Chain is IBC-enabled and uses a vulnerable version of ibc-go
- Chain is CosmWasm-enabled and allows code uploads for wasm contracts by anyone, or by authorized parties (to a lesser extent)
- Chain utilizes the ibc-hooks middleware and wraps ICS-20 transfer application
Next Steps for Impacted Chain Builders and Maintainers
It is advised to immediately upgrade to the latest patch fix version of ibc-go for your chain. If you have already applied a soft-patch through private coordination, we recommend additionally updating to the latest ibc-go version via normal software upgrade governance.
If you have not upgraded your chain yet, and you desire to mitigate exposure to this vulnerability in the meantime, it is advisable to limit code uploading for contracts to trusted parties on your chain.
If your chain only allows permissioned, access-controlled contract uploads, it is still strongly recommended to update to the latest patched ibc-go version for your chain per your normal software upgrade process.
Preparing for future coordination
If your chain would like to be included in future coordination efforts, please ensure your chain has a prominently displayed or otherwise easily available up-to-date email address for technical security contact available. A security.md file in the root of your projects’ code repository should contain this information. Additionally, please test this security contact with an unaffiliated email to ensure it works as expected and can receive emails from outside of your domain.
To ensure that your chain is included in future impact assessments, please keep your chain information up to date in the Cosmos Chain Registry with code location, network name, and public RPC and API endpoints in the details.
We recommend that all chains configure and practice the use of the Circuit Breaker module in the Cosmos SDK, as future vulnerability notifications may require the use of this mechanism as a mitigation against exploitation.
Recognition
This issue was reported to the Cosmos Bug Bounty Program on HackerOne on 3/26/24 by Maxwell Dulin (Strikeout) at Asymmetric Research. If you believe you have found a bug in the Interchain Stack or would like to contribute to the program by reporting a bug, please see https://hackerone.com/cosmos.
Notes
Due to the critical nature of this issue, both the ibc-go team and Amulet independently performed impact assessments for the ecosystem, which informed a risk-driven private patching effort that preceded this public release. This private patching effort significantly reduced the exposure of the ecosystem to this vulnerability. We appreciate the diligence and professionalism of all chains and validators involved with this effort, your ability to move quickly while maintaining confidentiality was instrumental in protecting the wider Interchain Ecosystem.
If you ever have questions about security coordination efforts, public or private, please reach out to our official communication channel at [email protected].
For more information about ibc-go, please see https://ibc.cosmos.network/main.
For more information about the Interchain Foundation’s engagement with Amulet, please see https://github.com/interchainio/security.
Impact
GHSA-J496-CRGH-34MX has a CVSS score of 9.1 (Critical). The vector is network-reachable, no privileges required, and no user interaction. A CVSS score reflects the worst-case severity of the vulnerability, not your specific exposure. Whether this affects your application depends on whether the vulnerable code is present and reachable in your environment. A fixed version is available (4.6.0, 5.4.0, 6.3.0, 7.4.0, 8.2.0); upgrading removes the vulnerable code path.
Affected versions
Security releases
Kodem intelligence
Severity tells you how bad this could be in the worst case. It does not tell you whether you are exposed. Exploitability and impact are functions of runtime truth: whether the vulnerable code is present, reachable, and actually executes in your application. A vulnerable package can sit in your dependency tree and never run.
Kodem, an Intelligent Application Security platform, uses runtime intelligence to reveal which vulnerabilities actually execute in production, so teams prioritize the ones that genuinely matter. Kodem's runtime-powered SCA identifies whether this CVE is reachable in your applications.
Already deployed Kodem?
See it in your environmentNew to Kodem? Get a demo →Remediation advice
github.com/cosmos/ibc-go/v4 to 4.6.0 or later; github.com/cosmos/ibc-go/v5 to 5.4.0 or later; github.com/cosmos/ibc-go/v6 to 6.3.0 or later; github.com/cosmos/ibc-go/v7 to 7.4.0 or later; github.com/cosmos/ibc-go/v8 to 8.2.0 or later
Kodem Kai can prioritize this vulnerability in your dependency tree and generate a fix recommendation.
Frequently Asked Questions
- What is GHSA-J496-CRGH-34MX? GHSA-J496-CRGH-34MX is a critical-severity security vulnerability in github.com/cosmos/ibc-go/v4 (go), affecting versions < 4.6.0. It is fixed in 4.6.0, 5.4.0, 6.3.0, 7.4.0, 8.2.0.
- How severe is GHSA-J496-CRGH-34MX? GHSA-J496-CRGH-34MX has a CVSS score of 9.1 (Critical). This score reflects the worst-case severity of the vulnerability, not your specific exposure. Whether it represents real risk in your environment depends on whether the vulnerable code is present and reachable.
- Which packages are affected by GHSA-J496-CRGH-34MX?
github.com/cosmos/ibc-go/v4(go) (versions < 4.6.0)github.com/cosmos/ibc-go/v5(go) (versions < 5.4.0)github.com/cosmos/ibc-go/v6(go) (versions < 6.3.0)github.com/cosmos/ibc-go/v7(go) (versions < 7.4.0)github.com/cosmos/ibc-go/v8(go) (versions < 8.2.0)github.com/cosmos/ibc-go/v3(go) (versions < 4.6.0)github.com/cosmos/ibc-go/v2(go) (versions < 4.6.0)github.com/cosmos/ibc-go(go) (versions < 4.6.0)
- Is there a fix for GHSA-J496-CRGH-34MX? Yes. GHSA-J496-CRGH-34MX is fixed in 4.6.0, 5.4.0, 6.3.0, 7.4.0, 8.2.0. Upgrade to this version or later.
- Is GHSA-J496-CRGH-34MX exploitable, and should I be worried? Whether GHSA-J496-CRGH-34MX is exploitable in your environment depends on whether the vulnerable code is present and reachable. A CVSS score is a worst-case rating; it does not account for your specific deployment, configuration, or usage patterns. Kodem, an Intelligent Application Security platform, uses runtime intelligence to show which vulnerabilities actually execute in production, so you can focus on the ones that represent real risk. Get a demo
- What actually determines whether GHSA-J496-CRGH-34MX is exploitable, and how bad it is? Exploitability and impact are not fixed properties of a CVE. They depend on runtime truth: whether the vulnerable code is present, reachable, and actually executes in your application. A high CVSS score on a dependency that never runs is not the same as real risk. Kodem, an Intelligent Application Security platform, uses runtime intelligence to reveal which vulnerabilities actually execute in production, so teams prioritize the ones that genuinely matter.
- How do I fix GHSA-J496-CRGH-34MX?
- Upgrade
github.com/cosmos/ibc-go/v4to 4.6.0 or later - Upgrade
github.com/cosmos/ibc-go/v5to 5.4.0 or later - Upgrade
github.com/cosmos/ibc-go/v6to 6.3.0 or later - Upgrade
github.com/cosmos/ibc-go/v7to 7.4.0 or later - Upgrade
github.com/cosmos/ibc-go/v8to 8.2.0 or later
- Upgrade