---
id: "CVE-2026-61567"
kind: "vulnerability"
aliases: ["CVE-2026-61567"]
title: "AVideo: unauthenticated live-stream endpoint lets attackers run OS commands"
severity: "critical"
cvss: 10.0
epss: null
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["avideo", "package", "php", "self-hosted", "video-streaming"]
not_affected_if: ["endpoint-not-exposed", "patched-8.1.0-or-later"]
published_at: "2026-10-28T22:17:15+00:00"
first_seen_at: "2026-10-28T22:35:35+00:00"
updated_at: "2026-10-28T22:36:32+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-61567", "first_seen_at": "2026-10-28T22:35:35+00:00"}]
---

# AVideo: unauthenticated live-stream endpoint lets attackers run OS commands

AVideo's live-streaming endpoint view/videosListToLive.php trusts attacker-hosted JSON as login state, so an unauthenticated remote caller can self-grant streaming rights. Attacker-supplied video paths are then passed unescaped to ffprobe and ffmpeg through exec, letting the attacker run shell commands as the web-server user and read database and streamer credentials.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Check the AVideo version in the installed codebase; affected versions are those before `8.1.0`
- Confirm whether `view/videosListToLive.php` is reachable from the internet on the deployed instance

## Fix

- Upgrade AVideo to `8.1.0` or later
- Until upgraded, block external access to `view/videosListToLive.php` at the web server or firewall
- Rotate database credentials and stored streamer credentials if the instance was exposed

## Timeline

- 2026-10-28T22:35:35+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-61567

## From the sources

AVideo is a video-sharing Platform. Prior to 8.1.0, the live-streaming endpoint `view/videosListToLive.php` accepts an attacker-named streamer in `webSiteRootURL`, calls `Login::run` in `objects/Login.php`, and trusts the returned JSON as session state. An unauthenticated remote attacker who can host an HTTP service reachable by the encoder can self-grant `isLogged` and `canStream` without legitimate credentials. The endpoint requires only nonempty `playlists_id` and `APISecret` values; `APISecret` is forwarded rather than checked against a stored secret. This path never calls `Streamer::isURLAllowed` and therefore works regardless of the operator's streamer allowlist. It fetches a second attacker-controlled video-list response and interpolates `videos[].path` without shell argument escaping into `ffprobe` and `ffmpeg` commands passed to `exec`; `isAudio` calls `isVideo` to reach the `ffprobe` command. Paths containing shell delimiters execute arbitrary operating-system commands as the web-server user. The request filter does not inspect the video-list JSON. This can disclose database and stored streamer credentials, compromise the upstream platform using those credentials, modify files owned by the web-server user, establish persistence, and deny encoder service. This issue is fixed in version 8.1.0.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
