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-48598

CVE-2026-48598: Multipart Part Header Injection and Request Smuggling in elixir-tesla

Amit Schendel
Amit Schendel
Senior Security Researcher

Jul 10, 2026·5 min read·28 visits

Executive Summary (TL;DR)

Unescaped carriage returns, line feeds, and double-quotes in elixir-tesla's multipart module allow multipart header injection and request smuggling.

An Improper Encoding or Escaping of Output vulnerability (CWE-116) in elixir-tesla allowed unauthenticated remote code execution or request smuggling via unescaped Content-Disposition parameters in multipart form-data requests.

Vulnerability Overview

The elixir-tesla library serves as a widely adopted HTTP client framework within the Elixir ecosystem, offering modular middleware and simple HTTP request building. One of its crucial components is the Tesla.Multipart module, which handles the serialization of multipart form-data. This format is commonly used to transfer binary file data and associated metadata to upstream web services.

When applications ingest file metadata from unauthenticated users and forward it downstream, they expose a highly sensitive interface. If the client library fails to escape structural characters, this dynamic user input can alter the overall structure of the HTTP multipart message body.

CVE-2026-48598 exposes an input-validation vulnerability classified as CWE-116 within this serialization pipeline. An attacker who controls metadata such as filenames can construct malicious inputs that break out of the header context. This flaw alters downstream boundary evaluations and allows subsequent header fields to be injected.

Root Cause Analysis

The underlying flaw resides within the private part_headers_for_disposition/1 function inside lib/tesla/multipart.ex. This function is responsible for iterating over a keyword list of disposition parameters and converting them into format-compliant headers. It serializes these parameters using simple string interpolation without performing escaping or sanitation.

Specifically, the function maps over key-value pairs using the pattern #{k}="#{v}". It joins the mapped values into a semicolon-delimited string and appends a single CRLF sequence to finalize the Content-Disposition line. If a parameter value contains a double-quote character, it prematurely terminates the quoted string boundary.

If the value contains carriage return or line feed characters, it ends the HTTP header line itself. The remaining injected payload is then interpreted as a distinct HTTP header or even a premature body boundary. This structural manipulation is illustrated in the diagram below.

Code Analysis

To analyze the vulnerable implementation, observe how parameter values were directly concatenated without character verification in lib/tesla/multipart.ex prior to version 1.18.3:

def part_headers_for_disposition([]), do: []
def part_headers_for_disposition(kvs) do
  ds =
    kvs
    # Vulnerable interpolation lacking escaping or validation
    |> Enum.map(fn {k, v} -> "#{k}=\"#{v}\"" end)
    |> Enum.join("; ")
  ["Content-Disposition: form-data; #{ds}\r\n"]
end

The initial remediation commit bb1a2c3da2775924d96e3db8e315dcc4d5d2246e mitigated this by introducing basic assertion helpers. These checks search for forbidden control characters and double-quotes within each evaluated disposition value:

# Introduced assertion to intercept structural characters
def part_headers_for_disposition(kvs) do
  ds =
    kvs
    |> Enum.map(fn {k, v} ->
      v_str = to_string(v)
      :ok = assert_disposition_value!(k, v_str)
      "#{k}=\"#{v_str}\""
    end)
    |> Enum.join("; ")
  ["content-disposition: form-data; #{ds}\r\n"]
end

To prevent sophisticated bypasses, the subsequent commit 23601edac5d22ba9407b427967b5bdbda201aec2 implemented strict RFC 7230 and RFC 7231 Whitelist validation using binary pattern matching. Rather than simply blocking known bad characters, this implementation validates every character against standard token definition rules.

Exploitation & Proof-of-Concept

An attack relies on the target application receiving file metadata from untrusted sources and passing it directly into Tesla.Multipart.add_file/3 or add_file_content/4. For instance, a web service that accepts user uploads and replicates them to a downstream object-store API acts as a potential forwarding proxy.

To exploit this vulnerability, the attacker registers a file upload using a crafted filename containing quotes and line-ending sequences. A typical payload contains a filename like file.txt"\r\nContent-Type: application/x-php\r\n\r\n<?php phpinfo(); ?>\r\n--boundary--. During serialization, the client library constructs the outbound HTTP body using this raw string.

When the downstream system processes the request, it encounters the injected line breaks. It evaluates the injected content-type and body data as separate entities, bypassing filename or extension validations. This allows attackers to perform multipart request smuggling or spoof upload metadata.

Impact Assessment

The CVSS Base Score is officially rated at 2.1, representing low overall severity due to the local attack vector requirement. Because the library executes inside the context of the calling application, exploitation requires the application itself to expose vulnerable pathways. It does not directly affect the confidentiality, integrity, or availability of the underlying server.

However, the subsequent system integrity rating is classified as low because this vulnerability alters the integrity of data sent to downstream processors. If downstream systems trust the integrity of incoming multipart metadata, they may execute arbitrary commands, allow directory traversal, or process forged requests.

According to the Exploit Prediction Scoring System, the probability of active exploitation in the wild is currently low. Developers must still address this vulnerability since it acts as a secondary exploitation channel inside microservice architectures.

Remediation & Best Practices

The primary recommendation is to update the tesla dependency to version 1.18.3 or later. This version introduces RFC-compliant character checking that raises an ArgumentError when unescaped characters are detected.

If the dependency cannot be immediately updated, developers must implement strict server-side validation. Filenames and parameter inputs must be filtered to remove double-quotes, carriage returns, and line feeds before calling the client library.

