CVE-2024-12217
Medium · 5.3CVSS
5.3
EPSS
0.7%
Published
Mar 20, 2025
CISA due date
—
Cloudanix analysis
A flaw can let someone read files that a Windows-hosted application was supposed to keep private.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Data Exposure
- Component
- Library
- Class
- Path Traversal
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The described flaw is a Windows-specific path traversal / access-control bypass in gradio-app/gradio's blocked_path enforcement. The application is intended to prevent reads of explicitly blocked files, but path normalization and comparison do not correctly account for NTFS Alternate Data Streams syntax. An unauthenticated remote requester can append an ADS suffix such as "::$DATA" to an otherwise blocked Windows file path and cause the application to treat it as a different, non-blocked path while the filesystem still resolves it to the same underlying file content. The impact is limited to unauthorized file disclosure; the provided CVSS vector indicates no integrity or availability impact and no authentication or user interaction requirement.
Why it matters to the business
Exploitation can expose sensitive files that application owners explicitly intended to keep inaccessible, such as configuration files, credentials, local data files, model artifacts, API keys, or other secrets on Windows hosts running an affected Gradio application. The current metadata indicates a moderate severity issue, low EPSS probability, no known CISA KEV listing, no known ransomware association, and no public exploit maturity reported, which lowers immediate mass-exploitation urgency but does not remove risk for internet-facing applications. The affected-product data supplied also lists Alpine v3.17 xen fixed in 4.16.6-r3, which appears inconsistent with the Gradio Windows ADS vulnerability description; asset owners should validate both the application dependency exposure and package-advisory mapping before prioritizing broad remediation.
How an attack unfolds
An attacker first identifies a Gradio application exposed over the network and determines whether it is running on Windows and allows file access through routes or components that serve local paths. The attacker then selects a file path that should be denied by the application's blocked_path configuration. Instead of requesting the blocked file path directly, the attacker appends NTFS Alternate Data Streams syntax, commonly "::$DATA", to the requested path. Because the blocklist comparison fails to normalize or reject this ADS form, the application may allow the request and pass it to the Windows filesystem, which resolves the default data stream and returns the protected file contents. The attacker can repeat this against likely sensitive paths and use any recovered secrets for follow-on access. No named threat actors, KEV exploitation, or mature public exploit activity is indicated in the provided metadata.
How to fix it
Upgrade affected Gradio installations to a version that correctly rejects or canonicalizes NTFS Alternate Data Streams before evaluating blocked paths. If package inventory reports Alpine v3.17 xen exposure from the provided advisory data, update xen to 4.16.6-r3 or later, but validate the advisory mapping because the vulnerability description specifically concerns gradio-app/gradio on Windows rather than Xen on Alpine. As compensating controls, avoid exposing Gradio applications directly to the internet, require authentication and network access controls, run the service with least-privileged filesystem permissions, store secrets outside paths reachable by the application, and explicitly reject request paths containing ADS markers such as colon-delimited stream names. For Windows deployments, implement server-side path canonicalization using filesystem-aware APIs and deny any path containing NTFS stream syntax before resolving or serving it.
How to confirm the fix worked
Confirm exposure by inventorying Gradio applications and dependency versions, especially Windows-hosted services that serve local files and use blocked_path controls. Verify that the running version includes the upstream fix, or that the application has an equivalent mitigation rejecting ADS syntax. In a non-production or authorized test environment, configure a known blocked test file and attempt to access it using both the normal path and the ADS form with "::$DATA" appended; the fixed behavior is that both requests are denied and no file content is returned. For package-managed systems that report the supplied Alpine advisory, confirm that xen is at least 4.16.6-r3 on Alpine v3.17. Review application and reverse-proxy logs for historical requests containing ADS markers to assess whether exploitation was attempted before the fix.
Typical attack path
- Discover an exposed Gradio service or application endpoint that can serve local files.
- Infer or enumerate sensitive local file paths that the application is expected to block.
- Send a normal request for a blocked path to confirm that access is denied, if safe to test.
- Resubmit the request with NTFS ADS syntax appended, such as "::$DATA".
- Receive file contents that should have been blocked by the application policy.
- Search retrieved content for secrets, tokens, credentials, configuration values, or other sensitive data.
- Use exposed secrets for lateral movement, data access, or further compromise if applicable.
How to detect it
Look for evidence of attempted or successful file reads using NTFS Alternate Data Streams syntax. Primary log sources include web server access logs, reverse-proxy logs, WAF logs, Gradio application logs, API gateway logs, EDR network telemetry, and Windows filesystem or process telemetry if available. Search request URLs, query strings, decoded parameters, headers, and application error messages for "::$DATA" and URL-encoded equivalents. Pay particular attention to requests for known sensitive Windows paths, application configuration files, credential stores, model directories, temporary upload directories, and files listed in blocked_path settings. A denied request followed by a similar request with an ADS suffix and a 200 response or unusually large response body is a strong exploitation signal. If suspicious requests are found, determine whether the service account could read the targeted files, collect response-size/status evidence, review downstream authentication or secret-use logs, and rotate any potentially exposed secrets. No specific named threat actor tradecraft is provided; detection should focus on the ADS path pattern and sensitive-file access behavior.
- ::$DATA
- %3A%3A%24DATA
- %3a%3a%24data
- ::%24DATA
- %3A%3A$DATA
- ::$data
- ::$INDEX_ALLOCATION
- %3A%3A%24INDEX_ALLOCATION
- blocked_path
- C:/Windows/win.ini::$DATA
- C:\\Windows\\win.ini::$DATA
- C:/Users/
- C:\\Users\\
- /file=
What your security team should do
- Prioritize identifying internet-facing or partner-accessible Gradio applications running on Windows, because the flaw is remotely reachable and requires no authentication according to the CVSS vector.
- Patch affected Gradio deployments or apply an application-layer deny rule for NTFS ADS syntax until patching is complete.
- Validate the apparent mismatch between the described Gradio vulnerability and the supplied Alpine xen affected-product metadata before relying on package scanner results alone.
- Restrict Gradio services behind authentication, VPN, private networks, or reverse proxies where possible.
- Rotate credentials or tokens if logs show successful file retrieval attempts against sensitive paths.
- Add detection rules for HTTP requests containing "::$DATA" or URL-encoded ADS variants.
- Review blocked_path configurations and ensure sensitive files are not readable by the service account even if application-level controls fail.
- Track this as moderate urgency given CVSS 5.3, low EPSS, no KEV listing, no ransomware association, and no reported exploit maturity, while still remediating exposed systems because file disclosure can reveal high-value secrets.
The record
A vulnerability in the gradio-app/gradio repository, version git 67e4044, allows for path traversal on Windows OS. The implementation of the blocked_path functionality, which is intended to disallow users from reading certain files, is flawed. Specifically, while the application correctly blocks access to paths like 'C:/tmp/secret.txt', it fails to block access when using NTFS Alternate Data Streams (ADS) syntax, such as 'C:/tmp/secret.txt::$DATA'. This flaw can lead to unauthorized reading of blocked file paths.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| PyPI | gradio | 0 | No fix |
Related vulnerabilities
- GHSA-jmh7-g254-2cq9 Gradio has SSRF via Malicious `proxy_url` Injection in `gr.load()` Config Processing Also affects gradio
- GHSA-pfjf-5gxr-995x Gradio has an Open Redirect in its OAuth Flow Also affects gradio
- GHSA-39mp-8hj3-5c49 Gradio is Vulnerable to Absolute Path Traversal on Windows with Python 3.13+ Also affects gradio
- GHSA-h3h8-3v2v-rg7m Gradio: Mocked OAuth Login Exposes Server Credentials and Uses Hardcoded Session Secret Also affects gradio
- CVE-2026-28414 Gradio is an open-source Python package designed for quick prototyping. Also affects gradio
- CVE-2026-28415 Gradio is an open-source Python package designed for quick prototyping. Also affects gradio
- CVE-2026-28416 Gradio is an open-source Python package designed for quick prototyping. Also affects gradio
- CVE-2026-27167 Gradio is an open-source Python package designed for quick prototyping. Also affects gradio