The SentinelOne Annual Threat Report - A Defenders Guide from the FrontlinesThe SentinelOne Annual Threat ReportGet the Report
Experiencing a Breach?Blog
Get StartedContact Us
SentinelOne
  • Platform
    Platform Overview
    • Singularity Platform
      Welcome to Integrated Enterprise Security
    • AI for Security
      Leading the Way in AI-Powered Security Solutions
    • Securing AI
      Accelerate AI Adoption with Secure AI Tools, Apps, and Agents.
    • How It Works
      The Singularity XDR Difference
    • Singularity Marketplace
      One-Click Integrations to Unlock the Power of XDR
    • Pricing & Packaging
      Comparisons and Guidance at a Glance
    Data & AI
    • Purple AI
      Accelerate SecOps with Generative AI
    • Singularity Hyperautomation
      Easily Automate Security Processes
    • AI-SIEM
      The AI SIEM for the Autonomous SOC
    • Singularity Data Lake
      AI-Powered, Unified Data Lake
    • Singularity Data Lake for Log Analytics
      Seamlessly Ingest Data from On-Prem, Cloud or Hybrid Environments
    Endpoint Security
    • Singularity Endpoint
      Autonomous Prevention, Detection, and Response
    • Singularity XDR
      Native & Open Protection, Detection, and Response
    • Singularity RemoteOps Forensics
      Orchestrate Forensics at Scale
    • Singularity Threat Intelligence
      Comprehensive Adversary Intelligence
    • Singularity Vulnerability Management
      Application & OS Vulnerability Management
    • Singularity Identity
      Identity Threat Detection and Response
    Cloud Security
    • Singularity Cloud Security
      Block Attacks with an AI-Powered CNAPP
    • Singularity Cloud Native Security
      Secure Cloud and Development Resources
    • Singularity Cloud Workload Security
      Real-Time Cloud Workload Protection Platform
    • Singularity Cloud Data Security
      AI-Powered Threat Detection for Cloud Storage
    • Singularity Cloud Security Posture Management
      Detect and Remediate Cloud Misconfigurations
    Securing AI
    • Prompt Security
      Secure AI Tools Across Your Enterprise
  • Why SentinelOne?
    Why SentinelOne?
    • Why SentinelOne?
      Cybersecurity Built for What’s Next
    • Our Customers
      Trusted by the World’s Leading Enterprises
    • Industry Recognition
      Tested and Proven by the Experts
    • About Us
      The Industry Leader in Autonomous Cybersecurity
    Compare SentinelOne
    • Arctic Wolf
    • Broadcom
    • CrowdStrike
    • Cybereason
    • Microsoft
    • Palo Alto Networks
    • Sophos
    • Splunk
    • Trellix
    • Trend Micro
    • Wiz
    Verticals
    • Energy
    • Federal Government
    • Finance
    • Healthcare
    • Higher Education
    • K-12 Education
    • Manufacturing
    • Retail
    • State and Local Government
  • Services
    Managed Services
    • Managed Services Overview
      Wayfinder Threat Detection & Response
    • Threat Hunting
      World-Class Expertise and Threat Intelligence
    • Managed Detection & Response
      24/7/365 Expert MDR Across Your Entire Environment
    • Incident Readiness & Response
      DFIR, Breach Readiness, & Compromise Assessments
    Support, Deployment, & Health
    • Technical Account Management
      Customer Success with Personalized Service
    • SentinelOne GO
      Guided Onboarding & Deployment Advisory
    • SentinelOne University
      Live and On-Demand Training
    • Services Overview
      Comprehensive Solutions for Seamless Security Operations
    • SentinelOne Community
      Community Login
  • Partners
    Our Network
    • MSSP Partners
      Succeed Faster with SentinelOne
    • Singularity Marketplace
      Extend the Power of S1 Technology
    • Cyber Risk Partners
      Enlist Pro Response and Advisory Teams
    • Technology Alliances
      Integrated, Enterprise-Scale Solutions
    • SentinelOne for AWS
      Hosted in AWS Regions Around the World
    • Channel Partners
      Deliver the Right Solutions, Together
    • SentinelOne for Google Cloud
      Unified, Autonomous Security Giving Defenders the Advantage at Global Scale
    • Partner Locator
      Your Go-to Source for Our Top Partners in Your Region
    Partner Portal→
  • Resources
    Resource Center
    • Case Studies
    • Data Sheets
    • eBooks
    • Reports
    • Videos
    • Webinars
    • Whitepapers
    • Events
    View All Resources→
    Blog
    • Feature Spotlight
    • For CISO/CIO
    • From the Front Lines
    • Identity
    • Cloud
    • macOS
    • SentinelOne Blog
    Blog→
    Tech Resources
    • SentinelLABS
    • Ransomware Anthology
    • Cybersecurity 101
  • About
    About SentinelOne
    • About SentinelOne
      The Industry Leader in Cybersecurity
    • Investor Relations
      Financial Information & Events
    • SentinelLABS
      Threat Research for the Modern Threat Hunter
    • Careers
      The Latest Job Opportunities
    • Press & News
      Company Announcements
    • Cybersecurity Blog
      The Latest Cybersecurity Threats, News, & More
    • FAQ
      Get Answers to Our Most Frequently Asked Questions
    • DataSet
      The Live Data Platform
    • S Foundation
      Securing a Safer Future for All
    • S Ventures
      Investing in the Next Generation of Security, Data and AI
  • Pricing
