GitHub Advisoryadvisory · Packagist

GHSA-7fh7-8xqm-3g88 Admidio allows Unauthenticated Access to Role-Restricted documents via neutralized .htaccess

HIGH Published 2026-03-31 Modified 2026-03-31 Official page ↗
Aliases
CVE-2026-34381
Ecosystem
Packagist
Packages
admidio/admidio
Severity
High
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Weaknesses
CWE-284
Reviewed
2026-03-31

Affected packages

• Packagist admidio/admidio: >= 5.0.0, < 5.0.8 → fixed in 5.0.8

Description

Summary Admidio relies on `adm_my_files/.htaccess` to deny direct HTTP access to uploaded documents. The Docker image ships with `AllowOverride None` in the Apache configuration, which causes Apache to silently ignore all `.htaccess` files. As a result, any file uploaded to the documents module regardless of the _role-based_ permissions configured in the UI, is directly accessible over HTTP without authentication by anyone who knows the file path. The file path is disclosed in the upload response JSON. --- Root Cause File 1: Intended protection (ignored): `adm_my_files/.htaccess` ```apache Require all denied ``` File 2: Apache config that neutralizes it: • Command in order to search in Docker container: `docker exec admidio-sec-app cat /etc/apache2/apache2.conf` `/etc/apache2/apache2.conf` (Docker image) ```apache AllowOverride None ``` `AllowOverride None` instructs Apache to skip `.htaccess` processing entirely, the deny rule never executes. The upload directory is inside the web root at `/opt/app-root/src/adm_my_files/` and returns HTTP 200 for direct requests. File 3: Upload response leaks the direct URL: `system/file_upload.php`, upload response JSON: ```json { "files": [{ "name": "sensitive_poc.txt", "url": "http://TARGET/adm_my_files/documents_research/TEST-SENSITIVE/sensitive_poc.txt" }] } ``` Verified PoC Step 1: Admin creates a restricted folder (visible only to Administrator role): > `modules/documents-files.php` → permissions set to role `Administrator` only. Step 2: Admin uploads a file to the restricted folder. > Upload response returns: ``` http://TARGET/adm_my_files/documents_research/TEST-SENSITIVE/sensitive_poc.txt ``` Step 3: Unauthenticated request retrieves the file: ```bash curl -X GET 'http://TARGET/adm_my_files/documents_research/TEST-SENSITIVE/sensitive_poc.txt' Response: full file contents — no authentication required ``` Step 4: Confirm folder is role-restricted: ```sql SELECT fil_name, fol_name, fol_public FROM adm_files JOIN adm_folders ON fil_fol_id = fol_id ORDER BY fil_id DESC LIMIT 5; -- fol_public = 0, role restricted — yet file is publicly accessible ``` --- Impact • Any document uploaded to Admidio including files restricted to specific roles is publicly accessible via direct HTTP request with no authentication required • Role-based access control on the documents module is completely bypassed at the filesystem level • Sensitive organizational documents (contracts, member data, financial records) are exposed to anyone who can guess or construct the file path • The upload API response discloses the direct URL to the uploader, making path enumeration trivial Recommended Fix Option 1 (preferred): Enable AllowOverride in Apache config: ```apache AllowOverride All ``` Option 2: Move uploads outside the web root: Store uploaded files in a directory outside `DOCUMENT_ROOT` and serve them exclusively through Admidio's download handler (`modules/documents-files.php?mode=download`), which enforces role checks before serving the file. Option 3: Apache-level explicit deny (does not require .htaccess): ```apache Require all denied ``` > The most robust long-term fix is Option 2 — moving uploads outside the web root eliminates the dependency on Apache configuration correctness entirely. Reported by: Juan Felipe Oz @JF0x0r > LinkedIn

Related

Alias · CVE (1)

  • CVE-2026-34381 Admidio is an open-source user management solution. vulnerability

Weakness · CWE (1)

  • CWE-284 Improper Access Control weakness

References