Severity by source
AV:N/AC:L/PR:H/UI:R/S:U/C:N/I:L/A:L
Admin session required (PR:H), victim must navigate to attacker page (UI:R); backup is unreadable cross-origin so C:N; integrity and availability impacts are limited to htaccess overwrite and disk pressure.
Primary rating from GitHub Advisory.
CVSS VectorGitHub Advisory
Lifecycle Timeline
3DescriptionGitHub Advisory
Summary
Several administrative operations in Admidio's preferences module (database backup, test email, htaccess generation) fire via GET requests with no CSRF token validation. Because SameSite=Lax cookies travel with top-level GET navigations, an attacker forces an authenticated admin to trigger these actions from a malicious page.
Details
In modules/preferences.php, the backup, test_email, and htaccess modes accept GET parameters with no CSRF token check:
// modules/preferences.php - backup mode
case 'backup':
// Creates full database dump and serves as download
// No CSRF token validation
$backupFile = $gDb->backup();
// ... sends file to client
break;
case 'test_email':
// Sends test email from the server
// No CSRF token validation
break;
case 'htaccess':
// Writes .htaccess file to disk
// No CSRF token validation
break;The save mode in the same file validates CSRF via getFormObject(), confirming the developers intended CSRF protection but did not apply it to these other modes.
Because these are GET requests, SameSite=Lax browsers include session cookies on top-level cross-origin navigations, making CSRF exploitation trivial.
Proof of Concept
Simplified attacker page (csrf.html hosted on attacker origin):
<html>
<body>
<h1>Loading...</h1>
<!-- Trigger backup creation on victim's browser -->
<script>window.location = 'https://target-admidio.example.com/adm_program/modules/preferences.php?mode=backup';</script>
</body>
</html>When an administrator visits this page, the browser navigates to the Admidio backup URL with full session cookies. The server generates a database dump and serves it as a download to the victim's browser. Note: the backup downloads to the victim's machine, not to the attacker. The attacker cannot read the response cross-origin.
For htaccess mode, the CSRF overwrites the .htaccess file on the server, disrupting the application. For test_email mode, it triggers email sends from the server, which an attacker can abuse for spam or to probe internal email infrastructure.
Impact
An attacker tricks an Admidio administrator into visiting a malicious page that triggers state-changing operations on the server:
- Backup creation: forces the server to generate a full database dump. The backup downloads to the victim's browser, not to the attacker. However, repeated backup triggers can cause disk I/O and storage pressure on the server.
- htaccess modification: overwrites the server's
.htaccessfile, breaking URL routing or disabling security headers. - Test email: fires email sends from the server, usable as a spam relay or to probe internal mail configuration.
The core issue is that state-changing operations run via unprotected GET requests. The victim only needs to visit a single attacker-controlled page while logged in.
Recommended Fix
- Change
backup,test_email, andhtaccessoperations to require POST requests. - Add CSRF token validation using the existing
getFormObject()mechanism. - As defense in depth, set
SameSite=Stricton session cookies or add a confirmation step for destructive operations like database backup.
--- *Found by aisafe.io*
AnalysisAI
CSRF in Admidio's preferences module (versions ≤ 5.0.8) enables a remote attacker to trick an authenticated administrator into triggering sensitive server-side operations - database backup generation, .htaccess file overwriting, and test email dispatch - by luring them to a single malicious webpage. These state-changing operations are handled via unprotected GET requests in modules/preferences.php, and SameSite=Lax browser cookie behavior allows session cookies to travel on top-level cross-origin navigations, making exploitation trivial with a JavaScript redirect. A working proof-of-concept is published in the GitHub security advisory; there is no CISA KEV entry and EPSS stands at 0.01%, consistent with opportunistic rather than mass exploitation.
Technical ContextAI
Admidio is a PHP-based open-source community management application distributed via Composer (pkg:composer/admidio_admidio). The vulnerability (CWE-352: Cross-Site Request Forgery) resides in modules/preferences.php, which dispatches admin actions via a GET mode parameter. The backup, test_email, and htaccess mode branches perform state-changing operations - generating a full database dump, sending email from the server, and writing the .htaccess file to disk - without validating any CSRF token. The same file's save mode does invoke getFormObject() for CSRF validation, confirming the protection mechanism existed but was selectively omitted. SameSite=Lax is the modern browser default and explicitly permits cookies on top-level navigations (window.location redirects, link clicks), so no SameSite bypass is needed. The affected versions are all Admidio releases up to and including 5.0.8.
RemediationAI
Upgrade to Admidio 5.0.9, the vendor-released patch confirmed by the GitHub release at https://github.com/Admidio/admidio/releases/tag/v5.0.9 and the security advisory at https://github.com/Admidio/admidio/security/advisories/GHSA-rw74-vc9h-534j. If immediate upgrade is not feasible, set the session cookie SameSite attribute to Strict as a compensating control - note this may break SSO or cross-site navigation flows that the application relies on, so test before deploying. Additionally, restrict access to the Admidio preferences module (adm_program/modules/preferences.php) at the web server or network perimeter level to known administrator IP ranges; this eliminates the cross-origin navigation vector entirely but may impair remote administration. Avoid relying on security-through-obscurity measures such as renaming the module path, as these are trivially defeated.
In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it
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
The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by
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
Same weakness CWE-352 – Cross-Site Request Forgery (CSRF)
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-28278
GHSA-rw74-vc9h-534j