Additionally, applications must wrap multipart creation inside structured try/rescue blocks. Because the patch throws runtime errors when bad input is detected, failing to catch these exceptions can expose the application to denial-of-service vulnerabilities through intentional application crashes.

Official Patches

elixir-teslaInitial input-validation sanitizer commit
elixir-teslaFollow-up RFC-compliant input-whitelisting validation

Fix Analysis (2)

Technical Appendix

CVSS Score
2.1/ 10
CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:N/SI:L/SA:N
EPSS Probability
0.14%
Top 96% most exploited

Affected Systems

elixir-tesla

Affected Versions Detail

Product
Affected Versions
Fixed Version
tesla
elixir-tesla
>= 0.8.0, < 1.18.31.18.3
AttributeDetail
CWE IDCWE-116
Attack VectorLocal
CVSS v4.0 Score2.1 (Low)
EPSS Score0.00143
ImpactLow Subsequent System Integrity
Exploit StatusProof of Concept
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1071.001Web Protocols
Command and Control
CWE-116
Improper Encoding or Escaping of Output

The software receives input from an upstream component but does not encode or escape the output before constructing a structured message.

Known Exploits & Detection

GitHub Security AdvisoryDetailed discussion and description of the vulnerability.

Vulnerability Timeline

Vulnerability reported and initial validation patch committed
2026-06-02
Strict RFC-compliant whitelisting implemented and version 1.18.3 released
2026-06-02
GitHub Security Advisory and EEF CNA records published
2026-06-02
National Vulnerability Database record finalized
2026-06-17

References & Sources

  • [1]CVE-2026-48598 on CVE.org
  • [2]GHSA-28jh-g32x-v9v4 Advisory on GitHub
  • [3]Erlang Ecosystem Foundation CNA Advisory
  • [4]OSV Registry Record for CVE-2026-48598

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

•1 day ago•CVE-2026-63462
7.5

CVE-2026-63462: Unauthenticated Stack Overflow Denial of Service in Unleash Server

An unauthenticated remote denial of service vulnerability exists in the Unleash feature management platform. By submitting a crafted JSON payload containing deeply nested structures to an OpenAPI-validated endpoint, an attacker can trigger uncontrolled recursion within the error formatting module. This leads to a call-stack exhaustion (RangeError: Maximum call stack size exceeded) inside the Node.js runtime, causing the service to crash immediately without recovery.

Alon Barad
Alon Barad
11 views•6 min read
•2 days ago•CVE-2026-63004
5.5

CVE-2026-63004: Server-Side Request Forgery in Unleash Addon and Integration Subsystem

CVE-2026-63004 is a server-side request forgery (SSRF) vulnerability in the Unleash feature management platform. Authenticated administrators with CREATE_ADDON or UPDATE_ADDON privileges can exploit this vulnerability to initiate requests to loopback addresses, private networks, and cloud metadata endpoints, potentially leading to information disclosure and credential extraction.

Amit Schendel
Amit Schendel
8 views•8 min read
•2 days ago•CVE-2026-63466
4.1

CVE-2026-63466: Process-Wide Security Degradation via Global Module Mutation in Unleash

Prior to version 8.0.3, Unleash's Markdown event formatter directly mutated the global template-escaping function of the shared mustache Node.js module, resulting in a process-wide security degradation where HTML/Markdown escaping was permanently disabled for the application lifetime.

Alon Barad
Alon Barad
3 views•6 min read
•2 days ago•CVE-2026-76904
9.8

CVE-2026-76904: Unauthenticated SQL Injection in GeoTools PostGIS DataStore Component

A critical SQL injection vulnerability exists in the GeoTools open-source Java library. This vulnerability is situated within the post-processing phase of OGC Filter conversion inside the PostGIS DataStore module. Specifically, the `jsonArrayContains` function does not validate or sanitize its arguments before constructing PostgreSQL SQL/JSON path evaluation queries. An unauthenticated remote attacker can exploit this weakness by submitting crafted filters via standard OGC services like WFS or WMS to execute arbitrary SQL commands on the underlying database system.

Alon Barad
Alon Barad
13 views•5 min read
•2 days ago•CVE-2026-61824
8.2

CVE-2026-61824: High-Severity Cross-Site Scripting (XSS) via Unsanitized Site Extractors in Defuddle

CVE-2026-61824 is a high-severity Cross-Site Scripting (XSS) vulnerability in kepano/defuddle before version 0.19.1. Custom site extractors for platforms such as X/Twitter, Substack, and YouTube constructed HTML representations via template string interpolation without output escaping. This allowed malicious pages to bypass standard parser sanitization routines and execute arbitrary JavaScript.

Amit Schendel
Amit Schendel
6 views•7 min read
•2 days ago•CVE-2026-63421
7.5

CVE-2026-63421: Query Limit Bypass via Negative Integer Input in KeystoneJS core resolvers

A high-severity vulnerability exists in KeystoneJS, a popular Node.js CMS and GraphQL framework, where the query resolution engine fails to validate signed negative integers within the pagination subsystem. Unauthenticated remote attackers can leverage this flaw to bypass the 'graphql.maxTake' safety boundary. By sending large negative values in the 'take' query parameter, the underlying Prisma ORM interprets the value as an instruction to fetch rows from the end of the collection, allowing malicious actors to bypass pagination limits, trigger database resource exhaustion, and execute application-level Denial of Service (DoS) attacks.

Alon Barad
Alon Barad
8 views•6 min read