Unauthenticated Arbitrary File Read in ml-logger via CVE-2025-10952
An unauthenticated arbitrary file read vulnerability (CVE-2025-10952) in the ml-logger stream_handler allows remote attackers to enumerate and exfiltrate sensitive files from the host filesystem.
CVE search metadata
CVE search record: CVE-2025-10952. Severity: medium. CVSS: 5.3. EPSS: 0.54%. KEV: no. Product: ml-logger (<= commit acf255bade5be6ad88d90735c8367b28cbe3a743). Brief: Unauthenticated Arbitrary File Read in ml-logger via CVE-2025-10952. Brief link: https://feed.craftedsignal.io/briefs/2026-10-ml-logger-afr/
CVE-2025-10952 is a critical vulnerability residing in the ml-logger Python library, specifically within the stream_handler component of ml_logger/server.py. The flaw stems from improper input validation where the key parameter, provided via JSON request body, is passed directly to file read operations without adequate sanitization or path restriction checks. An unauthenticated attacker can exploit this by sending specially crafted paths, such as those utilizing double leading slashes (e.g., //root/.ssh/id_rsa), to bypass intended directory constraints. This enables the attacker to read arbitrary files accessible by the system user running the ml-logger process. A functional proof-of-concept exploit is publicly available, enabling unauthenticated file enumeration via the /glob endpoint followed by arbitrary file exfiltration through the /stream endpoint.
Attack Chain
- Attacker identifies a target exposing the
ml-loggerAPI, typically on port 8081. - Attacker sends a POST request to the
/globendpoint to enumerate the filesystem and identify sensitive files. - Attacker parses the JSON response from the
/globendpoint to locate high-value targets like SSH keys, configuration files, or credentials. - Attacker constructs a malicious request to the
/streamendpoint, embedding the targeted file path into thekeyJSON field. - Attacker prepends double slashes (e.g.,
//etc/shadow) to the file path to bypass the application's path normalization logic. - The
ml-loggerservice retrieves the requested file from the disk and transmits the content to the attacker in the response body. - Attacker saves the exfiltrated content, such as a private SSH key, to their local machine.
- Attacker uses the stolen credentials to establish persistent access or move laterally within the victim environment.
Impact
Successful exploitation allows unauthenticated remote attackers to read sensitive files from the underlying host filesystem. This poses a severe risk of credential theft, including the acquisition of SSH private keys, environment variables, and configuration files containing secrets. If the ml-logger service is running with elevated privileges, the impact extends to full system compromise. The vulnerability affects all versions of geyang/ml-logger up to commit acf255bade5be6ad88d90735c8367b28cbe3a743.
Recommendation
- Implement an authentication-enabled reverse proxy or API gateway in front of all
ml-loggerinstances to restrict access to trusted sources. - Deploy the Sigma rule below to detect path traversal attempts targeting the
ml-loggerendpoints. - Restrict the operating system user account running
ml-loggerto the minimum necessary permissions to prevent access to sensitive files like~/.ssh/or/etc/shadow. - Upgrade to a patched version of
ml-loggeras soon as the vendor provides a formal release addressing the vulnerability.
Immediate actions
Deploy Sigma rule to detect POST requests to /stream or /glob containing path traversal sequences.
Mitigations
Restrict access to ml-logger endpoints 8081 via firewall or proxy.
CVE-2025-10952
Detection coverage 1
Detect CVE-2025-10952 Exploitation Attempt
highDetects exploitation attempts against ml-logger using path traversal patterns in JSON keys
Detection queries are available on the platform. Get full rules →