CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-25878

Open House at the Database: FroshPlatformAdminer Auth Bypass

Amit Schendel
Amit Schendel
Senior Security Researcher

Feb 10, 2026·5 min read·20 visits

Executive Summary (TL;DR)

The FroshPlatformAdminer plugin for Shopware (< 2.2.1) exposed the Adminer database management tool to unauthenticated users. The route was configured with `auth_required => false`, allowing anyone to access the database login UI. While database credentials were still required, this exposed critical infrastructure to brute-force attacks and potential Adminer-specific exploits.

A classic case of 'explicitly insecure configuration' found in the FroshPlatformAdminer plugin for Shopware. Developers explicitly disabled authentication checks on the primary Adminer route to make things 'easier', inadvertently exposing the entire database management interface to the public internet without a login prompt from the application.

The Hook: Convenience is the Enemy of Security

Adminer is the darling of PHP developers everywhere. It's a single-file database management tool that is lighter than phpMyAdmin and arguably cleaner. Naturally, in the ecosystem of Shopware (a Symfony-based e-commerce platform), someone built a plugin to integrate it directly into the admin panel. Enter FroshPlatformAdminer.

Here is the premise: You are a Shopware administrator. You want to tweak a row in the database without opening an SSH tunnel or firing up a desktop client. You install this plugin, click a tab, and boom—you are in Adminer. It uses an iframe or a proxy to render the tool inside your existing session.

But here is the catch. To make this integration seamless, the developers had to bypass the standard Shopware authentication middleware for the specific route serving Adminer. Why? Likely because Adminer manages its own sessions, or the iframe context made passing the Shopware session token tricky. Regardless of the intent, the result was akin to installing a high-security steel door on your house but leaving the cat flap unlocked—and making the cat flap the size of a garage door.

The Flaw: Explicitly Insecure

This wasn't a complex buffer overflow or a subtle race condition. This was a logic error born from configuration. In Symfony (and by extension, Shopware), routes are guarded by attributes. You tell the framework who is allowed to go where.

The developers of FroshPlatformAdminer explicitly told Shopware to ignore authentication for the Adminer route. They didn't just forget to lock the door; they unscrewed the lock and put it in a drawer.

> [!NOTE] > The Smoking Gun: The route definition explicitly included defaults: ['auth_required' => false].

When a request hit https://target.store/admin/adminer, the Shopware kernel looked at the route, saw the flag saying "No Auth Needed," and happily passed the request to the AdminerController. The controller assumed that if you made it this far, you must be trustworthy. It then immediately require'd the Adminer.php file, rendering the interface to the world.

The Code: Anatomy of the Bypass

Let's look at the code before the fix. This is from src/Controller/AdminerController.php. Note the Route attribute.

// VULNERABLE CODE (Pre-2.2.1)
#[Route(path: '/%shopware_administration.path_name%/adminer', 
        name: 'administration.frosh_adminer', 
        defaults: ['auth_required' => false, '_routeScope' => ['administration']], 
        methods: ['GET', 'POST'])]
public function index(): Response
{
    chdir(__DIR__ . '/../Adminer');
    unset($_POST['auth']);
    // The gate is wide open here
    require __DIR__ . '/../Adminer/Adminer.php';
    return new Response('');
}

There is zero logic inside index() to verify who the user is. It simply loads the Adminer script.

Now, let's look at the fix in commit c4dd6c3462af178b3a7d146d3c651c2c253e902b. The developers had to implement a "sidecar" session because they presumably couldn't use the main Shopware session easily within the Adminer context.

// PATCHED CODE (v2.2.1)
public function login(Request $request): JsonResponse
{
    // This method IS protected by standard Shopware auth
    // ... (checks context) ...
    
    // Set a manual PHP session flag
    $_SESSION['frosh_adminer_authenticated'] = true;
    // ...
}
 
public function index(): Response
{
    // Manually start the specific session
    session_cache_limiter('');
    session_name('adminer_sid');
    session_start();
 
    // The new gatekeeper
    if (empty($_SESSION['frosh_adminer_authenticated'])) {
        return new Response('Forbidden', Response::HTTP_FORBIDDEN);
    }
 
    chdir(__DIR__ . '/../Adminer');
    // ... load Adminer ...
}

They essentially built a custom checkpoint. You must first hit the login endpoint (which requires Shopware auth) to set a flag in a raw PHP session. Only then does the index method let you through.

The Exploit: Knocking on the Door

Exploiting this is trivially easy. It requires no special tools, no packet manipulation, and no complex payload construction. It is a GET request.

Step 1: Reconnaissance First, we need to know where the administration panel is. By default, Shopware uses /admin, but security-conscious admins often change this. However, if we assume the default:

curl -I https://victim-shopware.com/admin/adminer

Step 2: Verification If the server responds with HTTP/1.1 200 OK and headers indicating a PHP session or Adminer content, we win. We open that URL in a browser.

Step 3: Post-Access Attacks "But wait," you say, "You still need the database password!" Correct. This is not unauthenticated RCE yet. However, having access to the Adminer login interface allows for:

  • Brute Force: You can hammer the database login directly, bypassing any rate limiting that might exist on the main Shopware login form.
  • Server-Side Request Forgery (SSRF): Adminer allows you to connect to any database server. An attacker can tell the victim's server to connect to an attacker-controlled MySQL server. If the version of Adminer is old or misconfigured, this can be used to read local files (e.g., LOAD DATA LOCAL INFILE) or scan internal ports.
  • Information Disclosure: The specific version of Adminer is revealed, potentially mapping to known CVEs in Adminer itself.

