CISA ICSMA-26-176-01: pynetdicom Path Traversal Enables Arbitrary File Write

CISA published ICS Medical Advisory ICSMA-26-176-01 on June 25, 2026, warning that pydicom’s pynetdicom library versions 1.0.0 through before 3.0.4 contain a path traversal flaw that can let an unauthenticated attacker write files to arbitrary locations. That is a deceptively plain sentence for a bug sitting inside the plumbing of medical imaging. The advisory is not about ransomware, zero-days in Windows, or a flashy exploit chain; it is about what happens when trusted healthcare software accepts a file name from the network and gives it too much authority. For hospitals, imaging vendors, and the IT teams who inherit both, this is exactly the sort of vulnerability that turns “just a Python dependency” into operational risk.

Cybersecurity poster depicting an ICSMA path traversal vulnerability in a DICOM hospital IT system.A Medical Imaging Bug Lands Where Software Supply Chains Meet Patient Care​

The affected component, pynetdicom, is part of the pydicom ecosystem used for working with DICOM, the standard format and networking model behind much of modern medical imaging. If your organization handles CT scans, MRIs, ultrasounds, radiation oncology images, or other clinical imaging workflows, DICOM is probably somewhere in the stack, even if most Windows administrators never touch it directly.
That is why this advisory matters beyond Python developers. Healthcare imaging environments are full of acquisition devices, routing services, PACS archives, viewers, research tools, and glue scripts that pass DICOM objects around. A vulnerability in the library that receives or stores those objects can sit several layers below the application interface that users actually see.
CISA’s advisory describes the flaw as an improper limitation of a pathname to a restricted directory, more commonly known as path traversal. In practical terms, software intended to write a received file into a safe storage location can be tricked into writing somewhere else. The dangerous part is not novelty; path traversal is old. The dangerous part is where the bug lives and what kind of trust medical networks have historically placed in DICOM traffic.
The CVSS score, 9.1, reflects that asymmetry. The advisory says successful exploitation could allow an unauthenticated attacker to write to arbitrary file paths. That is not automatically remote code execution, but arbitrary file write is one of those primitives attackers love because it can become a stepping stone: overwrite configuration, poison a startup path, plant a malicious payload where another process will later pick it up, or simply disrupt a service by replacing files it depends on.

The Oldest Web Bug Looks Different Inside a Hospital Network​

Path traversal is usually introduced to users through web examples: ../ sequences, malicious archive entries, and uploads that escape their intended directory. In medical imaging, the shape is different, but the core failure is the same. A sender controls some piece of data that the receiver later treats as a safe filesystem path.
DICOM networking has its own vocabulary. Systems act as service class users and providers. They negotiate associations, exchange objects, and store studies. In a clean architecture, object identifiers and metadata stay metadata; they do not become unchecked filenames with enough power to steer writes across a server.
The problem with mature protocols is that they often carry decades of assumptions about trusted environments. DICOM grew up in hospital networks where the sender was presumed to be a scanner, a modality workstation, or another known system. Modern healthcare networks are not that simple. Imaging workflows now connect to cloud services, AI post-processing tools, vendor appliances, research sandboxes, remote reading platforms, and integration engines.
That expansion changes the threat model. A library that was safe enough when all senders lived on a quiet clinical VLAN becomes more sensitive when the same interface is reachable from broader hospital networks, partner connections, or misconfigured internet-facing systems. CISA’s mitigation language about minimizing network exposure is boilerplate, but in this case the boilerplate is the point.
The advisory also says CISA is not aware of public exploitation specifically targeting this vulnerability. That is reassuring, but only to a point. In healthcare, the distance between disclosure and exploitation can be shortened by poor asset visibility. If an organization cannot quickly answer where pynetdicom is installed, which applications bundle it, and which services expose DICOM listeners, the absence of known exploitation does not translate into safety.

Why “Unauthenticated File Write” Is the Phrase That Should Make Admins Sit Up​

