Skip to main content

dcmjs CVE-2026-46350

LOW
Improper Input Validation (CWE-20)
2026-10-27 https://github.com/dcmjs-org/dcmjs GHSA-px68-xx5g-48q5
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Supply crafted DICOM object
  2. Delivery
    dcmjs parses DS/IS field
  3. Exploit
    sanitizer regex passes '1e999999' or '-'
  4. Execution
    Number() returns Infinity/NaN
  5. Persist
    corrupted value propagates downstream
  6. Impact
    geometry/dose corruption or viewer DoS

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Input validation, allowlisting
Exploitation Conditions

Exploitation requires the host application to parse an attacker-supplied DICOM object through dcmjs < 0.52.0 whose DS (DecimalString) or IS (IntegerString) field contains scientific-notation overflow ('1e999999', '-1e999999', '1e18') or a sign-only remnant from a stripped infinity string ('-inf'/'+inf' reduced to '-'/'+'), causing Number() to yield Infinity or NaN. The limiting factor, per the maintainer, is that dcmjs enforces no trust boundary here: the corrupted NaN/Infinity only produces harm if the downstream consumer (e.g. OHIF Viewer, Cornerstone.js, a DICOMweb pipeline) fails to range-check parsed numeric values, which callers are expected to do regardless. No authentication is indicated (PR:N), but the attacker must get the malicious DICOM data into the processing path, and only versions below 0.52.0 are affected.

Impact

Signals conflict and point to a low-to-moderate real-world priority rather than an urgent one. The input carries a reporter-assigned CVSS of 7.5 HIGH (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H), but the dcmjs maintainer explicitly rates it low, arguing that malformed input only yields NaN/Infinity in values the caller must range-check anyway, that both outcomes are reachable by other means, and that no dcmjs-enforced trust boundary is crossed - so the I:H/A:H impact rating is disputed at the source. The vuln.today Decision label is 'monitor', consistent with the maintainer view and against the raw HIGH score. No EPSS score, no CISA KEV listing, and no PoC/exploit reference are present in the input (only the GHSA advisory, the patch commit, and the release tag), so there is no public exploit identified at time of analysis and no evidence of active exploitation. The AV:N/PR:N/UI:N metrics suggest trivial remote reach, but exploitation is really contingent on a downstream application failing to range-check parsed numerics - a mechanism the evidence treats as the caller's responsibility, not dcmjs's. Net: patch during normal maintenance; this reads as a high-CVSS-but-lower-real-risk data-integrity/DoS issue, not an emergency.

Exploit ScenarioDerived

An attacker delivers a crafted DICOM object - for example over DICOMweb or as an uploaded study - whose DS or IS field (e.g. PixelSpacing or NumberOfFrames) contains '1e999999', '-1e999999', or '-inf'. When a dcmjs-based viewer or pipeline parses it, the sanitizer regex passes the characters and Number() returns Infinity or NaN, which then silently propagates through spatial, display, or dose arithmetic, corrupting measurements or rendering images unreadable (denial of service). No working public exploit is identified, though the advisory documents the exact trigger inputs.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 28, 2026

Input validation bypass in dcmjs (npm package dcmjs) before 0.52.0 allows unauthenticated attackers to force Infinity or NaN into parsed DICOM DS (Decimal String) and IS (Integer String) numeric values by supplying scientific-notation overflow such as '1e999999' or a sign-only remnant produced when '-inf' is sanitized down to '-'. The corrupted numbers only cause harm where the downstream consumer - OHIF Viewer, Cornerstone.js or another DICOMweb pipeline built on dcmjs - fails to range-check parsed values, which the maintainer notes callers are expected to do regardless, so the practical severity depends on the host application rather than on dcmjs alone. Realistic outcomes are corrupted spatial geometry, windowing, rescale and dosimetry values, or frame-count overflow; no public exploit was identified at time of analysis and this CVE is not in CISA KEV, with the maintainer rating it low versus the reporter's 7.5 assessment.

RemediationAI

