CVE-2026-55825

lowpriority · track · 0EPSS 0.003 · 21 %ileDEEUUS
grimoire priorityP3 · Track
Exploitable?
—
no known exploitation
Likely / severe?
0.30% (21st) EPSS
CVSS 3.1 · low
Is it mine?
5 products
Check your exposure
Who says so?
4 sources
cnnvd · enisa_euvd · cert_bund · osv

EPSS · scored 2026-10-23

Contao is an Open Source CMS. In versions 5.7.0 through 5.7.6, an authenticated backend user who can access one job can request an attachment identifier containing ../ segments and make the job attachment download endpoint read a file from another job directory inside var/job-attachments. The controller authorizes only the jobUuid route parameter. The later attachment lookup joins that authorized job UUID with the attacker-controlled identifier, then passes the combined path to the virtual filesystem. VirtualFilesystem::resolve() canonicalizes the whole path and only rejects paths that escape the filesystem mount, so authorized-job/../victim-job/debug_log.csv becomes victim-job/debug_log.csv. This is a cross-job authorization bypass for known job attachment paths. It is not a practical brute-force against unknown jobs because job directories are UUID v4 values.

01

cvss

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

3.1
010

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

v3.13.1lowCVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:N/A:Nsecondary · ENISA EU
v3.13.1lowCVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:N/A:Nsecondary · security-advisories@github.comexploitability 1.6 · impact 1.4
v3.13.1lowCVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:N/A:Nsecondary · OSV
v3.12.9lowCVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:N/A:N/E:Usecondary · CVSS-BT (t0sche)
02

ssvc

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

Trackcoordinatorcisa_ssvcUS
03

weaknesses

The CWE weakness classes this flaw belongs to.

04

affected products (5)

Products and version ranges known to be affected.

05

advisories (2)

Vendor and ecosystem advisories describing this.

  • WID-SEC-W-2026-1921Contao: Mehrere Schwachstellen ermöglichen Offenlegung von InformationenDeutsch2026-06-14csaf · cert_bundDE

    Ein entfernter, authentisierter Angreifer kann mehrere Schwachstellen in Contao ausnutzen, um Informationen offenzulegen.

  • GHSA-grm4-wm43-9jh5Contao: Possible path traversal in job download URIs2026-08-06ghsa · osvUS

    ## Summary An authenticated backend user who can access one job can request an attachment identifier containing `../` segments and make the job attachment download endpoint read a file from another job directory inside `var/job-attachments`. The controller authorizes only the `jobUuid` route parameter. The later attachment lookup joins that authorized job UUID with the attacker-controlled `identifier`, then passes the combined path to the virtual filesystem. `VirtualFilesystem::resolve()` canonicalizes the whole path and only rejects paths that escape the filesystem mount, so `authorized-job/../victim-job/debug_log.csv` becomes `victim-job/debug_log.csv`. This is a cross-job authorization bypass for known job attachment paths. It is not a practical brute-force against unknown jobs because job directories are UUID v4 values. ## Root Cause `JobsController::downloadJobAttachment()` checks access to the route `jobUuid` before loading the attachment: ```php $job = $this->jobs->getByUuid($jobUuid); if (!$job || !$this->jobs->hasAccess($job)) { throw $this->createNotFoundException(); } $attachment = $this->jobs->getAttachment($jobUuid, $identifier); ``` `Jobs::getAttachment()` then resolves a path built from the authorized job UUID and the attacker-controlled identifier: ```php $fileItem = $this->jobAttachmentsStorage->get($this->getAttachmentIdentifier($job, $identifier)); ``` ```php return $job->getUuid().'/'.$identifier; ``` `VirtualFilesystem::resolve()` canonicalizes the combined path. It rejects absolute paths and paths that start with `..`, but it does not preserve the authorized job directory as a boundary: ```php $path = Path::canonicalize($location); if (str_starts_with($path, '..')) { throw new \OutOfBoundsException(...); } return Path::join($this->prefix, $path); ``` Therefore: ```text <authorized-job>/../<victim-job>/debug_log.csv ``` canonicalizes to: ```text <victim-job>/debug_log.csv ``` which remains inside the `job-attachments` filesystem mount and is accepted. ## Recommended Fix Treat the attachment identifier as a filename, not a path: - Reject `/`, `\`, NUL, and dot-segment components in `identifier`. - Add a route requirement that prevents slashes in `{identifier}` if nested attachment paths are not intended. - After resolving, assert the canonical relative path starts with `<authorized-job-uuid>/` before returning a `FilesystemItem`. - Apply the same identifier validation in `Jobs::addAttachment()` so future producers/extensions cannot write outside the owning job directory. ### Impact A low-privileged backend user can read another job's attachment if they know or obtain the target job UUID and attachment filename. Built-in crawler jobs attach CSV logs such as `debug_log.csv`, `broken-link-checker_log.csv`, and `search-index_log.csv`, which can contain crawled URLs, referring URLs, tags, and error messages.

06

also known as (3)

Other names and identifiers for this entity.

07

sources

Which sources assert this record, and when.

published 2026-07-31modified 2026-08-01
08

references (3)

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