CVE-2026-26267: stellar rs-soroban-sdk · Always-Incorrect Control Flow Implementation
Affects stellar rs-soroban-sdkSource CVE Database V5
Not known to be exploited · CVSS 7.5 High · fixed in 25.1.1 : patch stellar rs-soroban-sdk soon.
Data as of 26 Oct 2026, 07:57 UTC
- EPSS
- 0.3% chance of exploitation in 30 days – higher than 29% of CVEsExploit Prediction Scoring System: the likelihood attackers will use this flaw soon.
- Patch
- Available – fixed in 25.1.1, 23.5.2, 22.0.10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:NExploitation evidence
Disclosed: evidence found.
CVE published 19 Feb 2026
Detectable: no evidence on record.
No public nuclei template indexed
Weaponised: no evidence on record.
No public exploit code indexed in Metasploit or Exploit-DB
Exploited in the wildExploited: no evidence on record.
Not in CISA KEV and no source reports exploitation
Observed by OffSeq MirageSeen by Mirage: no evidence on record.
No attack traffic recorded by OffSeq Mirage sensors
A missing step is not evidence of safety. Sources: cve.org (opens in a new tab), the Metasploit, Exploit-DB and nuclei-templates index as of 2026-10-26.
What to do
Upgrade stellar rs-soroban-sdk to 25.1.1, 23.5.2 or 22.0.10.
Affected software
| Product | Affected | Fixed in |
|---|---|---|
| stellarrs-soroban-sdk | Affected
| Fixed in
|
AI-suggested
1. Upgrade the soroban-sdk-macros package to version 22.0.10, 23.5.2, or 25.1.1 or later, and recompile all Soroban contracts to ensure the macro generates correct trait function calls. 2. If immediate upgrading is not feasible, audit all contracts for naming conflicts between inherent functions and trait functions; rename or remove any inherent functions that share names with trait functions to prevent ambiguous resolution. 3. Implement thorough code reviews focusing on function naming and macro usage to avoid similar issues in future contract development. 4. Employ automated static analysis tools to detect conflicting function names in contract codebases. 5. Monitor deployed contracts for anomalous behavior that could indicate exploitation of this vulnerability. 6. Educate developers on the importance of understanding Rust trait vs inherent function resolution semantics, especially in macro-generated code. 7. Consider adding runtime checks or additional authorization layers outside the vulnerable macro-generated code as a defense-in-depth measure until all contracts are patched.
Description
soroban-sdk is a Rust SDK for Soroban contracts. Prior to versions 22.0.10, 23.5.2, and 25.1.1, the `#[contractimpl]` macro contains a bug in how it wires up function calls. `#[contractimpl]` generates code that uses `MyContract::value()` style calls even when it's processing the trait version. This means if an inherent function is also defined with the same name, the inherent function gets called instead of the trait function. This means the Wasm-exported entry point silently calls the wrong function when two conditions are met simultaneously: First, an `impl Trait for MyContract` block is defined with one or more functions, with `#[contractimpl]` applied. Second, an `impl MyContract` block is defined with one or more identically named functions, without `#[contractimpl]` applied. If the trait version contains important security checks, such as verifying the caller is authorized, that the inherent version does not, those checks are bypassed. Anyone interacting with the contract through its public interface will call the wrong function. The problem is patched in `soroban-sdk-macros` versions 22.0.10, 23.5.2, and 25.1.1. The fix changes the generated call from `<Type>::func()` to `<Type as Trait>::func()` when processing trait implementations, ensuring Rust resolves to the trait associated function regardless of whether an inherent function with the same name exists. Users should upgrade to `soroban-sdk-macros` 22.0.10, 23.5.2, or 25.1.1 and recompile their contracts. If upgrading is not immediately possible, contract developers can avoid the issue by ensuring that no inherent associated function on the contract type shares a name with any function in the trait implementation. Renaming or removing the conflicting inherent function eliminates the ambiguity and causes the macro-generated code to correctly resolve to the trait function.
References
- github.com/stellar/rs-soroban-sdk/security/advisories/GHSA-4chv-4c6w-w254 (opens in a new tab)
- github.com/stellar/rs-soroban-sdk/pull/1729 (opens in a new tab)
- github.com/stellar/rs-soroban-sdk/pull/1730 (opens in a new tab)
- github.com/stellar/rs-soroban-sdk/pull/1731 (opens in a new tab)
- github.com/stellar/rs-soroban-sdk/commit/e92a3933e5f92dc09da3c740cf6a360d55709a2b (opens in a new tab)