CVE-2026-81028
MediumCVSS 4.9Exploitation Probability (EPSS)
Low risk44th percentile - higher than 44% of all known CVEs
Summary
ZLMediaKit confines the downloadFile API to configured root directories with a prefix comparison that does not account for directory boundaries. A requested path is accepted if it starts with the configured root, allowing reading files from similarly named directories. The API secret is required, but the reference container runs the server as root.
Risk Assessment
An attacker with the API secret can read files outside the intended directory, potentially leading to leakage of system files, especially when the server runs as root.
Recommendation
Update ZLMediaKit to a version that includes a fix accounting for directory separators in path comparison, and consider changing container privileges.
Other vulnerabilities in ZLMediaKit
See all- CVE-2026-67827Critical
Incorrect Access Control in the HTTP API module in ZLMediaKit commit 9fd5152 allows remote attackers to achieve Remote Code Execution (RCE) via unauthenticated access to the setServerConfig API endpoint, which permits overwriting the ffmpeg.snap configuration parameter with arbitrary shell commands. These commands are subsequently executed through the getSnap API endpoint with the privileges of the ZLMediaKit process.
- CVE-2026-35203High
ZLMediaKit, a streaming media service framework, has a heap buffer overflow vulnerability in the VP9 RTP payload parser in ext-codec/VP9Rtp.cpp. Lack of data length validation before reading can lead to out-of-bounds read.
Original NVD description (English source)
ZLMediaKit confines the downloadFile API to a configured set of root directories with a prefix comparison that does not account for directory boundaries. The configuration loader in server/WebApi.cpp builds each root with File::absolutePath("", item, true); because the relative-path argument is empty that helper returns the value without a trailing separator. The handler then accepts a requested path when start_with(file_path, root) holds, so a sibling directory whose name merely begins with the configured root string satisfies the test and is served. The only other guard rejects a path containing two dots, which this requires none of. The equivalent confinement check for the ordinary static file server in src/Http/HttpFileManager.cpp computes its root with a non-empty second argument, which appends the separator before comparing, and so is not affected. The endpoint requires the configured API secret, so this grants no privilege beyond what that secret already implies, but it reads files outside the directory the operator confined it to, and the reference container runs the server as root.
Vulnerability data from NVD (NIST) · CISA KEV · EPSS

