HOL LogoGuard

Explore HOL

  • HOL home
  • AI agent registry
  • AI plugins
  • Open standards
  • HOL members
  • Sponsor HOL
  • Advertise with HOL

Guard product

  • Guard overviewLocal security and control for AI agents and the tools they use.
  • FeaturesRuntime protection, policy routing, review, and evidence.

Explore Guard

  • Product previewWalk through Guard surfaces in read-only demo mode.
  • ComparisonCompare Guard with native controls and AI security vendors.

AI tools

  • All AI toolsEvery supported AI tool and how Guard applies policy to it.
  • Codex
  • Claude Code
  • Cursor
  • Antigravity CLI
  • OpenCode
  • Hermes
  • OpenClaw
  • GitHub Copilot CLI
  • Antigravity
  • Kimi
  • Grok
  • Pi / Oh My Pi
  • Zcode

Extensions

  • All extensionsBrowse command and MCP coverage with owners and stated limits.
  • Command coverageShell command protection across clouds, databases, backups, and packages.
  • MCP server coverageSee how Guard maps risk state across MCP tools and servers.
  • Core safetyThe safety floor listings that ship with Guard.
  • Data and resilienceBackup and storage command protection.
  • Cloud and infrastructureAWS, Azure, GCP, Kubernetes, and more.

Security

  • AI security hubSecurity research, advisories, and agent safety coverage.
  • AI tool securitySecurity profiles for each supported coding agent.
  • Safe labsHands-on attack simulations with safe boundaries.
  • Redacted warningsReal blocked actions with sensitive details removed.
  • AdvisoriesCoordinated disclosure reports for AI tooling.
  • Active CVEsSearch active CVEs affecting AI tooling.

Learn

  • Security guidesPractical guides for securing AI agent workflows.
  • DocsInstall, configure, and operate Guard with confidence.
  • ResearchPublished security research, benchmarks, and methodology.

Community

  • ReleasesVersion history, shipped changes and upgrade notes.
  • ContributorsThe people and contributions behind HOL Guard.
  • AffiliatesShare Guard with your audience and earn from referrals.
  • SponsorFund agreed research, implementation and shared testing through the HOL Partner Program.
  • AdvertiseCompare README logo placements, previews and monthly prices, or promote a plugin or extension.
PricingEnterpriseOpen AppInstall Guard
  1. Guard
  2. Security
  3. CVEs
  4. CVE 2026 48705 monailabel server crash and silent inference
HOL Guard

Public security guidance for teams protecting AI harnesses, MCP servers, skills, prompts, and local tool execution.

Install Guard

AI Security

  • Prompt injection
  • MCP security
  • OWASP MCP mapping
  • Supply chain

Resources

  • Trust packet
  • Harness setup
  • Redacted warnings
  • Safe labs

Product

  • Install Guard
  • Pricing
  • Open dashboard
Guard
  • Guard Overview
  • Releases
  • Contributors
  • Install Guard
  • Pricing
Docs
  • Documentation Index
  • Developer Hub
  • API Reference
  • Root OpenAPI
  • Registry OpenAPI
  • Run in Postman
  • Standards
  • Submit ERC-8004 Contract
  • Feature Your Agent
Best Plugins
  • Browse Plugins
  • Plugin Launches
  • Best Claude Plugins
  • Best Codex Plugins
  • Best Grok Plugins
  • Best Kimi Plugins
  • Best DeepSeek Plugins
  • Best Antigravity Plugins
  • Best MCP Servers
  • Best Cursor Plugins
  • Best OpenCode Plugins
Best Agents
  • Best ERC-8004 Agents
  • Best Virtuals Agents
  • Best MCP Servers
  • Best A2A Agents
  • Best x402 Payable
  • All Categories
Community
  • Telegram
  • X
More
  • About HOL
  • Sponsor
  • Advertise
  • Contact
  • Blog
  • GitHub
  • Privacy
  • Terms of Service
Settings

Copyright © 2026 HOL DAO LLC. All rights reserved.

Back to active CVEs
Critical · CVSS 9.3CVE-2026-48705GHSA-6HP3-VR39-RQW8

MONAILabel Server Crash and Silent Inference Corruption via Crafted DICOM (pydicom DS/IS Validation Bypass)CVE-2026-48705

Answer in brief

CVE-2026-48705 records a Critical severity (CVSS 9.3) vulnerability in MONAILabel Server Crash and Silent Inference Corruption via Crafted DICOM (pydicom DS/IS Validation Bypass). The current sources do not mark it as known exploited. The current feed maps monai (pip), monai (pypi). Check affected ranges and fixed versions before updating.

