- Reported
-
- Issued
-
- Package
-
anchor-lang
(crates.io)
- Type
-
Vulnerability
- Keywords
-
#solana
#anchor
#account-validation
#system-program
- Aliases
-
- References
-
- CVSS Score
- 8.2
HIGH
- CVSS Details
-
- Attack Vector
- Network
- Attack Complexity
- Low
- Privileges Required
- None
- User Interaction
- None
- Scope
- Unchanged
- Confidentiality Impact
- Low
- Integrity Impact
- High
- Availability Impact
- None
- CVSS Vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:N
- Patched
-
- Unaffected
-
Description
Affected versions of anchor-lang did not properly validate accounts declared
as Program<'info, System>. The generic Program<T> validation path used
Pubkey::default() as a sentinel to decide whether any executable program
should be accepted. Since the system program id is also the default pubkey,
Program<'info, System> was treated like the untyped Program<'info> case and
accepted any executable program account.
Programs commonly rely on Program<'info, System> to ensure that CPI calls and
instruction builders target the real Solana system program. With the faulty
validation, an attacker could supply another executable program where the system
program was expected, causing downstream logic to make false assumptions about
payments, account creation, or other system-program CPIs.
The issue was fixed in anchor-lang 1.0.2 by separating the typed
Program<T> validation path from the untyped Program<()> path, so
Program<'info, System> now checks the provided account key against the system
program id. Users should upgrade to anchor-lang 1.0.2 or later.
Advisory available under CC-BY-4.0
license.
Source: https://github.com/otter-sec/anchor/security/advisories/GHSA-c6rc-8jpp-2fgc