Cloudanix VulnDB

CVE-2025-22871

Critical · 9.1

CVSS

9.1

EPSS

0.8%

Published

Apr 8, 2025

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A flaw in a common web building block could allow an attacker to send a disguised request to a server, tricking it into performing unauthorized actions and potentially exposing sensitive data.

Chainable
Exploitation
Remote Unauthenticated
Attacker needs
None
Complexity
Low
Impact
Data Tampering
Component
Library
Class
Improper Input Validation
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

The vulnerability allows for HTTP Request Smuggling. An attacker can craft a malicious HTTP request that is interpreted differently by a front-end proxy and a back-end server running a vulnerable Go net/http application. This parsing discrepancy, specifically regarding the acceptance of a bare Line Feed (LF) character in chunked encoding metadata, allows an attacker to prepend a malicious request to the body of a legitimate one. The back-end server then executes this 'smuggled' request as if it were a separate, legitimate request originating from the trusted proxy, potentially leading to cache poisoning, session hijacking, and security control bypass.

Why it matters to the business

Exploitation of this vulnerability can lead to severe business consequences, including unauthorized access to sensitive user data, session hijacking of privileged accounts, and the ability to bypass critical security controls like web application firewalls. An attacker could deface web applications, poison shared web caches to serve malicious content to all users, or execute fraudulent transactions. The high impact on confidentiality and integrity (CVSS 9.1) poses a critical risk to application security, potentially causing significant reputational damage, financial loss, and legal liabilities.

How an attack unfolds

An attacker targets a web application architecture where a front-end proxy (like a load balancer or CDN) forwards traffic to a back-end service built with a vulnerable version of Go's net/http package. The attacker sends a specially crafted HTTP POST request using 'Transfer-Encoding: chunked'. Within this request, they use a bare Line Feed (LF) character instead of the standard CRLF to terminate a chunk-size line. The front-end proxy may process this request based on the Content-Length header and forward it, while the vulnerable back-end misinterprets the bare LF. This ambiguity allows the attacker to hide a complete, secondary HTTP request in the body of the first. The back-end server processes the first request, then finds and executes the smuggled request from its input buffer. Because this second request appears to come from the trusted proxy, it bypasses front-end security checks, allowing the attacker to perform unauthorized actions.

How to fix it

The primary remediation is to upgrade the affected components to a version where the vulnerability is fixed. For applications developed in-house using Go, recompile them with a patched version of the Go standard library. For third-party software, apply the security updates provided by the vendor. For example, users of Thunderbird on Red Hat Enterprise Linux 9 should update the package to version '0:102.3.0-4.el9_0' or later. If immediate patching is not feasible, consider configuring the front-end proxy or WAF to normalize requests by rewriting bare LFs to CRLFs in HTTP headers, or to block requests containing bare LFs in chunked metadata, though this is a less robust solution than patching.

How to confirm the fix worked

To validate the fix, ensure that all relevant applications have been upgraded or recompiled with a non-vulnerable version of the Go net/http package. Check package manager logs or perform manual version checks to confirm that patched versions, such as Thunderbird '0:102.3.0-4.el9_0' on RHEL 9, are installed. To test for continued exposure, use a web vulnerability scanner or manual penetration testing techniques to send crafted HTTP requests with bare LFs in chunked encoding headers. A properly patched system will handle or reject these malformed requests consistently between the front-end and back-end, preventing the request smuggling condition.

Typical attack path

  1. The attacker identifies a web application using a reverse proxy in front of a back-end service built with a vulnerable Go version.
  2. The attacker crafts a single HTTP request containing a 'Transfer-Encoding: chunked' header and a specially formatted body.
  3. The request body uses a bare Line Feed (LF) character in the chunked encoding metadata, followed by a second, concealed HTTP request.
  4. The attacker sends the malicious request to the public-facing endpoint.
  5. The front-end proxy misinterprets the request's length and forwards the entire payload to the back-end.
  6. The vulnerable back-end Go application incorrectly processes the bare LF, treating the concealed request as a separate, subsequent request.
  7. The back-end executes the smuggled request, which, originating from the proxy's IP, bypasses security controls and can lead to session hijacking or data exfiltration.