Not every critical vulnerability deserves the same operational response. Some require a local account. Some require user interaction. Some require a fragile sequence of conditions. This one stands out because the advisory’s impact statement combines two words that make defenders nervous: unauthenticated and write.
Unauthenticated means the attacker does not need to log in first, at least in the vulnerable path CISA is describing. That matters in clinical networks where many device-to-device protocols were never designed around user-level authentication. Network placement often becomes the real security boundary, which is why firewall rules and segmentation carry so much weight.
Arbitrary file write is equally serious because it is not confined to data theft. A read flaw may expose sensitive files; a write flaw changes system state. Depending on the privileges of the process running the DICOM service, that could range from corrupting an image store to altering application behavior.
The exact consequence will vary. A containerized service running as a low-privilege user with a read-only filesystem and tight volume mounts is a very different target from a legacy Windows server running a medical application service as a broadly privileged account. The same vulnerable Python library can be a contained bug in one deployment and a serious foothold in another.
That is why defenders should resist the reflex to classify this as “just a dependency update.” The right first question is not whether Python is present somewhere in the environment. It is whether any service using pynetdicom receives DICOM traffic from systems that are not tightly trusted, and what that service can write to if it is abused.

The Healthcare Sector Keeps Rediscovering That Internal Is Not Safe​

CISA places this advisory in the Healthcare and Public Health sector and lists worldwide deployment. That is a broad label, but it matches the reality of medical imaging software. Hospitals rarely operate a single vendor monoculture. They run a mix of old modalities, newer viewers, PACS systems, specialty tools, vendor-managed servers, and local automation written by people who solved urgent workflow problems years ago and then moved on.
That ecosystem creates an uncomfortable security pattern. The most exposed systems are not always the internet-facing ones. Sometimes the most important trust relationships are inside the hospital: scanner to archive, archive to viewer, viewer to analytics platform, research import folder to processing service. Attackers who land anywhere inside that mesh may find protocols that were designed for interoperability first and hostile input second.
The Windows angle is not incidental. Many healthcare environments still anchor their clinical software on Windows Server and Windows workstations, even when the vulnerable component itself is cross-platform Python. A pynetdicom service may run in a Windows service wrapper, inside a vendor application directory, as part of a scheduled workflow, or in a Python virtual environment maintained by a clinical engineering team rather than central IT.
That makes discovery awkward. Endpoint inventories may tell administrators that Python is installed, but not which virtual environment contains pynetdicom. Vulnerability scanners may flag the package on developer workstations while missing a bundled copy inside a vendor appliance. Software bills of materials help, but healthcare procurement and legacy support contracts often lag behind what security teams need.
This is where the advisory should become a coordination event. Security teams need application owners, imaging informatics staff, biomedical engineering, vendors, and Windows administrators in the same conversation. If the only action is “tell the server team to patch Python,” the organization is likely to miss the systems that matter most.

Version Numbers Tell a Cleaner Story Than Real Deployments Do​

CISA identifies pynetdicom versions greater than or equal to 1.0.0 and earlier than 3.0.4 as affected. The clean remediation path is to move to version 3.0.4 or later. In a normal software environment, that would be straightforward: update the dependency, redeploy, test, and move on.
Medical environments are not normal software environments. A DICOM receiver may be embedded in a validated workflow. It may be part of a vendor-supported product where local package updates are discouraged or unsupported. It may have been frozen years ago because it “just works” and no one wants to touch the imaging pipeline during clinical hours.
The tension is familiar to anyone who has patched healthcare systems. Security wants the fixed library. Operations wants continuity. Clinicians want images available immediately. Vendors want changes routed through support channels. Compliance wants documentation. Everyone is correct, and the vulnerability does not care.
That is why the version boundary should be treated as both a remediation target and an investigative clue. If an internal application pins pynetdicom below 3.0.4, the team should ask why. Is it because newer releases changed behavior? Is it because no one has rebuilt the application? Is it because the product is abandoned? Each answer carries a different operational risk.
There is also a subtle dependency-management lesson here. Python packages are easy to install, easy to vendor, and easy to forget. A system may have multiple copies of the same library in different environments. The pip output from one shell on one server is not a definitive inventory of the host, much less the enterprise.

The Fix Is a Package Update, but the Mitigation Is Network Architecture​

CISA’s recommended practices focus on defensive basics: minimize network exposure, place control systems and remote devices behind firewalls, isolate them from business networks, and use secure remote access methods when remote access is required. Those recommendations can feel generic because they appear in many ICS advisories. Here, they map directly to the exploit path.
If an unauthenticated attacker must be able to reach the DICOM service, segmentation is not a compensating control in the abstract. It is the gate. A vulnerable listener exposed broadly across a hospital network gives an attacker options. The same listener restricted to known modalities and routing nodes is still vulnerable, but the attack surface is dramatically smaller.
For Windows-heavy shops, this often comes down to mundane controls: host firewalls, VLAN ACLs, service accounts, NTFS permissions, and careful review of which ports are open between clinical and enterprise zones. DICOM commonly uses well-known and site-specific TCP ports, and imaging teams often request broad allow rules to make troubleshooting easier. Those rules deserve a second look whenever a DICOM stack vulnerability appears.
Least privilege is the other practical control. If the service receiving DICOM objects runs as an account that can write only to a staging directory, path traversal has less room to do damage. If it runs with broad local administrative rights or write access to application directories, the same flaw becomes far more attractive.
The best immediate mitigation is boring by design. Find the exposed services, update what can be updated, restrict what cannot be updated, and monitor the paths those services are able to write. The lesson is not that every imaging system must be rebuilt overnight. It is that healthcare networks can no longer afford protocols whose security model is “the sender is probably friendly.”

