CVE-2026-69110 Overview
CVE-2026-69110 is a missing authentication vulnerability in OpenCode Studio versions before 2.4.4. Unauthenticated remote attackers can read arbitrary files inside the temp and static/music directories by calling the GET /api/tmp/:tmpFile and GET /api/music/:fileName endpoints directly. The same authentication gap exposes the DELETE /api/short-video/:videoId endpoint, letting attackers delete any video by ID. The flaw maps to [CWE-22] (Path Traversal) and affects confidentiality of intermediate audio, video artifacts, and subtitles belonging to other users' jobs.
Critical Impact
Remote, unauthenticated attackers can exfiltrate other users' generated media artifacts and destroy stored short videos without any credentials or user interaction.
Affected Products
- OpenCode Studio versions prior to 2.4.4
- OpenCode Studio /api/tmp/:tmpFile endpoint
- OpenCode Studio /api/music/:fileName and /api/short-video/:videoId endpoints
Discovery Timeline
- 2026-08-04 - CVE-2026-69110 published to NVD
- 2026-08-04 - Last updated in NVD database
Technical Details for CVE-2026-69110
Vulnerability Analysis
OpenCode Studio exposes REST endpoints that serve files from job-specific working directories. The endpoints GET /api/tmp/:tmpFile and GET /api/music/:fileName accept a path parameter and return the requested file. Neither endpoint validates the caller's identity or verifies ownership of the requested resource. As a result, any network-reachable client can enumerate and retrieve intermediate audio artifacts, rendered video segments, and subtitle files created by other users.
The same lack of authentication applies to the DELETE /api/short-video/:videoId endpoint. An attacker who knows or brute-forces a videoId can permanently remove a stored short video. Because the server listened on all interfaces before the fix, exposure extends to any host reachable across the local network or an exposed cloud instance.
Root Cause
The root cause is missing authentication combined with insufficient path validation on user-controlled parameters. Route handlers concatenated the :tmpFile and :fileName parameters into file system paths without verifying that the resolved path stayed inside the intended directory or that the caller owned the associated job.
Attack Vector
Exploitation requires only network access to the OpenCode Studio HTTP service. The attacker issues an unauthenticated GET request to /api/tmp/<filename> or /api/music/<filename> to read arbitrary content from those directories, or a DELETE request to /api/short-video/<videoId> to remove existing videos.
// Security patch in server/index.js
// Fix path traversal in profile operations (#55)
['google', 'anthropic', 'openai', 'xai', 'openrouter', 'together', 'mistral', 'deepseek', 'amazon-bedrock', 'azure', 'github-copilot'].forEach(p => importCurrentAuthToPool(p));
const port = await findAvailablePort(DEFAULT_PORT);
- app.listen(port, () => {
- console.log(`Server running at http://localhost:${port}`);
+ app.listen(port, '127.0.0.1', () => {
+ console.log(`Server running at http://127.0.0.1:${port}`);
// Initial sync on startup if enabled
setTimeout(() => {
const studio = loadStudioConfig();
Source: GitHub Commit 1f4d7a7
The patch binds the server to 127.0.0.1 and adds a safeName() helper that rejects path separators and resolves the target within PROFILES_DIR:
// Security patch in server/profile-manager.js
const OPENCODE_DIR = path.join(HOME_DIR, '.config', 'opencode');
const PROFILES_DIR = path.join(HOME_DIR, '.config', 'opencode-profiles');
+function safeName(name) {
+ if (!name || typeof name !== 'string' || name.includes('/') || name.includes('\\')) {
+ throw new Error('Invalid profile name');
+ }
+ const target = path.resolve(PROFILES_DIR, name);
+ if (path.dirname(target) !== path.resolve(PROFILES_DIR)) {
+ throw new Error('Invalid profile name');
+ }
+ return name;
+}
if (!fs.existsSync(PROFILES_DIR)) {
fs.mkdirSync(PROFILES_DIR, { recursive: true });
}
Source: GitHub Commit 1f4d7a7
Detection Methods for CVE-2026-69110
Indicators of Compromise
- Unauthenticated HTTP GET requests to /api/tmp/ or /api/music/ paths from external or unexpected source addresses.
- HTTP DELETE requests targeting /api/short-video/:videoId without a valid session context.
- Unexpected disappearance of stored short-video artifacts or access-log entries for files owned by other job IDs.
Detection Strategies
- Enable HTTP access logging on the OpenCode Studio process and alert on requests to /api/tmp/*, /api/music/*, and DELETE /api/short-video/*.
- Correlate request source IPs against the expected client population; any non-loopback source on patched hosts indicates misconfiguration.
- Monitor file system change events in the temp and static/music directories for reads or deletions outside job-owner processes.
Monitoring Recommendations
- Ingest OpenCode Studio HTTP and system logs into a centralized SIEM for retention and correlation.
- Baseline normal API call volumes per endpoint and alert on request bursts against the vulnerable routes.
- Track outbound egress from hosts running OpenCode Studio to identify potential exfiltration of harvested media files.
How to Mitigate CVE-2026-69110
Immediate Actions Required
- Upgrade OpenCode Studio to version 2.4.4 or later, which ships the authentication and path-validation fixes.
- Restrict the OpenCode Studio listener to 127.0.0.1 or a trusted management interface, matching the upstream patch behavior.
- Rotate or purge any sensitive intermediate artifacts that may have been exposed in the temp and static/music directories.
Patch Information
The fix is available in OpenCode Studio Release v2.4.4 via Pull Request #55 and commit 1f4d7a7. Additional detail is provided in the VulnCheck Advisory for OpenCode Studio and GitHub Issue #54.
Workarounds
- Bind the service to 127.0.0.1 and require SSH port forwarding or a reverse proxy with authentication for remote access.
- Place OpenCode Studio behind a reverse proxy that enforces authentication and blocks direct calls to /api/tmp/*, /api/music/*, and /api/short-video/*.
- Restrict inbound access to the OpenCode Studio port using host firewall rules or cloud security groups until the upgrade is applied.
# Configuration example: restrict OpenCode Studio to loopback and firewall the port
# 1. Ensure the process listens only on 127.0.0.1 (default after v2.4.4)
# 2. Block external access to the application port (adjust PORT as needed)
sudo iptables -A INPUT -p tcp --dport ${PORT:-3000} ! -s 127.0.0.1 -j DROP
sudo iptables -A INPUT -p tcp --dport ${PORT:-3000} -s 127.0.0.1 -j ACCEPT
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