The Impact: Why You Should Care

While CVSS gives this a 6.9 (Medium), the real-world risk depends heavily on your database configuration.

If your database user has a weak password, this is a Critical vulnerability. It leads to full database compromise, customer data theft, and potential RCE (via SELECT ... INTO OUTFILE if file permissions allow).

If your database is restricted to localhost and you have strong passwords, the risk is lower—primarily Denial of Service (resource exhaustion on the login form) or SSRF if you allow outbound connections from the web server.

The primary failure here is the violation of defense-in-depth. The application layer explicitly opted out of security, leaving the database layer as the only line of defense.

Official Patches

FriendsOfShopwareGitHub Commit fixing the issue

Fix Analysis (1)

Technical Appendix

CVSS Score
6.9/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N

Affected Systems

Shopware 6 (running FroshPlatformAdminer)FroshPlatformAdminer < 2.2.1

Affected Versions Detail

Product
Affected Versions
Fixed Version
FroshPlatformAdminer
FriendsOfShopware
< 2.2.12.2.1
AttributeDetail
CWECWE-306 (Missing Authentication)
CVSS v4.06.9 (Medium)
Attack VectorNetwork (AV:N)
Privileges RequiredNone (PR:N)
User InteractionNone (UI:N)
Exploit ComplexityLow (AC:L)

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1133External Remote Services
Persistence
CWE-306
Missing Authentication for Critical Function

The software does not perform any authentication for functionality that requires a provable user identity or consumes a significant amount of resources.

Known Exploits & Detection

N/AThe vulnerability is a direct configuration error; exploitation is achieved by simply browsing to the URL.

Vulnerability Timeline

Patch committed to GitHub
2026-02-07
Version 2.2.1 Released
2026-02-07
GHSA Advisory Published
2026-02-09
CVE-2026-25878 Published
2026-02-09

References & Sources

  • [1]GitHub Security Advisory
  • [2]Release 2.2.1

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 9 hours ago•CVE-2026-11748
6.9

CVE-2026-11748: Unauthenticated LDAP Injection in Central Dogma Server Authentication

An LDAP injection vulnerability exists in the centraldogma-server-auth-shiro module of LY Corporation Central Dogma before version 0.84.0. The search logic dynamically constructs LDAP search filters by interpolating user-provided usernames without escaping RFC 4515 metacharacters. Unauthenticated remote attackers can leverage this flaw to bypass authentication, enumerate directory hierarchies, and access unauthorized resources.

Alon Barad
Alon Barad
6 views•6 min read
•about 10 hours ago•CVE-2026-11746
9.4

CVE-2026-11746: Use of Hard-coded ZooKeeper Replication Secret 'ch4n63m3' in Central Dogma Server

CVE-2026-11746 is a critical vulnerability in Central Dogma Server prior to version 0.84.0, where an embedded ZooKeeper replication secret silently falls back to a publicly known, hard-coded default string ('ch4n63m3'). Remote attackers with access to the replication network can authenticate as legitimate cluster peers, potentially leading to unauthorized data exposure, state manipulation, or complete cluster takeover.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 11 hours ago•CVE-2026-56665
4.2

CVE-2026-56665: Logical Validation Bypass in ZITADEL External JWT Identity Provider

A logical verification flaw in ZITADEL's external JWT Identity Provider validation allows attackers to bypass session expiration checks. If an incoming JWT lacks the 'exp' claim, the system skips validation entirely, creating an indefinitely valid session. This issue has been addressed in versions 3.4.12 and 4.15.2.

Alon Barad
Alon Barad
3 views•7 min read
•about 12 hours ago•CVE-2026-59149
6.5

CVE-2026-59149: Sibling Directory Path Traversal in Mockoon Backend Server

CVE-2026-59149 identifies a directory traversal vulnerability in `@mockoon/commons-server`, the backend mock-server library powering the Mockoon application. The flaw occurs in the path containment validation logic used during raw file response generation. An unauthenticated attacker can exploit this weakness to retrieve arbitrary files from sibling directories sharing a common prefix with the designated static base directory.

Amit Schendel
Amit Schendel
5 views•5 min read
•about 13 hours ago•CVE-2026-59148
8.8

CVE-2026-59148: Unauthenticated Administrative API and CORS Misconfiguration in Mockoon

An in-depth analysis of CVE-2026-59148, a high-severity flaw in Mockoon where unauthenticated administrative endpoints and a wildcard Cross-Origin Resource Sharing (CORS) policy allow remote execution, state poisoning, and credential theft.

Alon Barad
Alon Barad
4 views•6 min read
•about 14 hours ago•CVE-2026-56666
4.8

CVE-2026-56666: Account Takeover via Improper Email Verification in ZITADEL Federated Identity Handler

An improper authentication vulnerability (CWE-287) in ZITADEL's external identity provider handler before version 4.15.3 allows remote attackers to perform complete account takeover. When auto-linking by email is enabled, ZITADEL verifies that the local target account has a verified email address but fails to verify if the external provider confirmed ownership of that same email. Attackers can exploit this by registering an unverified account with a victim's email address on a permissive external provider, leading to unauthorized account binding and persistent access.

Amit Schendel
Amit Schendel
2 views•7 min read