Get StartedContact Us
CVE Vulnerability Database
Vulnerability Database/CVE-2026-23941

CVE-2026-23941: Erlang OTP HTTP Request Smuggling Flaw

CVE-2026-23941 is an HTTP request smuggling vulnerability in Erlang OTP's inets httpd module caused by improper handling of duplicate Content-Length headers. This article covers technical details, affected versions, and mitigations.

Published: March 20, 2026

CVE-2026-23941 Overview

CVE-2026-23941 is an HTTP Request Smuggling vulnerability affecting the Erlang OTP inets httpd module. The vulnerability stems from the server's failure to reject or normalize duplicate Content-Length headers in HTTP requests. When processing requests with multiple Content-Length headers, the Erlang httpd server uses the earliest value for body parsing, while common reverse proxies such as nginx, Apache httpd, and Envoy honor the last Content-Length value. This inconsistency violates RFC 9112 Section 6.3 and enables front-end/back-end desynchronization attacks.

The vulnerability is specifically associated with the file lib/inets/src/http_server/httpd_request.erl and the httpd_request:parse_headers/7 routine, where header validation fails to detect and reject duplicate Content-Length headers.

Critical Impact

Attackers can exploit this desynchronization to inject malicious requests into the HTTP pipeline, potentially bypassing security controls, hijacking user sessions, poisoning web caches, or accessing unauthorized data through request smuggling attacks.

Affected Products

  • Erlang OTP versions 17.0 through 28.4.1 (prior to patch)
  • Erlang OTP versions 27.x (prior to 27.3.4.9)
  • Erlang OTP versions 26.x (prior to 26.2.5.18)
  • Erlang inets module versions 5.10 through 9.6.1 (prior to patch)
  • Erlang inets module versions 9.3.x (prior to 9.3.2.3)
  • Erlang inets module versions 9.1.x (prior to 9.1.0.5)

Discovery Timeline

  • 2026-03-13 - CVE-2026-23941 published to NVD
  • 2026-03-16 - Last updated in NVD database

Technical Details for CVE-2026-23941

Vulnerability Analysis

HTTP Request Smuggling vulnerabilities arise when front-end and back-end servers interpret HTTP request boundaries differently. In this case, the Erlang OTP httpd server processes the first Content-Length header encountered in a request, while most reverse proxies and load balancers follow the convention of using the last Content-Length header value. This discrepancy allows an attacker to craft a request that appears as one complete request to the front-end proxy but is interpreted as two separate requests by the back-end Erlang server.

The attack exploits this parsing inconsistency by sending a request with two different Content-Length values. The front-end proxy reads the body according to the last header value, while the back-end server reads according to the first. Any remaining bytes after the back-end finishes parsing are left in the connection buffer and prepended to the next request, effectively allowing the attacker to inject arbitrary request content.

Root Cause

