GHSA-rf63-6vwm-wv8p: AVideo-Encoder: unauthenticated command execution through streamer login trust
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 playlistsid 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.
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
AVideo-Encoderto a version that resolves this vulnerability.Fixed in 8.1.0
Event History
Frequently Asked Questions
Does the streamer allowlist prevent exploitation of this issue?
No. The affected path does not call Streamer::isURLAllowed, so exploitation works regardless of the operator's streamer allowlist.
What does an attacker need to reach the command-execution path?
The attacker must be able to send requests to the live-streaming endpoint and host an HTTP service that the encoder can reach. Legitimate streamer credentials are not required; the supplied playlists_id and APISecret only need to be nonempty.
What privileges do injected commands receive?
Commands execute as the web-server user. The advisory states this can expose database and stored streamer credentials and enable compromise of the upstream platform using those credentials.
Which versions are affected?
Versions prior to 8.1.0 are affected. Version 8.1.0 is identified by the provided release reference.