CVE-2026-81638 json
Non-canonical ULID spellings are accepted and alias to the same record in ash_double_entry
published 2mo ago modified 2mo ago also EEF-CVE-2026-81638 , EUVD-2026-72541 , GHSA-qxp2-vgp9-268q
- cvss
- 2.1
- version 4.0, CNA
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- 0.2%
- EPSS 0.2% chance of exploitation in 30 days, percentile 8%
- public exploits
- 0
- none known
Summary
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.
Patch / fix
- hex ash_double_entry 1.0.19
- ash-project ash_double_entry 1.0.19
Is CVE-2026-81638 in your dependencies? Fencer shows which of your repositories are affected as soon as an advisory lands, and opens the fix as a pull request.
Check with FencerCISA SSVC
- Exploitation
- none
- Automatable
- no
- Technical impact
- partial
- Assessed
- 2mo ago
Exploit prediction
0.19% chance of exploitation in the next 30 days, higher than 8% of all scored CVEs (FIRST EPSS, 2026-11-11).
CVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| CNA | 4.0 | 2.1 | 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 |
| CNA | 4.0 | 2.1 | 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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X |
Affected packages
| ecosystem | package | affected | fixed in |
|---|---|---|---|
| hex | ash_double_entry | >=0.1.0, <1.0.19 |
1.0.19 |
Affected products
- ash-project ash_double_entry
Classification
- Weakness
-
- CWE-173 Improper Handling of Alternate Encoding
References
-
github.com
/ash-project/ash_double_entry/commit/d3e688d300a581ae214b3ca7d95ef4de63fbb050
patch
-
github.com
/ash-project/ash_double_entry/security/advisories/GHSA-qxp2-vgp9-268q
vendor-advisory, related, advisory
-
cna.erlef.org
/cves/CVE-2026-81638.html
related, web
-
osv.dev
/vulnerability/EEF-CVE-2026-81638
related
-
hex.pm
/packages/ash_double_entry
package
Sources
- CVE List CVE-2026-81638
- NVD CVE-2026-81638
- OSV EEF-CVE-2026-81638
- Maintainer advisory GHSA-qxp2-vgp9-268q
Fencer Intel keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.
The maintainers of ash-project/ash_double_entry published their own advisory on GitHub. Reviewed sources take precedence over it.
CPEs and fixed versions use Anchore's correction of NVD's data: Added CPE configurations because not yet analyzed by NVD.