The root cause lies in the httpd_request:parse_headers/7 function within lib/inets/src/http_server/httpd_request.erl. The original implementation of the check_header function did not validate whether a Content-Length header had already been received. This allowed requests containing duplicate Content-Length headers to be processed without rejection, contrary to RFC 9112 Section 6.3 which mandates that such requests must be rejected as invalid.

The fix modifies the check_header function to accept an additional Headers parameter, enabling it to check for pre-existing Content-Length headers and return an appropriate error when duplicates are detected.

Attack Vector

The attack requires network access to a system where Erlang OTP httpd is deployed behind a reverse proxy. An attacker crafts an HTTP request containing duplicate Content-Length headers with different values. Due to the parsing discrepancy, the attacker can inject a malicious request that gets queued for the next legitimate user connection, enabling session hijacking, cache poisoning, or bypassing authentication controls.

text
// Security patch in lib/inets/src/http_server/httpd_request.erl
// Source: https://github.com/erlang/otp/commit/a4b46336fd25aa100ac602eb9a627aaead7eda18

 				   Headers),
 	    {ok, list_to_tuple(lists:reverse([Body, {http_request:headers(FinalHeaders, #http_request_h{}), FinalHeaders} | Result]))};
 	NewHeader ->
-	    case check_header(NewHeader, Options) of 
+	    case check_header(NewHeader, Headers, Options) of
 	ok ->
 	    FinalHeaders = lists:filtermap(fun(H) ->
 					   httpd_custom:customize_headers(Customize, request_header, H)

The patch adds the Headers parameter to check_header, allowing the function to detect duplicate Content-Length headers and properly reject malformed requests.

text
// Security patch in lib/inets/src/http_server/httpd_request_handler.erl
// Source: https://github.com/erlang/otp/commit/a4b46336fd25aa100ac602eb9a627aaead7eda18

 	    httpd_response:send_status(NewModData, ErrCode, ErrStr, {max_size, MaxSize}),
 	    {stop, normal, State#state{response_sent = true,
 				       mod = NewModData}};
-
-    {error, {version_error, ErrCode, ErrStr}, Version} ->
+        {error, {version_error, ErrCode, ErrStr}, Version} ->
         NewModData =  ModData#mod{http_version = Version},
 	    httpd_response:send_status(NewModData, ErrCode, ErrStr),
 	    {stop, normal, State#state{response_sent = true,
-				                   mod = NewModData}};
+				       mod = NewModData}};
+        {error, {bad_request, ErrCode, ErrStr}, Version} ->
+            NewModData =  ModData#mod{http_version = Version},
+            httpd_response:send_status(NewModData, ErrCode, ErrStr),
+            {stop, normal, State#state{response_sent = true,
+                                       mod = NewModData}};

     {http_chunk = Module, Function, Args} when ChunkState =/= undefined ->
         NewState = handle_chunk(Module, Function, Args, State),

This change adds proper error handling for bad_request errors, ensuring that requests with duplicate Content-Length headers receive appropriate HTTP 400 Bad Request responses.

Detection Methods for CVE-2026-23941

Indicators of Compromise

  • HTTP requests containing multiple Content-Length headers arriving at backend servers
  • Unusual HTTP 400 responses following the patch deployment indicating blocked smuggling attempts
  • Desynchronized request/response patterns in application logs where responses don't match expected requests
  • Unexpected requests appearing in server logs that were not initiated by legitimate clients

Detection Strategies

  • Implement deep packet inspection at the network perimeter to identify HTTP requests containing duplicate Content-Length headers
  • Deploy web application firewalls (WAF) configured to reject requests with multiple Content-Length headers before they reach backend servers
  • Monitor for anomalous request patterns where the timing or sequence of requests suggests pipeline manipulation
  • Audit proxy and load balancer logs for requests that may indicate smuggling attempts

Monitoring Recommendations

  • Enable verbose HTTP request logging on Erlang httpd servers to capture all incoming header information
  • Configure alerts for requests containing duplicate HTTP headers, particularly Content-Length and Transfer-Encoding
  • Implement correlation analysis between front-end proxy logs and back-end server logs to identify request boundary discrepancies
  • Monitor for sudden increases in HTTP 400 Bad Request responses which may indicate ongoing exploitation attempts

How to Mitigate CVE-2026-23941

Immediate Actions Required

  • Upgrade Erlang OTP to version 28.4.1, 27.3.4.9, or 26.2.5.18 or later depending on your major version branch
  • Upgrade the inets module to version 9.6.1, 9.3.2.3, or 9.1.0.5 or later depending on your version branch
  • Configure front-end proxies to normalize or reject requests with duplicate Content-Length headers as a defense-in-depth measure
  • Review application logs for signs of past exploitation attempts

Patch Information

Erlang has released security patches addressing this vulnerability across multiple supported branches. The fixes are available in the following commits:

  • OTP-28 branch patch
  • OTP-27 branch patch
  • OTP-26 branch patch

For complete details, refer to the GitHub Security Advisory and Erlang Version Documentation.

Workarounds

  • Configure reverse proxies (nginx, Apache httpd, Envoy) to reject requests containing multiple Content-Length headers before forwarding to backend servers
  • Implement a WAF rule to block requests with duplicate Content-Length or conflicting Content-Length and Transfer-Encoding headers
  • If using nginx, add configuration to normalize request headers and reject malformed requests at the proxy layer
  • Consider using HTTP/2 end-to-end where possible, as HTTP/2's binary framing protocol is not susceptible to this class of attack
bash
# nginx configuration example to reject duplicate Content-Length headers
# Add to server or location block

# Reject requests with multiple Content-Length headers
if ($http_content_length ~* ",") {
    return 400;
}

# Alternative: Use proxy_set_header to normalize headers
proxy_set_header Content-Length $content_length;

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

  • Vulnerability Details
  • TypeOther

  • Vendor/TechErlang Otp

  • SeverityHIGH

  • CVSS Score7.0

  • EPSS Probability0.02%

  • Known ExploitedNo
  • CVSS Vector
  • CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:L/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
  • Impact Assessment
  • ConfidentialityHigh
  • IntegrityNone
  • AvailabilityNone
  • CWE References
  • CWE-444
  • Technical References
  • GitHub Commit Update

  • GitHub Commit Update

  • GitHub Commit Update

  • GitHub Security Advisory

  • Erlang Version Order Documentation
  • Related CVEs
  • CVE-2026-28810: Erlang/OTP DNS Cache Poisoning Vulnerability

  • CVE-2026-32144: Erlang OTP Auth Bypass Vulnerability

  • CVE-2026-28808: Erlang OTP Auth Bypass Vulnerability

  • CVE-2026-21620: Erlang OTP TFTP Path Traversal Flaw
Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the World’s Most Advanced Cybersecurity Platform

See how our intelligent, autonomous cybersecurity platform can protect your organization now and into the future.

Try SentinelOne
  • Get Started
  • Get a Demo
  • Product Tour
  • Why SentinelOne
  • Pricing & Packaging
  • FAQ
  • Contact
  • Contact Us
  • Customer Support
  • SentinelOne Status
  • Language
  • Platform
  • Singularity Platform
  • Singularity Endpoint
  • Singularity Cloud
  • Singularity AI-SIEM
  • Singularity Identity
  • Singularity Marketplace
  • Purple AI
  • Services
  • Wayfinder TDR
  • SentinelOne GO
  • Technical Account Management
  • Support Services
  • Verticals
  • Energy
  • Federal Government
  • Finance
  • Healthcare
  • Higher Education
  • K-12 Education
  • Manufacturing
  • Retail
  • State and Local Government
  • Cybersecurity for SMB
  • Resources
  • Blog
  • Labs
  • Case Studies
  • Videos
  • Product Tours
  • Events
  • Cybersecurity 101
  • eBooks
  • Webinars
  • Whitepapers
  • Press
  • News
  • Ransomware Anthology
  • Company
  • About Us
  • Our Customers
  • Careers
  • Partners
  • Legal & Compliance
  • Security & Compliance
  • Investor Relations
  • S Foundation
  • S Ventures

©2026 SentinelOne, All Rights Reserved.

Privacy Notice Terms of Use

English