The Disclosure Also Exposes a Blind Spot in Vulnerability Management​

One reason library vulnerabilities are difficult in healthcare is that the affected product name may not appear anywhere in an asset owner’s vocabulary. A PACS administrator may know the product brand and version. A biomedical engineer may know the modality and vendor. A Windows admin may know the hostname. None of them may know that a Python package named pynetdicom is inside the workflow.
That disconnect is exactly where modern vulnerability management struggles. CVEs and advisories are published against components. Enterprises manage applications and services. Hospitals manage clinical capabilities. Bridging those layers requires metadata most organizations still do not have.
SBOMs were supposed to help with this. In practice, they help only when vendors provide them, customers retain them, and security platforms can query them. Many healthcare organizations are still working through basic asset normalization, let alone deep dependency visibility for every clinical system.
There is a second blind spot: research and “shadow clinical” tools. Hospitals often have legitimate, useful scripts and internal applications that move DICOM studies between systems, de-identify images, or feed AI models. These may be written by technically skilled clinicians, researchers, or departmental IT staff. They may not live inside enterprise deployment pipelines, but they can still expose network services and process sensitive medical data.
That makes this advisory a useful prompt for a broader hunt. Search code repositories, imaging servers, research environments, scheduled tasks, containers, and virtual environments. Ask not only “where is pynetdicom installed?” but “where do we accept DICOM objects and write them to disk?”

A Critical Score Does Not Mean Panic, but It Does Mean Prioritization​

The 9.1 CVSS score will push this advisory into critical queues, and that is appropriate. But critical does not mean every deployment is equally exposed. The exploitability of this flaw depends on reachability, configuration, file permissions, and the surrounding application behavior.
A public-facing DICOM receiver running an affected version is a high-priority incident-prevention task. An internal test tool bound to localhost is a different matter. A vendor appliance that cannot be updated immediately but is reachable only from two scanner IPs may be manageable with compensating controls while waiting for a supported patch.
The mistake would be to flatten all of those cases into the same response. Mature teams should triage this vulnerability the way attackers would: start with reachable services, privileges, trust boundaries, and write targets. Version data matters, but exposure data matters just as much.
It is also worth watching for security-tool confusion around the pydicom ecosystem. pydicom and pynetdicom are related but distinct packages. Earlier pydicom path traversal advisories have involved DICOMDIR file handling, while this CISA advisory is about pynetdicom versions before 3.0.4. Administrators should be precise about which component is installed and which advisory a scanner is referencing.
That precision matters because false certainty wastes time. If a scanner flags “pydicom” but the exposed service is actually using “pynetdicom,” or vice versa, remediation teams can end up patching the wrong layer. In healthcare, wasted maintenance windows are not a minor inconvenience.

Windows Admins Should Treat This Like a Service Exposure Problem​

For WindowsForum readers, the obvious question is how a Python medical-imaging library becomes a Windows administration concern. The answer is that many clinical applications are still deployed as Windows services, scheduled jobs, or vendor-managed applications running on Windows Server. The vulnerable code may be Python, but the blast radius is governed by Windows configuration.
Start with service identity. If a DICOM receiver runs under LocalSystem, a domain account with broad share access, or a reused vendor service account, arbitrary file write becomes more dangerous. Moving services to least-privilege accounts is not glamorous, but it can be the difference between a contained application bug and a host-level compromise.
Then look at filesystem permissions. The service should not be able to write to application binaries, startup folders, script directories, or broad network shares unless there is a documented need. In many older deployments, permissions accreted over years of troubleshooting. This advisory is a good reason to remove them.
Windows Defender Application Control, controlled folder access, endpoint detection rules, and file integrity monitoring may all help, but they are not substitutes for patching. They are guardrails. If the vulnerable service is reachable and can write to sensitive paths, the environment is relying on detection after the fact.
Logging also deserves attention. DICOM services may log association requests, calling application entity titles, remote IPs, and storage outcomes. Security teams should make sure those logs are retained and visible. A failed or suspicious storage request may be the first sign that someone is probing the boundary between DICOM metadata and the filesystem.