Analysis pending evidence review

HOL Guard separates source facts from reviewed analysis. See the methodology.

Published Oct 27, 2026Updated Oct 27, 2026Source checked Oct 27, 2026First seen by HOL Oct 27, 2026Material review Oct 27, 2026
Upstream Advisory

Key facts

Risk
Critical · CVSS 9.3
Exploitation
Not marked as known exploited
Affected software
2 mapped packages or products
Fix availability
Available

Why this deserves its current priority

CVSS is 9.3. The current sources do not mark it as known exploited. Treat this as a source-backed prioritization signal, not a statement about your environment.

Analysis status

Analysis pending evidence review

Factual feed record only; HOL analysis is not approved for indexing. Read the methodology.

Affected scope and exposure questions

The current feed maps monai (pip), monai (pypi). Check affected ranges and fixed versions before updating.

Mapped affected packages and fixed versions
PackageAffected rangeFixed version
monaipip<1.6.11.6.1
monaipypi>=0 <1.6.11.6.1

Recommended response

  1. 1Check inventory. Check lockfiles and deployed manifests for monai, monai.
  2. 2Review the reported fix. Update monai to 1.6.1; monai to 1.6.1 if you use the affected versions. Test the change in a non-production environment first.

Evidence timeline and material changes

  1. Published upstream

    Oct 27, 2026

    Evidence: source:ghsa:source_dates:source-dates:record
  2. Source modified

    Oct 27, 2026

    Evidence: source:ghsa:source_dates:source-dates:record
  3. First seen by HOL

    Oct 27, 2026

Sources and claim methodology

  • GitHub security advisorygithub.com
  • GitHub security advisorygithub.com
  • GitHub security advisorygithub.com
  • GitHub security advisorygithub.com
  • GitHub security advisorygithub.com
Upstream source description

