CVE-2026-81638

Non-canonical ULID spellings are accepted and alias to the same record in ash_double_entry

State
Published
Severity
2.1 Low
Published
Sep 7, 2026
Updated
Sep 8, 2026
Reserved
Sep 7, 2026

Read the record on cve.org

Description

Improper Handling of Alternate Encoding vulnerability in ash-project ash_double_entry allows an attacker to submit several distinct string spellings of the same identifier.

AshDoubleEntry.ULID renders a 128-bit ULID as 26 Crockford base-32 characters, but the first character encodes only 3 bits, so canonical values are 0 to 7. decode/1 in lib/ulid.ex masks the first character to its low 3 bits and valid?/1 accepts all 32 characters in that position, so 0..., 8..., G... and R... decode to the identical 16-byte value and resolve to the same row. When the type is exposed as a public ID over an HTTP or API boundary, an attacker-supplied ID can be spelled differently from the record it actually reads or writes, desynchronizing or bypassing string-level checks such as idempotency and deduplication keys, deny-lists, audit correlation, or signatures computed over the submitted ID.

This issue affects ash_double_entry: from 0.1.0 before 1.0.19.

Scores

CVSSScoreVectorSource
4.02.1 LowCVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:L/SA:NEEF

Weaknesses

  • CWE-173 Improper Handling of Alternate Encoding

Affected Products

ProductVersions
ash_double_entryash-project
  • 0.1.0 to before 1.0.19Affected
ash_double_entryash-project
  • 1e5f7ce8ff25f519c904731a29eb1258324e561a to before d3e688d300a581ae214b3ca7d95ef4de63fbb050Affected

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.