How to detect it

To detect exploitation attempts, monitor and compare HTTP logs from front-end proxies and back-end application servers. Look for requests using 'Transfer-Encoding: chunked' that appear in back-end logs but have unusual or missing attributes in the corresponding front-end logs. Specifically, search raw request logs or use network inspection tools to identify HTTP requests containing a bare Line Feed (\n) character immediately following a chunk-size definition, which violates the RFC standard (which requires CRLF, \r\n). An alert should be triggered if a request is logged at the back-end with the proxy's IP as the source, but there is no corresponding legitimate user request that would justify it at the front-end.

What your security team should do

  • Immediately patch all internet-facing applications using vulnerable versions of the Go net/http package, treating this as a critical priority due to the 9.1 CVSS score.
  • Utilize Software Composition Analysis (SCA) tools to build and maintain an inventory of all services using the Go standard library to identify all affected assets.
  • If patching is delayed, configure upstream WAFs or load balancers to block or normalize HTTP requests containing bare Line Feed (LF) characters in chunked encoding metadata.
  • Review HTTP logs from both proxies and back-end servers for requests with 'Transfer-Encoding: chunked' and malformed line endings, which could indicate attempted or successful exploitation.

The record

The net/http package improperly accepts a bare LF as a line terminator in chunked data chunk-size lines. This can permit request smuggling if a net/http server is used in conjunction with a server that incorrectly accepts a bare LF as part of a chunk-ext.

Affected packages

