Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/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
Remote unauthenticated C-STORE to a listening SCP gives AV:N/AC:L/PR:N/UI:N; arbitrary file write yields I:H and A:H with no direct disclosure (C:N).
Primary rating from Vendor (icscert).
CVSS VectorVendor: icscert
Lifecycle Timeline
1DescriptionCVE.org
The qrscp application's C-STORE handler uses a specific instance from attacker-supplied DICOM datasets directly in os.path.join() without sanitization, allowing file writes to arbitrary paths.
AnalysisAI
Arbitrary file write in the pynetdicom library's qrscp storage SCP application allows a remote, unauthenticated attacker to plant files at attacker-chosen paths on the receiving host. The qrscp C-STORE handler trusts a value taken from an incoming DICOM dataset and passes it into os.path.join() without sanitization, so a crafted instance identifier containing path-traversal sequences escapes the intended storage directory. No public exploit has been identified at time of analysis, but the CVSS 4.0 base score of 8.8 and unauthenticated network reachability make this a high-priority issue for any exposed DICOM endpoint.
Technical ContextAI
pynetdicom is a pure-Python implementation of the DICOM upper-layer networking protocol, widely used to build DICOM Storage SCP/SCU services and PACS-adjacent tooling in medical imaging. Its bundled qrscp Query/Retrieve application acts as a Storage SCP: when it receives a C-STORE request, it persists the incoming SOP Instance to disk using a filename derived from the dataset. The root cause is CWE-22 (Improper Limitation of a Pathname to a Restricted Directory / Path Traversal): a specific attacker-controlled instance attribute (e.g. the SOP Instance UID) is concatenated into a destination path via os.path.join() with no validation. Because os.path.join() resolves an absolute or '../'-laden second argument relative to (or in place of) the base directory, the attacker controls where the file lands. The affected component per CPE is cpe:2.3:a:pydicom:pynetdicom_library, reported by ICS-CERT under advisory ICSMA-26-176-01, reflecting its use in medical/OT environments.
RemediationAI
Upstream fix status is not independently confirmed from the provided data - no exact patched version is given in the references - so monitor the pydicom/pynetdicom repository (https://github.com/pydicom/pynetdicom) and the CISA advisory ICSMA-26-176-01 (https://www.cisa.gov/news-events/ics-medical-advisories/icsma-26-176-01) for the official fixed release and upgrade to it once published. As compensating controls until then: restrict which Application Entity titles and source IPs may connect to the qrscp SCP via network ACLs and DICOM AE allow-listing so only trusted modalities can issue C-STORE (trade-off: must maintain the modality inventory); place the storage service on a segmented imaging VLAN with no direct internet exposure; and if you maintain the deployment, run qrscp under a low-privilege account with a dedicated, restricted storage directory and a restrictive umask so an escaped write cannot reach sensitive system paths (trade-off: does not stop the traversal, only limits blast radius). If feasible, validate or hash incoming SOP Instance UIDs before using them as filenames rather than passing raw dataset values to os.path.join().
Same weakness CWE-22 – Path Traversal
View allSame technique Path Traversal
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-39562
GHSA-f3pc-ww42-cwqp