Vendors Need to Stop Hiding Open Source in the Walls​

This advisory is another reminder that medical devices and clinical applications are software supply chains with a user interface attached. Open source packages are not the problem; they are often the reason specialized software can be built at all. The problem is opacity.
When a vulnerability lands in a package like pynetdicom, customers need fast answers. Is the package present? Is it exposed? Is the vulnerable function used? Is a patch available? Will applying it affect validation or support? Too often, those answers require a support ticket, a vendor bulletin, and several days of uncertainty.
Healthcare buyers should push harder here. If a vendor ships DICOM networking functionality, it should be able to describe its dependency posture. If it bundles Python packages, it should know which versions. If it cannot support emergency updates, it should provide compensating-control guidance that is specific enough to implement.
The industry has improved since the worst days of opaque appliances, but not enough. Software composition is now a patient-safety issue because clinical availability depends on systems staying both operational and defensible. A vulnerability that allows arbitrary file writes in an imaging workflow is not merely an IT concern; it threatens the integrity and availability of diagnostic infrastructure.
There is a hard balance to strike. Hospitals cannot patch every clinical component the way a cloud company patches microservices. But vendors cannot use clinical caution as a permanent excuse for dependency stagnation. Security maintenance has to become part of the supported lifecycle, not an exception to it.

The Real Test Is Whether Hospitals Can Find the Library Before Attackers Do​

The advisory’s most practical impact will be measured in inventory speed. Organizations that can quickly identify affected systems, determine exposure, and schedule updates will treat this as a manageable critical vulnerability. Organizations that cannot will spend days asking basic questions while risk accumulates.
That inventory should include conventional servers, vendor applications, imaging routers, research systems, containers, virtual environments, and development machines that process production DICOM data. It should also include network paths. A vulnerable package on a disconnected workstation is not the same as a vulnerable listener reachable across a flat hospital network.
There is also value in asking vendors pointed questions. Customers should request confirmation of whether pynetdicom is used, whether affected versions are present, whether version 3.0.4 or later is available, and what compensating controls are recommended if patching must wait. A vague “not affected” response should come with enough detail to be credible.
For organizations that maintain their own Python tools, the remediation is more direct but still needs testing. Update the dependency, run workflow tests with representative DICOM studies, verify storage paths, and confirm that any custom handlers do not reintroduce unsafe filename behavior. A patched library does not automatically sanitize every local customization built around it.
Security teams should also assume that advisory-driven patching will surface old design decisions. Hardcoded paths, shared write directories, permissive service accounts, and undocumented DICOM peers often appear only when someone goes looking. That discovery can be uncomfortable, but it is the beginning of a better security posture.

The Concrete Work Starts With the DICOM Listener​

The lesson from this advisory is not that pynetdicom is uniquely unsafe. It is that healthcare’s dependence on interoperable, file-moving protocols makes input validation failures unusually consequential. A small library bug can cross the boundary from software hygiene into clinical operations.
  • Organizations should identify every system that uses pynetdicom and prioritize any deployment running versions 1.0.0 through before 3.0.4.
  • Teams should update affected deployments to pynetdicom 3.0.4 or later wherever vendor support and workflow testing allow it.
  • DICOM services that cannot be patched immediately should be restricted to known peers through network controls and host firewalls.
  • Services that receive DICOM objects should run with least-privilege accounts and should not have write access outside required storage locations.
  • Administrators should review logs for unusual DICOM storage attempts, unexpected remote peers, or file-write errors that suggest probing.
  • Healthcare providers should press vendors for dependency-level confirmation rather than accepting generic product assurances.
The forward-looking story is bigger than one Python package. Medical imaging will keep absorbing cloud workflows, AI analysis, remote specialists, and cross-organization data exchange, and every one of those connections adds pressure to security assumptions formed in quieter networks. The organizations that handle this advisory well will not be the ones that merely update a library; they will be the ones that use it to redraw trust boundaries before the next “internal” protocol bug becomes an external incident.

References​

  1. Primary source: CISA
    Published: 2026-06-25T12:00:00+00:00
  2. Related coverage: security.snyk.io
  3. Related coverage: advisories.gitlab.com
  4. Related coverage: data.safetycli.com
  5. Related coverage: getsafety.com
 

Back
Top