Phantom Bug: The Curious Case of CVE-2022-50807
Jan 15, 2026·4 min read
Executive Summary (TL;DR)
Researcher threw SQLi payloads at a CMS. The CMS crashed and showed a stack trace because Debug Mode was on. Researcher called it XPath Injection. NVD called it Critical. The CNA eventually realized it was just a configuration error and rejected it.
A deep dive into a 'vulnerability' that was assigned, feared, and ultimately rejected. Originally classified as a Critical XPath Injection in Concrete CMS, further analysis revealed it to be a simple Full Path Disclosure triggered only when an administrator leaves Debug Mode enabled.
The Hook: The Vulnerability That Wasn't
CVE-2022-50807 is a ghost story in the vulnerability database. Originally flagged as a critical XPath Injection with a terrifying 9.8 CVSS score by automated scanners, it sent admins scrambling. But if you look closer, the ghost fades away. On January 14, 2026, the CVE was officially REJECTED and withdrawn by the CNA.
Why? Because sometimes a bug isn't a bug—it's a feature configured poorly. This report dives into what was claimed (XPath Injection), what was actually happening (Uncaught Exception leading to Path Disclosure), and why "Debug Mode" in production is the real vulnerability here.
It is a classic case of a researcher throwing payloads at a wall and mistaking the resulting loud noise for a successful breach. The community panic was real, but the threat was largely imaginary unless you were already engaging in insecure administrative practices.
The Flaw: Identity Crisis
The researcher claimed this was CWE-643: Improper Neutralization of Data within XPath Expressions. The proof? A payload containing ' or 4591=4591-- triggered an error. To the untrained eye, if you inject SQL/XPath syntax and the server barfs, you've won. You assume the query engine choked on your logic.
However, the stack trace tells the real story. The error didn't happen in an XML parser or an XPath query engine. It happened in Stash\Driver\FileSystem\NativeEncoder.php. The application was trying to translate the 404 page caused by the garbage URL. To do this, it hashed the input to check the filesystem cache.
The input caused the file inclusion logic to fail, raising a PHP Warning which was converted to an Exception. The "Flaw" wasn't code execution or query manipulation; it was the application vomiting its internal state because it was told to do so via display_errors. It is akin to shouting at a librarian and claiming you hacked the library when they get flustered and drop a book.
The Code: Anatomy of a Stack Trace
Let's look at the "smoking gun"—the stack trace provided in the exploit report. The failure occurs here:
Whoops\Exception\ErrorException: include(): Failed opening
'C:/xampp/.../cache/expensive/0fea.../fee8...php'Concrete CMS (and its underlying Laminas framework) uses a caching system called Stash. When the URL path /ccm50539478' or 4591=4591-- is processed, the router doesn't find a page, so it invokes the "Page Not Found" controller. This controller attempts to translate messages using t().
The translation adapter checks the cache. The cache driver takes our malicious string, mangles it into a file path hash, and tries to include() it. Because the generated path is garbage or the file doesn't exist in a way the driver expects, PHP throws a wobbly. Because the site is running the Whoops error handler (Development Mode), it helpfully prints: C:/xampp/htdocs/pwnedhost/....
This confirms Full Path Disclosure (FPD), but completely disproves the exotic XPath Injection theory. There is no XML being parsed here; just a file system driver crying for help.
The Exploit: Script Kiddie Magic
The exploit provided by the researcher is a masterclass in "copy-paste payloads until something breaks."
The Attack Vector:
GET /concrete-cms-9.1.3/index.php/ccm50539478' or 4591=4591-- /assets/localization/moment/js HTTP/1.1
Host: target.comThe Logic:
- The attacker sends a request with characters that look like a query bypass (
' or 1=1). - The server tries to process this route.
- The server fails to find the route, tries to localize the 404 error.
- The caching mechanism crashes on the special characters.
- If and only if the server is in Debug Mode, it returns the stack trace.
If you run this against a production server (Debug Off), you get a standard 404 or 500 error page. No data leaked. No shell. No XPath injection. Just a broken link.
The Fix: The 'Off' Switch
Since this CVE was rejected, there is no official "patch" code because the software presumably works as intended (it caches things, and it errors when things break). The vulnerability is purely configuration-based.
The Remediation:
Open your php.ini and set display_errors = Off. In the Concrete CMS dashboard, ensure the "Debug Level" is set to "Hide errors".
The Lesson: If your application screams its internal file structure to the world every time someone makes a typo in the URL, you don't need a code patch—you need a better sysadmin. Security through obscurity is debatable, but "Security by printing your directory structure to the browser" is objectively terrible.
Technical Appendix
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:NAffected Systems
Affected Versions Detail
| Product | Affected Versions | Fixed Version |
|---|---|---|
Concrete CMS Concrete CMS | = 9.1.3 | N/A |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-209 (Sensitive Information via Error Message) |
| Attack Vector | Network (URL Parameter) |
| CVSS | 0.0 (Rejected) |
| Status | REJECTED |
| Original Claim | XPath Injection (CWE-643) |
| Actual Impact | Full Path Disclosure (FPD) |
MITRE ATT&CK Mapping
The product generates an error message that includes sensitive information about its environment, users, or associated data.
Known Exploits & Detection
Vulnerability Timeline
Subscribe to updates
Get the latest CVE analysis reports delivered to your inbox.