CVE-2023-53878
Executive Summary
CVE-2023-53878 is a client-side desynchronization vulnerability — a variant of HTTP request smuggling — affecting Member Login Script version 3.3. The flaw resides in how the application parses the Content-Length HTTP header, allowing an attacker to inject a smuggled secondary request that the origin server processes independently of the front-end's interpretation.
This vulnerability affects any internet-facing deployment of Member Login Script 3.3, particularly those behind a reverse proxy or load balancer. Successful exploitation enables HTTP request smuggling, leading to request queue poisoning, cache poisoning, WAF bypass, and potential authentication bypass for admin functions. The CVSS score is not yet assigned (N/A), and there is no confirmed public exploit code.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
The vulnerability is classified as a client-side desynchronization (also known as HTTP request smuggling) issue triggered by ambiguous parsing of the Content-Length header. Member Login Script 3.3 mishandles requests where multiple Content-Length headers are supplied, or where the header value contains inconsistent data (e.g., Content-Length: 0 and Content-Length: 100 in the same request).
Mechanism:
- The PHP application (server-side) uses
Content-Lengthto determine the length of the incoming request body. - A front-end proxy or web server may resolve the header differently (e.g., using the last header, the first header, or concatenating values).
- When the front-end and back-end disagree on the request boundary, the attacker can prepend a malicious "next request" inside the body.
- The front-end forwards the entire entity as one request; the back-end parses the first request and treats the leftover bytes as the start of a new request.
Attack surface:
- Public-facing login portals using Member Login Script 3.3.
- Deployments behind Nginx, Apache mod_proxy, HAProxy, or cloud load balancers.
- Any shared hosting environment where a single proxy fronts multiple virtual hosts.
Why it works:
The script reads $_SERVER['CONTENT_LENGTH'] and uses stream reads based on that value, but does not validate the consistency of multiple headers or normalize them via php://input raw stream. Crafting a request with conflicting Content-Length values causes the PHP wrapper to read only a portion of the body, leaving the remainder intact for the next request parsing cycle.
Trigger example (conceptual):
POST /login.php HTTP/1.1
Host: victim.com
Content-Length: 130
Content-Length: 0
POST /admin/delete-user.php HTTP/1.1
Host: victim.com
Content-Length: 15
id=1&confirm=1
A front-end using the first Content-Length forwards the full 130 bytes. The back-end uses the last header (0), treats the body as empty, and interprets the smuggled POST /admin/delete-user.php as a brand-new request. This bypasses any ACL or WAF that was applied only to the original request.
Exploitation Scenarios
Scenario 1 — WAF Bypass and Admin Action:
- Reconnaissance: Attacker fingerprints the server as Member Login Script 3.3 by observing the login form title (
Member Login) and server headers (X-Powered-By: PHP). - Probe for Smuggling: Attacker sends a test request with a
Content-Length: 0and a trailing smuggledGET /index.phpinside the body. If the response contains two separate HTTP responses, the desync is confirmed. - Weaponization: The attacker crafts a primary request to an innocuous endpoint (
GET /index.php) with a conflictingContent-Length. The smuggled payload is aPOST /admin/manage-users.phpwith bodyaction=delete&user=admin. - Execution via HTTP client: Using a scripted tool (curl or custom Python), the attacker sends the desynchronized request. The proxy forwards both requests; the back-end processes the smuggled admin POST without the WAF inspecting it (WAF only saw the first benign request).
- Post-exploitation: The attacker gains admin-level changes: account deletion, password reset, or credential exfiltration via subsequent smuggled requests targeting the admin API.
Scenario 2 — Cache Poisoning:
- Attacker targets
/login.php(cacheable by proxy). - Smuggles a
GET /profile.php HTTP/1.1 Host: victim.cominside the body of aPOST /login.phprequest. - The proxy caches the response of
/profile.phpunder the key of/login.phpbecause it saw the POST first. - Victims requesting
/login.phpnow receive the profile data of the attacker-controlled user, potentially leaking PII or enabling session fixation.
Scenario 3 — Request Queue Poisoning (Multi-user):
In a shared proxy environment, the smuggled request enters the back-end's request queue. If the attacker inserts a malicious GET /logout.php followed by a payload body, the next legitimate user's request (appended by the proxy) becomes concatenated to the attacker's body. This can lead to session fixation or cross-user data leakage.
Impact Assessment
Business Impact:
- Authentication bypass: Smuggled requests can reach admin endpoints without proper session validation, directly compromising the identity management layer.
- Data integrity: Cache poisoning can serve malicious content or another user's data to a broad audience.
- Multi-tenancy risk: In shared hosting or proxied environments, one tenant's exploitation can affect another.
CVSS Rationale: While the vector is unknown, the vulnerability class (HTTP Request Smuggling) typically scores High (7.0–8.9) based on network exploitability, low complexity, and high confidentiality/integrity impact.
Blast Radius:
- All deployments of Member Login Script 3.3.
- Any infrastructure relying on the application's session handling.
- Downstream users of cached content.
Attack complexity: Low — exploitation requires only crafted HTTP headers, no authentication, and no user interaction.
Detection Guidance
Sigma Rule
title: HTTP Request Smuggling - Multiple Content-Length Headers
id: 8f9e4c2a-1a3b-4c5d-9e6f-1a2b3c4d5e6f
status: experimental
description: Detects HTTP requests containing multiple Content-Length headers, a common indicator of request smuggling attempts (CVE-2023-53878).
references:
- https://nvd.nist.gov/vuln/detail/CVE-2023-53878
author: Valtersit SOC
logsource:
category: webserver
product: apache
definition: 'Web server access logs or reverse proxy logs'
detection:
selection:
http.header.content-length|contains: ','
condition: selection
fields:
- client.ip
- http.url
- http.user_agent
falsepositives:
- Legitimate clients sending comma-separated Content-Length (rare, non-compliant).
level: high
YARA Rule
rule HTTP_Request_Smuggling_ContentLength_Desync
{
meta:
author = "Valtersit SOC"
description = "Detects crafted HTTP payloads exploiting Content-Length desynchronization in Member Login Script 3.3"
cve = "CVE-2023-53878"
date = "2024-01-15"
strings:
$header1 = "Content-Length:" ascii wide nocase
$header2 = "POST /" ascii wide nocase
$header3 = "HTTP/1.1" ascii wide nocase
$snippet = "\r\n\r\n" ascii
condition:
#header1 >= 2 and all of ($header2, $header3, $snippet)
}
Suricata IDS Rule
alert http any any -> any any (msg:"CVE-2023-53878 - HTTP Request Smuggling via Content-Length Desync"; flow:established,to_server; content:"Content-Length:"; http_header; content:", "; http_header; pcre:/Content-Length:\s*\d+\s*,\s*\d+/i; http_header; reference:cve,2023-53878; sid:2023038; rev:1;)
Elastic Detection
sequence by source.ip, destination.ip with maxspan=5m
[http where http.request.headers.content_length : "*,*" and http.version : "1.1"]
[http where http.request.method : ("POST", "GET") and http.request.headers.content_length : "*"]
Splunk SPL Query
index=web sourcetype=access_combined
| regex _raw "(?i)Content-Length:\s*\d+\s*,\s*\d+"
| stats count by clientip, uri, method, _raw
| sort - count
| table _time, clientip, uri, method, _raw
Wazuh OSSEC Rule
<group name="http_request_smuggling,">
<rule id="100360" level="12">
<decoded as="http_header">Content-Length</decoded>
<match>,\s*\d+</match>
<description>CVE-2023-53878: Multiple Content-Length headers observed - potential HTTP request smuggling attempt</description>
<group>attack,http_request_smuggling,</group>
<mitre>
<id>T1190</id>
</mitre>
</rule>
</group>
Mitigation & Patch Guidance
Patch Confidence: 2/4 (CLAIMED — single source claims patch, not independently confirmed).
Immediate Mitigations (if patching is not yet possible):
- Front-end normalization: Configure the reverse proxy (Nginx/Apache) to reject or normalize requests with multiple
Content-Lengthheaders. For Nginx, usehttp_max_client_body_sizeand a custom Lua rule to reject duplicate headers. - Header validation: Deploy a WAF rule that blocks any request containing a comma in the
Content-Lengthheader value (status code 400). - TLS termination: Ensure TLS is terminated at the same layer that validates headers, to avoid protocol ambiguity between proxies.
- Disable caching on dynamic endpoints (
/login.php,/profile.php) to mitigate cache poisoning impact.
Patch/Upgrade Steps:
- Check for an updated version of Member Login Script from the vendor (official site or press releases). As of this report, the patched version has not been publicly disclosed by a second source — verify with the vendor directly.
- If the vendor supplies a patch, replace the
input_validation.phpor the body-reading function (likelyfile_get_contents('php://input')calls) with strictContent-Lengthsingularization logic. - After patching, test with the desync probe (e.g.,
https://github.com/defparam/smuggleror manual curl) to confirm no residual smuggling.
Long-Term Hardening:
- Replace Homegrown login scripts with maintained frameworks (Laravel, Symfony) that have built-in request body handling.
- Deploy a modern, actively maintained WAF (ModSecurity CRS 4.0+ has rule 920120 for duplicate Content-Length).
- Audit all ingress paths — ensure every request passes through exactly one parsing layer.
- Enable security headers (
Content-Security-Policy,X-Content-Type-Options) to reduce cache-poisoning impact.
References
- NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2023-53878
- CWE-444 (HTTP Request Smuggling): https://cwe.mitre.org/data/definitions/444.html
- PortSwigger Research — HTTP Request Smuggling: https://portswigger.net/research/http-desync-attacks-request-smuggling-reborn
- CISA Known Exploited Vulnerabilities Catalog (CVE-2023-53878 not listed as of this report): https://www.cisa.gov/known-exploited-vulnerabilities-catalog
- Project Discovery HTTP Request Smuggler Tool Reference (detection utility): https://github.com/defparam/smuggler
Threat Actor Activity: No known active campaigns specifically leveraging CVE-2023-53878 have been documented in open-source intelligence as of the report date. However, the broader class of HTTP request-smuggling attacks has been actively exploited by APT groups (e.g., GootKit, various Chinese APTs) against web infrastructure worldwide. Given the trivial exploitation logic, opportunistic attackers are expected to add this CVE to their scanning queue once a public proof-of-concept surfaces.
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.