Vendor-released patch: dcmjs 0.52.0 (released 2026-05-19) - upgrade from any version below 0.52.0, following the release notes at https://github.com/dcmjs-org/dcmjs/releases/tag/v0.52.0; the fix commit is https://github.com/dcmjs-org/dcmjs/commit/81e7e11cdefb56aa1a65bfe259648b865583ff88 and the advisory is https://github.com/dcmjs-org/dcmjs/security/advisories/GHSA-px68-xx5g-48q5. Applications that consume dcmjs indirectly (OHIF Viewer, Cornerstone.js, DICOMweb pipelines) should pin the patched dcmjs version in their dependency tree or lockfile and verify the resolved version is 0.52.0 or later. Where updating cannot be done immediately, the maintainer's position is that consumers must range-check parsed DS/IS numeric values before use - rejecting non-finite results and enforcing PS3.5 bounds (IS within [-2^31, 2^31-1], DS within its 16-character fixed/floating-point form) - which also protects against other paths that produce NaN or Infinity; the trade-off is that this shifts validation responsibility to every downstream call site and any code path that forgets the check remains exposed.

Affected Packages

npm dcmjs fix: 0.52.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in npm

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

DICOM encodes numeric attributes as text: DS (Decimal String, PS3.5 §6.2) and IS (Integer String) carry decimal or integer values as ASCII characters rather than binary numbers. dcmjs implements these value representations in src/ValueRepresentation.js, where both the DecimalString and IntegerString classes apply the sanitizer numberStr.trim().replace(/[^0-9.\\\-+e]/gi, "") and then pass the result to JavaScript's Number() constructor. That character filter removes letters used by the literals 'NaN' and 'Infinity', but it deliberately preserves the characters needed for scientific notation, and it does not enforce any PS3.5 length or range limits. Three consequences follow: 'e' notation survives intact so Number('1e999999') yields Infinity; stripping '-inf' leaves a lone '-' or '+' which Number() converts to NaN; and IntegerString reuses the same permissive logic, accepting '1e5' and '1e18' despite PS3.5 restricting IS to the characters 0-9, + and '-' and to the range [-2^31, 2^31-1]. Because NaN and Infinity are IEEE 754 values that propagate silently through subsequent arithmetic, the defect is CWE-20 (Improper Input Validation) rather than a memory-safety issue; dcmjs enforces no trust boundary at this point, so whether the malformed value becomes a real fault is determined by the consuming viewer or pipeline.

Know when Node.js gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

vuln.today AI 6.5 MEDIUM

Remotely parseable attacker-supplied DICOM needs no auth or UI in automated pipelines, but harm is limited to NaN/Infinity the caller must range-check, so I:L/A:L and C:N rather than the reporter's I:H/A:H.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N

DescriptionCVE.org

dcmjs, a JavaScript library for DICOM manipulation used in web-based medical imaging viewers, contains an input validation bypass in its handling of DS (Decimal String) and IS (Integer String) value representations.

The DecimalString and IntegerString classes in ValueRepresentation.js use a regex sanitizer followed by JavaScript's Number() constructor. While the regex strips direct NaN/Infinity strings, it preserves scientific notation (including the 'e' character), enabling:

  1. Infinity injection via scientific notation overflow (1e999999)
  2. NaN injection via sign-only remnants from stripped inf strings ("-inf" -> "-")
  3. IS accepting scientific notation in violation of PS3.5

AFFECTED PRODUCT ==== Product: dcmjs (JavaScript DICOM manipulation library) Repository: https://github.com/dcmjs-org/dcmjs npm: https://www.npmjs.com/package/dcmjs Affected Versions: < 0.52.0 (patched in 0.52.0, released 2026-05-19) CVE: CVE-2026-46350 (assigned by GitHub 2026-05-13) CWE: CWE-20 (Improper Input Validation) CVSS Score: 7.5 (HIGH) CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H Maintainer note: The CVSS score above is the reporter's assessment; dcmjs rates this low, because malformed input produces NaN/Infinity in values the caller must range-check in any case (both are reachable by other means, and no trust boundary enforced by dcmjs is crossed).

DOWNSTREAM IMPACT ===== dcmjs is a foundational library used by:

  • OHIF Viewer (Open Health Imaging Foundation)
  • Cornerstone.js ecosystem
  • DICOMweb client/server implementations
  • Research and clinical web-based PACS viewers
  • Any Node.js or browser application parsing DICOM via dcmjs

ROOT CAUSE == In src/ValueRepresentation.js, both DecimalString and IntegerString use:

let returnVal = numberStr.trim().replace(/[^0-9.\\\-+e]/gi, ""); return returnVal === "" ? null : Number(returnVal);

