Loading...
Skip to main content

CVE-2024-36400 — Vulnerability in nano-id — CVE Details

CRITICAL

Unable to generate the correct character set

Published June 4, 2024Updated September 10, 2026Source: osv

Summary

# Reduced entropy due to inadequate character set usage ## Description Affected versions of the nano-id crate incorrectly generated IDs using a reduced character set in the `nano_id::base62` and `nano_id::base58` functions. Specifically, the `base62` function used a character set of 32 symbols instead of the intended 62 symbols, and the `base58` function used a character set of 16 symbols instead of the intended 58 symbols. Additionally, the `nano_id::gen` macro is also affected when a custom character set that is not a power of 2 in size is specified. It should be noted that `nano_id::base64` is not affected by this vulnerability. ## Impact This can result in a significant reduction in entropy, making the generated IDs predictable and vulnerable to brute-force attacks when the IDs are used in security-sensitive contexts such as session tokens or unique identifiers. ## Patches The flaws were corrected in commit [a9022772b2f1ce38929b5b81eccc670ac9d3ab23](https://github.com/viz-rs/nano-id/commit/a9022772b2f1ce38929b5b81eccc670ac9d3ab23) by updating the the `nano_id::gen` macro to use all specified characters correctly. ## PoC ```rust use std::collections::BTreeSet; fn main() { test_base58(); test_base62(); } fn test_base58() { let mut produced_symbols = BTreeSet::new(); for _ in 0..100_000 { let id = nano_id::base58::<10>(); for c in id.chars() { produced_symbols.insert(c); } } println!( "{} symbols generated from nano_id::base58", produced_symbols.len() ); } fn test_base62() { let mut produced_symbols = BTreeSet::new(); for _ in 0..100_000 { let id = nano_id::base62::<10>(); for c in id.chars() { produced_symbols.insert(c); } } println!( "{} symbols generated from nano_id::base62", produced_symbols.len() ); } ```

Advisory Timeline

  • First published June 4, 2024 (860 days ago).
  • Last revised September 10, 2026 — 827 days after initial publication.

Remediation

Upgrade to the fixed version using your package manager.

Cargo
Update nano-id to 0.4.0 or later
cargo update -p nano-id --precise 0.4.0

After upgrading, run your dependency scanner again to confirm the vulnerability is resolved.

Affected Packages (1)

Affects 1 ecosystem: crates.io (1).

PackageEcosystemAffectedFixed In
nano-id
crates.io
All versions0.4.0

Vulnerability Classification

Common Weakness Enumeration (CWE) identifiers for this vulnerability type.

CVSS Score Breakdown

What the CVSS (Common Vulnerability Scoring System) 9.4 score means for each attack dimension.

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
Low

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L

Frequently Asked Questions

What is CVE-2024-36400?
Unable to generate the correct character set This vulnerability has been assigned a severity rating of CRITICAL (CVSS score: 9.4/10).
How do I check if my project is affected by CVE-2024-36400?
CVE-2024-36400 affects nano-id. Use GeekWala's free vulnerability scanner to check your dependencies against CVE-2024-36400 and 200,000+ other known vulnerabilities.

Severity & Exploitability

CVSS Score
9.4

Exploitation is straightforward and causes maximum impact. Patch immediately.

Also Known As

GHSA-9hc7-6w9r-wj94
GHSA-2hfw-w739-p7x5
RUSTSEC-2024-0343

Related CVEs

Check if you're affected

Scan your dependencies to see if this vulnerability affects your projects.

Scan Your Dependencies