CVE-2026-107850
mediumpriority · track · 0OT risk · elevatedEPSS 0.002 · 9 %ileDEUSEPSS · scored 2026-10-23
Contao is an Open Source CMS. From version 5.7.1 until 5.7.12, core-bundle/config/services.yaml registers the preview access voter as Contao\CoreBundle\Security\Voter\DataContainer\PreviewAccessVoter although the shipped class is PreviewVoter. Symfony therefore omits voter autoconfiguration and removes the private service, so PreviewVoter::hasAccess() never enforces ownership. A non-admin backend user with the preview_link module can list every tl_preview_link record, obtain signed share URLs created by other users, and use them to view unpublished pages with showUnpublished despite lacking page permission. The advisory does not establish editing or deletion of foreign links. This issue is fixed in version 5.7.12.
cvss
Technical severity, 0–10. One row per scoring source.
base score 0–10 · higher = more severe · hover a vector to decode
ssvc
A stakeholder decision — act, attend, or track — from exploitation and impact.
weaknesses
The CWE weakness classes this flaw belongs to.
affected products (5)
Products and version ranges known to be affected.
advisories (2)
Vendor and ecosystem advisories describing this.
- WID-SEC-W-2026-2999Contao: Mehrere SchwachstellenDeutsch2026-08-24csaf · cert_bundDE
Ein Angreifer kann mehrere Schwachstellen in Contao ausnutzen, um Sicherheitsmaßnahmen zu umgehen, Berechtigungen zu erweitern und möglicherweise Administratorrechte zu erlangen, Cross-Site-Scripting-Angriffe durchzuführen, sensible Informationen offenzulegen und Daten zu manipulieren.
- GHSA-q6wp-fr43-gm9vContao: Improper access control in the preview links module2026-10-09ghsa · osvUS
`core-bundle/config/services.yaml` registers the preview access voter with the class `Contao\CoreBundle\Security\Voter\DataContainer\PreviewAccessVoter`, but the class shipped on disk is named `PreviewVoter`. Symfony resolves the class with `getReflectionClass($class, false)`, gets `null`, silently skips the interface based autoconfiguration that would have tagged it as a voter, and the now untagged private service is removed when the container is compiled. The application boots without a warning, and the ownership rule in `PreviewVoter::hasAccess()` is never executed. `tl_preview_link` has no compensating SQL filter on `createdBy`, so any non administrator back end user whose group holds the `preview_link` module reads every preview link on the installation and lifts the already signed share URLs straight out of the list. Following one grants front end preview of the target page, with `showUnpublished` and with no page permission check, to anyone at all. ### Impact A non administrator back end user reads every preview link on the installation, including links created by administrators, and lifts the already signed share URLs out of the list. Following one grants front end preview of the target page with `showUnpublished` and with no page permission check at all, so unpublished or embargoed content becomes readable by a user who has no rights on those pages, and by anyone that user forwards the URL to. **Honesty caveat, stated because it bounds the severity.** `UpdateAction` on a record owned by someone else was denied in our lab by `DcaPermissionVoter`, so we do not claim that a foreign preview link can be edited or deleted.
sources
Which sources assert this record, and when.
references (3) nvd
External citations — patches, advisories, analysis.
Attackers weaponise vulnerabilities like this against internet-exposed services. See what is exposed on your perimeter with a free passive scan.
Free scan