{"id":"GHSA-4q27-4rrq-fx95","summary":"AVideo: CSRF on Player Skin Configuration via admin/playerUpdate.json.php","details":"**Severity:** Medium\n**CWE:** CWE-352 (Cross-Site Request Forgery)\n\n## Summary\n\nThe player skin configuration endpoint at `admin/playerUpdate.json.php` does not validate CSRF tokens. The `plugins` table is explicitly excluded from the ORM's domain-based security check via `ignoreTableSecurityCheck()`, removing the only other layer of defense. Combined with `SameSite=None` cookies, a cross-origin POST can modify the video player appearance on the entire platform.\n\n## Details\n\nIn `admin/playerUpdate.json.php` at line 17, the player skin is set directly from POST data:\n\n```php\n$pluginDO-\u003eskin = $_POST['skin'];\n```\n\nNo CSRF token is validated anywhere in the endpoint. Normally, the ORM layer performs a Referer/Origin domain check as a secondary defense against cross-origin writes. However, the `plugins` table is registered in `ignoreTableSecurityCheck()`, which explicitly bypasses this ORM-level protection for plugin configuration.\n\nAVideo's session cookies are configured with `SameSite=None`, meaning the admin's authenticated session cookie is automatically included in cross-origin POST requests from any website.\n\nAn attacker can craft a page that, when visited by an authenticated admin, silently changes the player skin to any value, including potentially invalid or disruptive configurations.\n\n## Proof of Concept\n\nHost the following HTML on an attacker-controlled domain:\n\n```html\n\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n\u003chead\u003e\u003ctitle\u003eCSRF Player Skin\u003c/title\u003e\u003c/head\u003e\n\u003cbody\u003e\n\u003ch1\u003eLoading video...\u003c/h1\u003e\n\u003cform id=\"csrf\" method=\"POST\"\n      action=\"https://your-avideo-instance.com/admin/playerUpdate.json.php\"\u003e\n  \u003cinput type=\"hidden\" name=\"skin\" value=\"minimalist\" /\u003e\n\u003c/form\u003e\n\u003cscript\u003e\n  document.getElementById(\"csrf\").submit();\n\u003c/script\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n```\n\nWhen an authenticated admin visits this page, the platform's player skin is changed without their knowledge.\n\n## Impact\n\n- Platform-wide player appearance modification without admin consent\n- Potential disruption of video playback if an invalid skin value is set\n- The ORM security bypass via `ignoreTableSecurityCheck()` means there is no fallback protection\n- Can be used as part of a broader defacement or social engineering attack\n\n## Recommended Fix\n\nAdd CSRF token validation at `admin/playerUpdate.json.php`, before processing POST data:\n\n```php\n// admin/playerUpdate.json.php (before line 17)\nif (!isGlobalTokenValid()) {\n    die('{\"error\":\"Invalid CSRF token\"}');\n}\n```\n\n---\n*Found by [aisafe.io](https://aisafe.io)*","aliases":["CVE-2026-35181"],"modified":"2026-04-06T23:49:41.477759Z","published":"2026-04-03T23:43:23Z","database_specific":{"github_reviewed":true,"github_reviewed_at":"2026-04-03T23:43:23Z","nvd_published_at":"2026-04-06T20:16:26Z","cwe_ids":["CWE-352"],"severity":"MODERATE"},"references":[{"type":"WEB","url":"https://github.com/WWBN/AVideo/security/advisories/GHSA-4q27-4rrq-fx95"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-35181"},{"type":"PACKAGE","url":"https://github.com/WWBN/AVideo"}],"affected":[{"package":{"name":"wwbn/avideo","ecosystem":"Packagist","purl":"pkg:composer/wwbn/avideo"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"26.0"}]}],"versions":["10.4","10.8","11","11.1","11.1.1","11.5","11.6","12.4","14.3","14.3.1","14.4","18.0","21.0","22.0","24.0","25.0","26.0"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/04/GHSA-4q27-4rrq-fx95/GHSA-4q27-4rrq-fx95.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:N"}]}