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.
Published: 2026-09-07
Score: 2.1 Low
EPSS: n/a
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

AshDoubleEntry exposes a ULID decoder that treats several different first characters as equivalent, allowing an attacker to represent the same underlying record with multiple distinct identifier strings. This indirect identifier collision can cause the system to read or modify the wrong row, bypass deduplication or idempotency checks, and defeat audit correlation or signature verification performed on the submitted identifier. The weakness stems from improper handling of alternate encoding, classified under CWE‑173.

Affected Systems

The affected product is ash-project's ash_double_entry, versions before 1.0.19 (starting from 0.1.0). These versions allow the alternate ULID spellings and are deployed via the ash-project framework.

Risk and Exploitability

The CVSS score is 2.1, indicating low severity, and the EPSS score is not available, providing no direct exploitation probability data. It is not listed in the CISA KEV catalog. The likely attack vector is remote via an HTTP or API endpoint that accepts public identifiers; an attacker can supply an alternate spelling to target an arbitrary record. The lack of cryptographic protections on the identifier and missing validation of its canonical form make the vulnerability exploitable without privileged access, but the impact is limited to data integrity and authorization bypass rather than full remote code execution.

Generated by OpenCVE AI on September 7, 2026 at 23:21 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Apply the latest patch to ash_double_entry (move to version 1.0.19 or later).
  • Validate incoming identifiers against their canonical representation to ensure only the proper ULID format is accepted.
  • Enforce strict checks on public identifier usage, such as cryptographic hashing or signed tokens, to prevent accidental aliasing.

Generated by OpenCVE AI on September 7, 2026 at 23:21 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Mon, 07 Sep 2026 22:45:00 +0000

Type Values Removed Values Added
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.
Title Non-canonical ULID spellings are accepted and alias to the same record in ash_double_entry
First Time appeared Ash-project
Ash-project ash Double Entry
Weaknesses CWE-173
CPEs cpe:2.3:a:ash-project:ash_double_entry:*:*:*:*:*:*:*:*
Vendors & Products Ash-project
Ash-project ash Double Entry
References
Metrics cvssV4_0

{'score': 2.1, 'vector': 'CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:L/SA:N'}


Subscriptions

Ash-project Ash Double Entry
cve-icon MITRE

Status: PUBLISHED

Assigner: EEF

Published:

Updated: 2026-09-07T22:33:29.297Z

Reserved: 2026-09-07T19:30:01.624Z

Link: CVE-2026-81638

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-09-07T23:16:51.757

Modified: 2026-09-07T23:16:51.757

Link: CVE-2026-81638

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-07T23:30:17Z

Weaknesses
  • CWE-173

    Improper Handling of Alternate Encoding