Ecosystem Package Introduced Fixed
Go stdlib 0 1.23.8
Packagist spiral/roadrunner 0 2025.1.0
AlmaLinux:10 buildah 0 2:1.39.4-2.el10_0
AlmaLinux:10 buildah-tests 0 2:1.39.4-2.el10_0
AlmaLinux:10 delve 0 1.24.1-2.el10_0
AlmaLinux:10 git-lfs 0 3.6.1-2.el10_0
AlmaLinux:10 go-toolset 0 1.23.9-1.el10_0.alma.1
AlmaLinux:10 golang 0 1.23.9-1.el10_0.alma.1
AlmaLinux:10 golang-bin 0 1.23.9-1.el10_0.alma.1
AlmaLinux:10 golang-docs 0 1.23.9-1.el10_0.alma.1
AlmaLinux:10 golang-misc 0 1.23.9-1.el10_0.alma.1
AlmaLinux:10 golang-src 0 1.23.9-1.el10_0.alma.1
AlmaLinux:10 golang-tests 0 1.23.9-1.el10_0.alma.1
AlmaLinux:10 grafana 0 10.2.6-18.el10_0
AlmaLinux:10 grafana-pcp 0 5.2.2-3.el10_0
AlmaLinux:10 grafana-selinux 0 10.2.6-18.el10_0
AlmaLinux:10 gvisor-tap-vsock 0 6:0.8.5-2.el10_0
AlmaLinux:10 gvisor-tap-vsock-gvforwarder 0 6:0.8.5-2.el10_0
AlmaLinux:10 ipp-usb 0 0.9.27-3.el10_0
AlmaLinux:10 opentelemetry-collector 0 0.127.0-1.el10_0
AlmaLinux:10 osbuild-composer 0 134.1-2.el10_0.alma.1
AlmaLinux:10 osbuild-composer-core 0 134.1-2.el10_0.alma.1
AlmaLinux:10 osbuild-composer-worker 0 134.1-2.el10_0.alma.1
AlmaLinux:10 podman 0 6:5.4.0-10.el10_0
AlmaLinux:10 podman-docker 0 6:5.4.0-10.el10_0
AlmaLinux:10 podman-remote 0 6:5.4.0-10.el10_0
AlmaLinux:10 podman-tests 0 6:5.4.0-10.el10_0
AlmaLinux:10 skopeo 0 2:1.18.1-2.el10_0
AlmaLinux:10 skopeo-tests 0 2:1.18.1-2.el10_0
AlmaLinux:8 aardvark-dns 0 2:1.10.1-2.module_el8.10.0+3901+4b80ecd7
AlmaLinux:8 aardvark-dns 0 2:1.10.1-2.module_el8.10.0+3909+6e1c1eb7
AlmaLinux:8 aardvark-dns 0 2:1.10.1-2.module_el8.10.0+4016+efd18bf8
AlmaLinux:8 buildah 0 2:1.33.12-2.module_el8.10.0+4016+efd18bf8
AlmaLinux:8 buildah-tests 0 2:1.33.12-2.module_el8.10.0+4016+efd18bf8
AlmaLinux:8 cockpit-podman 0 84.1-1.module_el8.10.0+4016+efd18bf8
AlmaLinux:8 conmon 0 3:2.1.10-1.module_el8.10.0+3970+8445edf6
AlmaLinux:8 container-selinux 0 2:2.229.0-2.module_el8.10.0+3909+6e1c1eb7
AlmaLinux:8 containernetworking-plugins 0 1:1.4.0-6.module_el8.10.0+4016+efd18bf8
AlmaLinux:8 containers-common 0 2:1-82.module_el8.10.0+3876+e55593a8
AlmaLinux:8 containers-common 0 2:1-82.module_el8.10.0+3901+4b80ecd7
AlmaLinux:8 containers-common 0 2:1-82.module_el8.10.0+3970+8445edf6
AlmaLinux:8 crit 0 3.18-5.module_el8.10.0+3845+87b84552
AlmaLinux:8 crit 0 3.18-5.module_el8.10.0+3858+6ad51f9f
AlmaLinux:8 crit 0 3.18-5.module_el8.10.0+3901+4b80ecd7
AlmaLinux:8 criu 0 3.18-5.module_el8.10.0+3876+e55593a8
AlmaLinux:8 criu 0 3.18-5.module_el8.10.0+3909+6e1c1eb7
AlmaLinux:8 criu 0 3.18-5.module_el8.10.0+3926+f12484f5
AlmaLinux:8 criu 0 3.18-5.module_el8.10.0+3970+8445edf6
AlmaLinux:8 criu-devel 0 3.18-5.module_el8.10.0+3858+6ad51f9f
AlmaLinux:8 criu-devel 0 3.18-5.module_el8.10.0+3876+e55593a8
AlmaLinux:8 criu-devel 0 3.18-5.module_el8.10.0+4016+efd18bf8
AlmaLinux:8 criu-libs 0 3.18-5.module_el8.10.0+3909+6e1c1eb7
AlmaLinux:8 criu-libs 0 3.18-5.module_el8.10.0+3926+f12484f5
AlmaLinux:8 criu-libs 0 3.18-5.module_el8.10.0+3970+8445edf6
AlmaLinux:8 criu-libs 0 3.18-5.module_el8.10.0+4016+efd18bf8
AlmaLinux:8 crun 0 1.14.3-2.module_el8.10.0+3845+87b84552
AlmaLinux:8 crun 0 1.14.3-2.module_el8.10.0+3909+6e1c1eb7
AlmaLinux:8 crun 0 1.14.3-2.module_el8.10.0+3926+f12484f5
AlmaLinux:8 delve 0 1.24.1-1.module_el8.10.0+3977+66935a26
AlmaLinux:8 fuse-overlayfs 0 1.13-1.module_el8.10.0+3792+03eaed9c
AlmaLinux:8 fuse-overlayfs 0 1.13-1.module_el8.10.0+3909+6e1c1eb7
AlmaLinux:8 fuse-overlayfs 0 1.13-1.module_el8.10.0+3970+8445edf6
AlmaLinux:8 git-lfs 0 3.4.1-5.el8_10
AlmaLinux:8 go-toolset 0 1.23.9-1.module_el8.10.0+4000+1ad1b2cc
AlmaLinux:8 golang 0 1.23.9-1.module_el8.10.0+4000+1ad1b2cc
AlmaLinux:8 golang-bin 0 1.23.9-1.module_el8.10.0+4000+1ad1b2cc
AlmaLinux:8 golang-docs 0 1.23.9-1.module_el8.10.0+4000+1ad1b2cc
AlmaLinux:8 golang-misc 0 1.23.9-1.module_el8.10.0+4000+1ad1b2cc
AlmaLinux:8 golang-src 0 1.23.9-1.module_el8.10.0+4000+1ad1b2cc
AlmaLinux:8 golang-tests 0 1.23.9-1.module_el8.10.0+4000+1ad1b2cc
AlmaLinux:8 grafana 0 9.2.10-25.el8_10
AlmaLinux:8 grafana-pcp 0 5.1.1-10.el8_10
AlmaLinux:8 grafana-selinux 0 9.2.10-25.el8_10
AlmaLinux:8 libslirp 0 4.4.0-2.module_el8.10.0+3845+87b84552
AlmaLinux:8 libslirp 0 4.4.0-2.module_el8.10.0+3858+6ad51f9f
AlmaLinux:8 libslirp 0 4.4.0-2.module_el8.10.0+3876+e55593a8
AlmaLinux:8 libslirp 0 4.4.0-2.module_el8.10.0+4016+efd18bf8
AlmaLinux:8 libslirp-devel 0 4.4.0-2.module_el8.10.0+3901+4b80ecd7
AlmaLinux:8 libslirp-devel 0 4.4.0-2.module_el8.10.0+3909+6e1c1eb7
AlmaLinux:8 libslirp-devel 0 4.4.0-2.module_el8.10.0+3970+8445edf6
AlmaLinux:8 netavark 0 2:1.10.3-1.module_el8.10.0+3926+f12484f5
AlmaLinux:8 netavark 0 2:1.10.3-1.module_el8.10.0+3970+8445edf6
AlmaLinux:8 netavark 0 2:1.10.3-1.module_el8.10.0+4016+efd18bf8
AlmaLinux:8 oci-seccomp-bpf-hook 0 1.2.10-1.module_el8.10.0+3792+03eaed9c
AlmaLinux:8 oci-seccomp-bpf-hook 0 1.2.10-1.module_el8.10.0+3876+e55593a8
AlmaLinux:8 oci-seccomp-bpf-hook 0 1.2.10-1.module_el8.10.0+3909+6e1c1eb7
AlmaLinux:8 osbuild-composer 0 101-4.el8_10.alma.1
AlmaLinux:8 osbuild-composer-core 0 101-4.el8_10.alma.1
AlmaLinux:8 osbuild-composer-worker 0 101-4.el8_10.alma.1
AlmaLinux:8 podman 0 4:4.9.4-20.module_el8.10.0+3970+8445edf6
AlmaLinux:8 podman 0 4:4.9.4-20.module_el8.10.0+4016+efd18bf8
AlmaLinux:8 podman-catatonit 0 4:4.9.4-20.module_el8.10.0+3970+8445edf6
AlmaLinux:8 podman-catatonit 0 4:4.9.4-20.module_el8.10.0+4016+efd18bf8
AlmaLinux:8 podman-docker 0 4:4.9.4-20.module_el8.10.0+3970+8445edf6
AlmaLinux:8 podman-gvproxy 0 4:4.9.4-20.module_el8.10.0+3970+8445edf6
AlmaLinux:8 podman-gvproxy 0 4:4.9.4-20.module_el8.10.0+4016+efd18bf8
AlmaLinux:8 podman-plugins 0 4:4.9.4-20.module_el8.10.0+3970+8445edf6
AlmaLinux:8 podman-remote 0 4:4.9.4-20.module_el8.10.0+3970+8445edf6
AlmaLinux:8 podman-remote 0 4:4.9.4-20.module_el8.10.0+4016+efd18bf8
AlmaLinux:8 podman-tests 0 4:4.9.4-20.module_el8.10.0+3970+8445edf6
AlmaLinux:8 podman-tests 0 4:4.9.4-20.module_el8.10.0+4016+efd18bf8
AlmaLinux:8 python3-criu 0 3.18-5.module_el8.10.0+3876+e55593a8
AlmaLinux:8 python3-criu 0 3.18-5.module_el8.10.0+3926+f12484f5
AlmaLinux:8 python3-criu 0 3.18-5.module_el8.10.0+3970+8445edf6
AlmaLinux:8 python3-podman 0 4.9.0-3.module_el8.10.0+4016+efd18bf8
AlmaLinux:8 runc 0 1:1.1.12-6.module_el8.10.0+3959+b8dc5e6a
AlmaLinux:8 runc 0 1:1.1.12-6.module_el8.10.0+3970+8445edf6
AlmaLinux:8 skopeo 0 2:1.14.5-4.module_el8.10.0+4016+efd18bf8
AlmaLinux:8 skopeo-tests 0 2:1.14.5-4.module_el8.10.0+4016+efd18bf8
AlmaLinux:8 slirp4netns 0 1.2.3-1.module_el8.10.0+3845+87b84552
AlmaLinux:8 slirp4netns 0 1.2.3-1.module_el8.10.0+3876+e55593a8
AlmaLinux:8 slirp4netns 0 1.2.3-1.module_el8.10.0+3901+4b80ecd7
AlmaLinux:8 slirp4netns 0 1.2.3-1.module_el8.10.0+3926+f12484f5
AlmaLinux:8 toolbox 0 0.0.99.5-2.module_el8.10.0+3845+87b84552
AlmaLinux:8 toolbox 0 0.0.99.5-2.module_el8.10.0+3858+6ad51f9f
AlmaLinux:8 toolbox 0 0.0.99.5-2.module_el8.10.0+3876+e55593a8
AlmaLinux:8 toolbox 0 0.0.99.5-2.module_el8.10.0+3901+4b80ecd7
AlmaLinux:8 toolbox-tests 0 0.0.99.5-2.module_el8.10.0+3858+6ad51f9f
AlmaLinux:8 toolbox-tests 0 0.0.99.5-2.module_el8.10.0+3909+6e1c1eb7
AlmaLinux:8 toolbox-tests 0 0.0.99.5-2.module_el8.10.0+3970+8445edf6
AlmaLinux:8 udica 0 0.2.6-21.module_el8.10.0+3926+f12484f5
AlmaLinux:8 weldr-client 0 35.12-3.el8_10
AlmaLinux:9 buildah 0 2:1.39.4-2.el9_6
AlmaLinux:9 buildah-tests 0 2:1.39.4-2.el9_6
AlmaLinux:9 containernetworking-plugins 0 1:1.6.2-2.el9_6
AlmaLinux:9 git-lfs 0 3.6.1-2.el9_6
AlmaLinux:9 go-toolset 0 1.23.9-1.el9_6
AlmaLinux:9 golang 0 1.23.9-1.el9_6
AlmaLinux:9 golang-bin 0 1.23.9-1.el9_6
AlmaLinux:9 golang-docs 0 1.23.9-1.el9_6
AlmaLinux:9 golang-misc 0 1.23.9-1.el9_6
AlmaLinux:9 golang-race 0 1.23.9-1.el9_6
AlmaLinux:9 golang-src 0 1.23.9-1.el9_6
AlmaLinux:9 golang-tests 0 1.23.9-1.el9_6
AlmaLinux:9 grafana 0 10.2.6-14.el9_6
AlmaLinux:9 grafana-pcp 0 5.1.1-11.el9_6
AlmaLinux:9 grafana-selinux 0 10.2.6-14.el9_6
AlmaLinux:9 gvisor-tap-vsock 0 6:0.8.5-2.el9_6
AlmaLinux:9 gvisor-tap-vsock-gvforwarder 0 6:0.8.5-2.el9_6
AlmaLinux:9 opentelemetry-collector 0 0.127.0-1.el9_6
AlmaLinux:9 osbuild-composer 0 132.2-2.el9_6.alma.1
AlmaLinux:9 osbuild-composer-core 0 132.2-2.el9_6.alma.1
AlmaLinux:9 osbuild-composer-worker 0 132.2-2.el9_6.alma.1
AlmaLinux:9 podman 0 5:5.4.0-10.el9_6
AlmaLinux:9 podman-docker 0 5:5.4.0-10.el9_6
AlmaLinux:9 podman-plugins 0 5:5.4.0-10.el9_6
AlmaLinux:9 podman-remote 0 5:5.4.0-10.el9_6
AlmaLinux:9 podman-tests 0 5:5.4.0-10.el9_6
AlmaLinux:9 skopeo 0 2:1.18.1-2.el9_6
AlmaLinux:9 skopeo-tests 0 2:1.18.1-2.el9_6
AlmaLinux:9 weldr-client 0 35.12-4.el9_6
Bitnami golang 0 1.23.8
Chainguard aactl 0 0.4.12-r30
Chainguard actions-runner-controller 0 0.11.0-r1
Chainguard actions-runner-controller-compat 0 0.11.0-r1
Chainguard actions-runner-controller-fips 0 0.11.0-r1
Chainguard actions-runner-controller-fips-compat 0 0.11.0-r1
Chainguard addon-resizer 0 1.8.23-r4
Chainguard addon-resizer-compat 0 1.8.23-r4
Chainguard addon-resizer-fips 0 1.8.23-r4
Chainguard addon-resizer-fips-compat 0 1.8.23-r4
Chainguard age 0 1.2.1-r4
Chainguard age-fips 0 1.2.1-r4
Chainguard agentbeat 0 8.17.4-r1
Chainguard agentbeat-fips 0 8.17.4-r1
Chainguard amass 0 4.2.0-r22
Chainguard amazon-cloudwatch-agent-operator 0 2.2.0-r3
Chainguard amazon-cloudwatch-agent-operator-compat 0 2.2.0-r3
Chainguard amazon-cloudwatch-agent-operator-fips 0 2.2.0-r3
Chainguard amazon-cloudwatch-agent-operator-fips-compat 0 2.2.0-r3
Chainguard amazon-k8s-cni 0 1.19.3-r3
Chainguard amazon-k8s-cni-compat 0 1.19.3-r3
Chainguard amazon-k8s-cni-fips 0 1.19.3-r4
Chainguard amazon-k8s-cni-init 0 1.19.3-r3
Chainguard amazon-k8s-cni-init-compat 0 1.19.3-r3
Chainguard amazon-k8s-cni-init-fips 0 1.19.3-r4
Chainguard amazon-k8s-cni-init-fips-compat 0 1.19.3-r4
Chainguard ansible-operator 0 1.37.2-r2
Chainguard ansible-operator-compat 0 1.37.2-r2
Chainguard apache-beam-python-3.11-sdk 0 2.64.0-r1
Chainguard apm-server 0 8.17.4-r1
Chainguard apm-server-compat 0 8.17.4-r1
Chainguard apm-server-fips 0 8.17.4-r1
Chainguard argo-cd-2.12 0 2.12.11-r1
Chainguard argo-cd-2.12-compat 0 2.12.11-r1
Chainguard argo-cd-2.12-repo-server 0 2.12.11-r1
Chainguard argo-cd-2.13 0 2.13.6-r2
Chainguard argo-cd-2.13-compat 0 2.13.6-r2
Chainguard argo-cd-2.13-repo-server 0 2.13.6-r2
Chainguard argo-cd-fips-2.11 0 2.11.13-r7
Chainguard argo-cd-fips-2.11-compat 0 2.11.13-r7
Chainguard argo-cd-fips-2.11-repo-server 0 2.11.13-r7
Chainguard argo-cd-fips-2.12 0 2.12.11-r1
Chainguard argo-cd-fips-2.12-compat 0 2.12.11-r1
Chainguard argo-cd-fips-2.12-repo-server 0 2.12.11-r1
Chainguard argo-cd-fips-2.13 0 2.13.7-r1
Chainguard argo-cd-fips-2.13-compat 0 2.13.7-r1
Chainguard argo-cd-fips-2.13-repo-server 0 2.13.7-r1
Chainguard argo-events-fips 0 1.9.6-r0
Chainguard argo-events-fips-compat 0 1.9.6-r0

Related vulnerabilities