{"id":"CVE-2026-49205","title":"phpMyFAQ: Missing userHasPermission() in 4 API write endpoints (CVE-2026-24421 Incomplete Fix)","summary":"phpMyFAQ: Missing userHasPermission() in 4 API write endpoints (CVE-2026-24421 Incomplete Fix)","severity":"medium","cvss":6.5,"cwe":["CWE-862"],"vendor":"thorsten","product":"thorsten/phpmyfaq","ecosystem":"composer","affected":["thorsten/phpmyfaq < 4.1.4","phpmyfaq/phpmyfaq < 4.1.4"],"patched":["thorsten/phpmyfaq 4.1.4","phpmyfaq/phpmyfaq 4.1.4"],"published":"2026-06-23","updated":"2026-06-23","source":"GHSA","sourceUrl":"https://github.com/advisories/GHSA-8c6h-7g6x-m5x4","references":[{"url":"https://github.com/thorsten/phpMyFAQ/security/advisories/GHSA-8c6h-7g6x-m5x4"},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-49205"},{"url":"https://github.com/thorsten/phpMyFAQ/commit/d5c195b1ecf5dc30fb825d7eb50d22481c24cb07"},{"url":"https://github.com/advisories/GHSA-8c6h-7g6x-m5x4"}],"tags":["ghsa","composer"],"epss":0.00385,"epssPercentile":0.32278,"ingestedAt":"2026-06-26T16:43:14.594Z","slug":"CVE-2026-49205","body":"## Overview\n\nMissing Authorization in API CategoryController —  CVE-2026-24421 fixed BackupController by adding userHasPermission(PermissionType::BACKUP). The same fix was NOT applied to 4 other write endpoints in the public API.  All 4 only call hasValidToken() (shared API key) but never call userHasPermission(), allowing any API token holder to perform admin operations regardless of their user permissions.\n\n## Summary\n\nCVE-2026-24421 fixed BackupController by adding: $this->userHasPermission(PermissionType::BACKUP);\n\nThe same fix was NOT applied to 4 other write endpoints in the public API. All 4 only call $this->hasValidToken() — which checks a shared API key header, NOT the individual user's role permissions.\n\n## Affected Endpoints\n\n1. src/phpMyFAQ/Controller/Api/CategoryController.php → create()  POST /api/v4.0/category\nMissing: userHasPermission(PermissionType::CATEGORY_ADD)\nAny API token holder can create categories regardless of user role.\n\n2. src/phpMyFAQ/Controller/Api/FaqController.php → create()  POST /api/v4.0/faq\n   Missing: userHasPermission(PermissionType::FAQ_ADD)\n   Any API token holder can create FAQ entries regardless of user role.\n\n3. src/phpMyFAQ/Controller/Api/FaqController.php → update()  PUT /api/v4.0/faq\n   Missing: userHasPermission(PermissionType::FAQ_EDIT)\n   Any API token holder can update any FAQ entry regardless of user role.\n\n4. src/phpMyFAQ/Controller/Api/QuestionController.php → create() POST /api/v4.0/question\n   Missing: permission check\n   Any API token holder can create questions regardless of user role.\n\n## Root Cause\n\nAll 4 methods only call:\n    $this->hasValidToken();   ← shared API key, not per-user\n\nThe fixed BackupController correctly calls:\n    $this->userHasPermission(PermissionType::BACKUP);  \n\nPermissionType::CATEGORY_ADD, FAQ_ADD, FAQ_EDIT all exist in src/phpMyFAQ/Enums/PermissionType.php — they just are not being used.\n\n## Fix\n\nAdd userHasPermission() before the logic in each method:\n\n    // CategoryController.create()\n    $this->userHasPermission(PermissionType::CATEGORY_ADD);\n\n    // FaqController.create()\n    $this->userHasPermission(PermissionType::FAQ_ADD);\n\n    // FaqController.update()\n    $this->userHasPermission(PermissionType::FAQ_EDIT);\n\n## Reporter\n\nCONTACT\nSanthoshini Ganta\nGithub:@santhoshinipayload\nEmail: santhoshinive75@gmail.com\nLinkedIn: http://linkedin.com/in/santhoshini-g-1440621ba\n\n## Affected packages\n\n- `thorsten/phpmyfaq < 4.1.4`\n- `phpmyfaq/phpmyfaq < 4.1.4`\n\n## Remediation\n\nUpgrade to a patched release:\n\n- `thorsten/phpmyfaq 4.1.4`\n- `phpmyfaq/phpmyfaq 4.1.4`","depth":"sunlit","depthScore":36,"depthScoreParts":{"impact":35.8,"likelihood":0.1,"exploitation":0,"ransomware":0},"changes":[]}