The regex /[^0-9.\\\-+e]/gi strips characters NOT in the set {0-9, ., \, -, +, e, E}. This provides partial defense: direct "NaN" and "Infinity" strings are stripped to empty/null. However:

(a) Scientific notation is fully preserved because 'e', digits, '+', '-', '.' all pass the regex. "1e999999" passes intact, and Number("1e999999") returns JavaScript Infinity.

(b) The string "-inf" is stripped to just "-" (only the minus passes the regex). Number("-") returns JavaScript NaN.

(c) IntegerString uses the SAME regex/logic as DecimalString, meaning IS accepts scientific notation ("1e5" -> 100000) in violation of PS3.5 Section 6.2, which restricts IS to characters 0-9, +, -.

(d) No range validation exists for IS values (PS3.5 requires [-2^31, 2^31-1]) or DS values (16-character max, fixed/floating-point only).

VULNERABILITY DETAILS =====

Attack Vector 1: Infinity via Scientific Notation Overflow ---------------------------------------------------------- Input: DS or IS field containing "1e999999" Regex: Passes (all chars in allowed set) Result: Number("1e999999") -> Infinity Impact: Infinity propagates through all downstream arithmetic

Attack Vector 2: Negative Infinity via Scientific Notation ---------------------------------------------------------- Input: DS or IS field containing "-1e999999" Regex: Passes Result: Number("-1e999999") -> -Infinity Impact: Negative Infinity in spatial/dosimetric calculations

Attack Vector 3: NaN via Sign-Only Remnant ------------------------------------------ Input: DS or IS field containing "-inf" Regex: Strips to "-" Result: Number("-") -> NaN Impact: NaN propagates silently through arithmetic (IEEE 754)

Attack Vector 4: NaN via Plus-Only Remnant ------------------------------------------ Input: DS or IS field containing "+inf" Regex: Strips to "+" Result: Number("+") -> NaN Impact: Same as above

Attack Vector 5: IS Scientific Notation Bypass ----------------------------------------------- Input: IS field containing "1e5" Regex: Passes Result: Number("1e5") -> 100000 Impact: Integer fields accept non-integer representation, violating PS3.5

Attack Vector 6: IS Extreme Overflow ------------------------------------- Input: IS field containing "1e18" Regex: Passes Result: Number("1e18") -> 1000000000000000000 Impact: Far exceeds IS range [-2^31, 2^31-1], no bounds check

CLINICAL IMPACT === dcmjs is used in web-based DICOM viewers and processing pipelines. Corrupted values affect:

  • PixelSpacing / ImagePositionPatient: Spatial geometry corruption prevents

accurate measurement and registration in web viewers

  • WindowCenter / WindowWidth: Display pipeline corruption makes images

unreadable (all black or all white)

  • DoseGridScaling / NumberOfFrames: Radiation therapy dose display errors

and denial of service via frame count overflow

  • RescaleSlope / RescaleIntercept: Hounsfield unit conversion produces

invalid values, corrupting quantitative analysis

  • SliceThickness: Volume reconstruction fails in multiplanar reformats

Threat Intelligence Overview

Prevalence
Low
industry-specific medical-imaging library, though foundational within that niche
Threat Intel
1
1 source
Data Quality
2 sources
Confidence: Low
CVE.org GHSA GitHub

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity LOW
CISA KEV No
Public POC No
EPSS N/A
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

Affected Products (CPE)CVE.org

pkg:npm/dcmjs
CVE-2025-68613 HIGH POC
8.8 Dec 19

Remote code execution in n8n's workflow expression evaluation system allows an authenticated user with workflow creation

CVE-2024-41713 CRITICAL POC
9.1 Oct 21

A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could

CVE-2024-55591 CRITICAL POC
9.8 Jan 14

FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote

CVE-2023-44487 HIGH POC
7.5 Oct 10

Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour

CVE-2014-7205 CRITICAL POC
10.0 Oct 08

Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t

CVE-2025-59528 CRITICAL POC
10.0 Sep 22

Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete

CVE-2017-14849 HIGH POC
7.5 Sep 28

Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc

CVE-2017-5941 CRITICAL POC
9.8 Feb 09

An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner

CVE-2014-0224 HIGH POC
7.4 Jun 05

OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph

CVE-2014-3744 HIGH POC
7.5 Oct 23

Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi

CVE-2014-9566 HIGH POC
7.5 Mar 10

Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin

CVE-2013-4660 MEDIUM POC
6.8 Jun 28

The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy