CVE-2023-6245

Infinite decoding loop through specially crafted payload

State
Published
Severity
7.5 High
Published
Dec 8, 2023
Updated
Dec 2, 2024
Reserved
Nov 21, 2023

Read the record on cve.org

Description

The Candid library causes a Denial of Service while parsing a specially crafted payload with 'empty' data type. For example, if the payload is `record { * ; empty }` and the canister interface expects `record { * }` then the Rust candid decoder treats empty as an extra field required by the type. The problem with the type empty is that the candid Rust library wrongly categorizes empty as a recoverable error when skipping the field and thus causing an infinite decoding loop.

Canisters using affected versions of candid are exposed to denial of service by causing the decoding to run indefinitely until the canister traps due to reaching maximum instruction limit per execution round. Repeated exposure to the payload will result in degraded performance of the canister. Note: Canisters written in Motoko are unaffected.

Scores

CVSSScoreVectorSource
3.17.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:HDfinity

Weaknesses

  • CWE-835 Loop with Unreachable Exit Condition ('Infinite Loop')
  • CWE-1288 Improper Validation of Consistency within Input
  • CWE-168 Improper Handling of Inconsistent Special Elements
  • CWE-20 Improper Input Validation

Affected Products

ProductVersions
CandidInternet Computer
  • 0.9.0 to before 0.9.10Affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.