PHP
CVE-2026-35179
MEDIUM
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
Primary rating from GitHub Advisory · only source for this CVE.
CVSS VectorGitHub Advisory
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
Lifecycle Timeline
2DescriptionGitHub Advisory
Summary
The SocialMediaPublisher plugin exposes a publishInstagram.json.php endpoint that acts as an unauthenticated proxy to the Facebook/Instagram Graph API. The endpoint accepts user-controlled parameters including an access token, container ID, and Instagram account ID, and passes them directly to the Graph API via InstagramUploader::publishMediaIfIsReady(). This allows any unauthenticated user to make arbitrary Graph API calls through the server, potentially using stolen tokens or abusing the platform's own credentials.
Details
At plugin/SocialMediaPublisher/publishInstagram.json.php:14, the endpoint passes request parameters directly to the Instagram Graph API without any authentication check:
InstagramUploader::publishMediaIfIsReady(
$_REQUEST['accessToken'],
$_REQUEST['containerId'],
$_REQUEST['instagramAccountId']
);There is no call to User::isLogged(), User::isAdmin(), or any other authorization check before processing the request.
In contrast, sibling endpoints in the same plugin enforce proper authorization:
uploadVideo.json.phprequiresUser::isLogged()refresh.json.phprequiresUser::isAdmin()
The endpoint was confirmed accessible on a live instance: it returns a Graph API error response, demonstrating that it processes the request and forwards it to Facebook's servers.
Proof of Concept
- Send a request to the endpoint without any authentication:
curl -s "https://your-avideo-instance.com/plugin/SocialMediaPublisher/publishInstagram.json.php" \
-d "accessToken=TEST_TOKEN&containerId=TEST_CONTAINER&instagramAccountId=TEST_ACCOUNT"- The server forwards the request to the Facebook Graph API. With invalid parameters, it returns a Graph API error confirming the endpoint is functional:
{
"error": {
"message": "Invalid OAuth access token.",
"type": "OAuthException",
"code": 190
}
}- With a valid access token (e.g., one leaked from AVI-027), an attacker could publish content to the platform's Instagram account:
curl -s "https://your-avideo-instance.com/plugin/SocialMediaPublisher/publishInstagram.json.php" \
-d "accessToken=LEAKED_ACCESS_TOKEN&containerId=REAL_CONTAINER_ID&instagramAccountId=REAL_ACCOUNT_ID"- Verify that sibling endpoints require authentication:
# Should require login
curl -s "https://your-avideo-instance.com/plugin/SocialMediaPublisher/uploadVideo.json.php"
# Should require admin
curl -s "https://your-avideo-instance.com/plugin/SocialMediaPublisher/refresh.json.php"Impact
The unauthenticated endpoint allows any attacker to use the AVideo server as a proxy for Instagram/Facebook Graph API calls. When combined with credentials leaked from AVI-027 (unauthenticated access to social media API credentials), an attacker can publish, modify, or delete content on the platform's Instagram account without any authentication to the AVideo instance. The server's IP address is used for the API calls, which could also be used to bypass rate limits or IP-based restrictions on the Graph API.
- CWE-862: Missing Authorization
- Severity: Medium
Recommended Fix
Add an admin authorization check at the top of plugin/SocialMediaPublisher/publishInstagram.json.php:10, consistent with the sibling refresh.json.php endpoint:
// plugin/SocialMediaPublisher/publishInstagram.json.php:10
if(!User::isAdmin()){
die(json_encode(['error'=>'Not authorized']));
}This restricts the endpoint to admin users only, matching the authorization level of refresh.json.php and preventing unauthenticated proxy abuse.
--- *Found by aisafe.io*
AnalysisAI
Unauthenticated proxy access in AVideo's SocialMediaPublisher plugin allows any user to make arbitrary Facebook/Instagram Graph API calls through the publishInstagram.json.php endpoint without authentication or authorization checks. By sending crafted requests with stolen or leaked access tokens, attackers can publish, modify, or delete content on the platform's Instagram account and potentially bypass rate limits using the server's IP address. CVSS 5.3 (medium integrity impact); no active exploitation confirmed but proof-of-concept is publicly available.
Technical ContextAI
The SocialMediaPublisher plugin in AVideo (pkg:composer/wwbn_avideo) contains an unauthenticated JSON endpoint that acts as an unprotected proxy to the Facebook/Instagram Graph API. The vulnerability stems from CWE-862 (Missing Authorization), where the publishInstagram.json.php endpoint passes user-supplied request parameters-accessToken, containerId, and instagramAccountId-directly to the InstagramUploader::publishMediaIfIsReady() function without invoking any authentication or authorization checks such as User::isLogged() or User::isAdmin(). In contrast, sibling endpoints in the same plugin (uploadVideo.json.php and refresh.json.php) properly enforce authorization requirements, indicating this is a configuration or implementation oversight rather than a design choice. The endpoint processes HTTP POST/GET requests and forwards them to Facebook's Graph API servers, effectively converting the AVideo instance into a relay for API calls.
RemediationAI
Patch the affected endpoint by adding authorization checks at the entry point of plugin/SocialMediaPublisher/publishInstagram.json.php (line 10) to enforce admin-only access, consistent with the refresh.json.php sibling endpoint. The vendor-recommended fix is to insert a check such as if(!User::isAdmin()){die(json_encode(['error'=>'Not authorized']));} before processing user-supplied parameters. Check the GitHub advisory at https://github.com/WWBN/AVideo/security/advisories/GHSA-x9w5-xccw-5h9w for the exact patched version number and upgrade instructions. As an interim workaround, disable or restrict network access to the SocialMediaPublisher plugin endpoints via web server configuration (e.g., deny requests to /plugin/SocialMediaPublisher/publishInstagram.json.php from untrusted IP ranges) if patching cannot be applied immediately. Verify that Instagram API credentials are not exposed through other endpoints (such as AVI-027) to prevent attackers from obtaining tokens to use with this endpoint.
sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not
(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear
ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C
Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au
Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c
Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows
The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1
NetAlertX (formerly PiAlert) versions 23.01.14 through 24.x before 24.10.12 allow unauthenticated command injection thro
The GiveWP - Donation Plugin and Fundraising Platform plugin for WordPress is vulnerable to PHP Object Injection in all
Same weakness CWE-862 – Missing Authorization
View allSame technique Authentication Bypass
View allShare
External POC / Exploit Code
Leaving vuln.today
GHSA-x9w5-xccw-5h9w