### Summary An unauthenticated remote attacker can crash a running MONAILabel server or silently corrupt its medical AI inference results by uploading a single crafted DICOM file (~132 KB) via the REST API. The vulnerability stems from pydicom's lack of validation for Decimal String (DS) and Integer String (IS) DICOM Value Representations, which allows NaN and infinity values to pass through MONAI's PydicomReader and propagate through the entire spatial transform and ML inference pipeline. No authentication is required for the default MONAILabel REST API. The attacker needs only network access to the server (default port 8000). **Severity:** CVSS 3.1: 8.7 HIGH **CVSS Vector:** CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:L **CWE:** CWE-20 (Improper Input Validation) → CWE-682 (Incorrect Calculation) ### Details **Root Cause — Layer 1: pydicom accepts invalid VR values** pydicom's `DSfloat.__new__()` calls Python's `float(val)`, which silently accepts "NaN", "inf", and "-inf". The DICOM standard (PS3.5 Table 6.2-1) defines DS as digits 0-9, +, -, ., e only. NaN and inf are not valid DS values. The `is_valid_ds()` check only runs in RAISE validation mode, which is NOT the default. The default mode is WARN, which still returns the invalid value. ```python >>> from pydicom.valuerep import DSfloat >>> DSfloat("NaN") nan # Accepted silently — should be rejected >>> DSfloat("inf") inf # Accepted silently — should be rejected ``` This affects ALL pydicom versions from 0.9.7 through 3.0.2 (current). A related bypass exists in pydicom's IS type: `IS("1e4")` returns 10000 via an `int(float(val))` fallback, accepting scientific notation that is not valid per the DICOM standard. **Root Cause — Layer 2: MONAI Core trusts pydicom output without validation** MONAI's `PydicomReader._get_affine()` builds a 4x4 affine transformation matrix from PixelSpacing, ImagePositionPatient, and ImageOrientationPatient with ZERO `isfinite()` or `isnan()` checks. NaN in PixelSpacing produces NaN in the affine diagonal, propagating through every spatial transform: `PydicomReader._get_affine() → LoadImaged → Spacingd → Model → Writer` **Root Cause — Layer 3: MONAILabel REST API accepts anything** MONAILabel's `PUT /datastore/` endpoint accepts DICOM uploads with no authentication (default deployment), no validation of spatial metadata, and no bounds checking on any DICOM tag values. The malicious DICOM is stored permanently and made available for inference. ### PoC **Environment Setup:** ```bash # Start MONAILabel (Docker) docker pull projectmonai/monailabel:latest docker run -d --name monailabel-poc -p 8000:8000 --memory=8g \ projectmonai/monailabel:latest monailabel start_server \ --app /opt/monai/sample-apps/radiology \ --studies /opt/monai/datasets/Task09_Spleen/imagesTr \ --conf models segmentation # Verify server is running curl http://localhost:8000/info/ ``` **Step 1 — Establish baseline (legitimate data works):** ```bash curl -X POST "http://localhost:8000/infer/segmentation?image=spleen_40" \ -o baseline.nii.gz -w "HTTP %{http_code} - %{size_download} bytes" # Result: HTTP 200, ~223,628 bytes valid segmentation mask ``` **Step 2 — Run the attack (NaN DICOM upload + inference):** ```bash pip install pydicom numpy requests python poc_monailabel_ds_bypass.py --server http://localhost:8000 ``` The PoC script: 1. Confirms pydicom accepts NaN/inf in DS fields 2. 2. Creates three malicious DICOM files (~132 KB each) with NaN/inf in PixelSpacing and ImagePositionPatient 3. 3. Uploads each via `PUT /datastore/` (no auth required) — HTTP 200 accepted 4. 4. Triggers inference via `POST /infer/segmentation` — HTTP 500, server crash **Demonstrated Results:** | Payload | Upload | Inference | Result | |---|---|---|---| | Baseline (spleen_40) | N/A | HTTP 200 | Valid 223 KB segmentation | | NaN PixelSpacing | HTTP 200 | HTTP 500 | RuntimeError crash (18.0s wasted compute) | | NaN PixelSpacing + IPP | HTTP 200 | HTTP 500 | RuntimeError crash (16.7s wasted compute) | | Inf PixelSpacing | HTTP 200 | HTTP 500 | RuntimeError crash (16.4s wasted compute) | **Server crash traceback:** ``` monailabel/tasks/infer/basic_infer.py → self.writer(data) monailabel/transform/writer.py → write_itk(...) itk/ITKCommonBasePython.py → itkProcessObject_Update() RuntimeError: itkGDCMImageIO.cxx:1226: ITK ERROR: GDCMImageIO: A Floating point buffer was passed but the stored pixel type was not specified. ``` Each request burns ~16 seconds of server compute (full ML inference pipeline) before crashing. The NaN DICOM persists in the datastore — any future inference on that image ID crashes the server again. **Library-level confirmation:** 17/17 test vectors confirmed against MONAI 1.5.2 and pydicom 3.0.2, including actual MONAI `LoadImaged` and `Spacingd` transforms accepting NaN geometry without error. ### Impact 1. **Denial of Service:** A single ~132 KB DICOM upload crashes the MONAILabel inference pipeline. All active inference requests from legitimate users are aborted. Repeatable indefinitely with minimal bandwidth. 2. **Silent Data Corruption:** NaN values in spatial metadata propagate through the entire ML inference pipeline and produce geometrically incorrect segmentation masks. If the output writer does not crash, the result is returned with HTTP 200 and zero warnings. 3. **Persistent Datastore Poisoning:** The malicious DICOM is stored permanently via `PUT /datastore/`. Any future inference request on that image ID reproduces the crash or corruption, persisting across server restarts. **Affected MONAI Ecosystem (9 repositories):** - MONAI Core: PydicomReader, LoadImaged, Spacingd transforms - - MONAILabel: REST API + DICOMweb datastore - - MONAI Deploy App SDK: DICOMDataLoaderOperator - - model-zoo, VISTA, GenerativeModels, tutorials, research-contributions **Affected DICOM Tags (any DS VR):** PixelSpacing, ImagePositionPatient, SliceThickness, ImageOrientationPatient, RescaleSlope, WindowCenter/WindowWidth **Recommended Fix:** 1. Add `math.isfinite()` validation in `PydicomReader._get_affine()` on all values from PixelSpacing, IPP, IOP. Raise ValueError for NaN/inf. 2. 2. Validate spatial metadata of uploaded DICOM in MONAILabel `PUT /datastore/`. Return HTTP 400 for invalid geometry. 3. 3. Validate spatial metadata is finite in `LoadImaged`/`Spacingd` before resampling. 4. 4. Coordinate with pydicom upstream to reject NaN/inf in DS fields in all validation modes. **Upstream:** pydicom GHSA filed 2026-04-05. **Author:** Paulino Calderon ([email protected])

Quoted source text, attributed separately from HOL analysis.

Record context

Vulnerability class
Missing Auth
EPSS
Not reported
CWE IDs
CWE-20
Source
GitHub Security Advisories
Source checked
Oct 27, 2026
References
5 linked sources
Open source record