CVE-2021-21295: Possible request smuggling in HTTP/2 due missing validation
Impact If a Content-Length header is present in the original HTTP/2 request, the field is not validated by Http2MultiplexHandler as it is propagated up. This is fine as long as the request is not proxied through as HTTP/1.1. If the request comes in as an HTTP/2 stream, gets converted into the HTTP/1.1 domain objects (HttpRequest, HttpContent, etc.) via Http2StreamFrameToHttpObjectCodec and then sent up to the child channel's pipeline and proxied through a remote peer as HTTP/1.1 this may result in request smuggling.
In a proxy case, users may assume the content-length is validated somehow, which is not the case. If the request is forwarded to a backend channel that is a HTTP/1.1 connection, the Content-Length now has meaning and needs to be checked.
An attacker can smuggle requests inside the body as it gets downgraded from HTTP/2 to HTTP/1.1. A sample attack request looks like:
POST / HTTP/2 :authority:: externaldomain.com Content-Length: 4
asdfGET /evilRedirect HTTP/1.1 Host: internaldomain.com
Users are only affected if all of this is true: HTTP2MultiplexCodec or Http2FrameCodec is used Http2StreamFrameToHttpObjectCodec is used to convert to HTTP/1.1 objects These HTTP/1.1 objects are forwarded to another remote peer.
Patches This has been patched in 4.1.60.Final
Workarounds The user can do the validation by themselves by implementing a custom ChannelInboundHandler that is put in the ChannelPipeline behind Http2StreamFrameToHttpObjectCodec.
References Related change to workaround the problem: https://github.com/Netflix/zuul/pull/980
Other sources
In Netty (io.netty:netty-codec-http2) before version 4.1.60.Final there is a vulnerability that enables request smuggling. If a Content-Length header is present in the original HTTP/2 request, the field is not validated by Http2MultiplexHandler as it is propagated up. This is fine as long as the request is not proxied through as HTTP/1.1. If the request comes in as an HTTP/2 stream, gets converted into the HTTP/1.1 domain objects (HttpRequest, HttpContent, etc.) via Http2StreamFrameToHttpObjectCodec and then sent up to the child channel's pipeline and proxied through a remote peer as HTTP/1.1 this may result in request smuggling.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
maven/io.netty:netty-codec-http2to a version that resolves this vulnerability.Fixed in 4.1.60.Final - Upgrade
Upgrade
redhat/qpid-protonto a version that resolves this vulnerability.Fixed in 0:0.33.0-6.el7_9 - Upgrade
Upgrade
redhat/qpid-protonto a version that resolves this vulnerability.Fixed in 0:0.33.0-8.el8 - Upgrade
Upgrade
redhat/eap7-artemis-wildfly-integrationto a version that resolves this vulnerability.Fixed in 0:1.0.4-1.redhat_00001.1.el6ea - Upgrade
Upgrade
redhat/eap7-bouncycastleto a version that resolves this vulnerability.Fixed in 0:1.68.0-2.redhat_00005.1.el6ea - Upgrade
Upgrade
redhat/eap7-hal-consoleto a version that resolves this vulnerability.Fixed in 0:3.2.14-1.Final_redhat_00001.1.el6ea - Upgrade
Upgrade
redhat/eap7-infinispanto a version that resolves this vulnerability.Fixed in 0:9.4.22-3.Final_redhat_00001.1.el6ea - Upgrade
Upgrade
redhat/eap7-ironjacamarto a version that resolves this vulnerability.Fixed in 0:1.4.30-1.Final_redhat_00001.1.el6ea - Upgrade
Upgrade
redhat/eap7-jboss-genericjmsto a version that resolves this vulnerability.Fixed in 0:2.0.9-1.Final_redhat_00001.1.el6ea - Upgrade
Upgrade
redhat/eap7-jboss-marshallingto a version that resolves this vulnerability.Fixed in 0:2.0.11-1.Final_redhat_00001.1.el6ea - Upgrade
Upgrade
redhat/eap7-jboss-server-migrationto a version that resolves this vulnerability.Fixed in 0:1.7.2-6.Final_redhat_00007.1.el6ea - Upgrade
Upgrade
redhat/eap7-jboss-weldto a version that resolves this vulnerability.Fixed in 3.1-api-0:3.1.0-6.SP3_redhat_00001.1.el6ea - Upgrade
Upgrade
redhat/eap7-jgroups-kubernetesto a version that resolves this vulnerability.Fixed in 0:1.0.16-1.Final_redhat_00001.1.el6ea - Upgrade
Upgrade
redhat/eap7-nettyto a version that resolves this vulnerability.Fixed in 0:4.1.60-1.Final_redhat_00001.1.el6ea - Upgrade
Upgrade
redhat/eap7-resteasyto a version that resolves this vulnerability.Fixed in 0:3.11.4-1.Final_redhat_00001.1.el6ea - Upgrade
Upgrade
redhat/eap7-undertowto a version that resolves this vulnerability.Fixed in 0:2.0.35-1.SP1_redhat_00001.1.el6ea - Upgrade
Upgrade
redhat/eap7-velocityto a version that resolves this vulnerability.Fixed in 0:2.3.0-1.redhat_00001.1.el6ea - Upgrade
Upgrade
redhat/eap7-weld-coreto a version that resolves this vulnerability.Fixed in 0:3.1.6-1.Final_redhat_00001.1.el6ea - Upgrade
Upgrade
redhat/eap7-wildflyto a version that resolves this vulnerability.Fixed in 0:7.3.7-1.GA_redhat_00002.1.el6ea - Upgrade
Upgrade
redhat/eap7-wildfly-elytronto a version that resolves this vulnerability.Fixed in 0:1.10.12-1.Final_redhat_00001.1.el6ea - Upgrade
Upgrade
redhat/eap7-wildfly-http-clientto a version that resolves this vulnerability.Fixed in 0:1.0.26-1.Final_redhat_00001.1.el6ea - Upgrade
Upgrade
redhat/eap7-xalan-j2to a version that resolves this vulnerability.Fixed in 0:2.7.1-36.redhat_00013.1.el6ea - Upgrade
Upgrade
redhat/eap7-yassonto a version that resolves this vulnerability.Fixed in 0:1.0.9-1.redhat_00001.1.el6ea - Upgrade
Upgrade
redhat/eap7-artemis-wildfly-integrationto a version that resolves this vulnerability.Fixed in 0:1.0.4-1.redhat_00001.1.el7ea - Upgrade
Upgrade
redhat/eap7-bouncycastleto a version that resolves this vulnerability.Fixed in 0:1.68.0-2.redhat_00005.1.el7ea - Upgrade
Upgrade
redhat/eap7-hal-consoleto a version that resolves this vulnerability.Fixed in 0:3.2.14-1.Final_redhat_00001.1.el7ea - Upgrade
Upgrade
redhat/eap7-infinispanto a version that resolves this vulnerability.Fixed in 0:9.4.22-3.Final_redhat_00001.1.el7ea - Upgrade
Upgrade
redhat/eap7-ironjacamarto a version that resolves this vulnerability.Fixed in 0:1.4.30-1.Final_redhat_00001.1.el7ea - Upgrade
Upgrade
redhat/eap7-jboss-genericjmsto a version that resolves this vulnerability.Fixed in 0:2.0.9-1.Final_redhat_00001.1.el7ea - Upgrade
Upgrade
redhat/eap7-jboss-marshallingto a version that resolves this vulnerability.Fixed in 0:2.0.11-1.Final_redhat_00001.1.el7ea - Upgrade
Upgrade
redhat/eap7-jboss-server-migrationto a version that resolves this vulnerability.Fixed in 0:1.7.2-6.Final_redhat_00007.1.el7ea - Upgrade
Upgrade
redhat/eap7-jboss-weldto a version that resolves this vulnerability.Fixed in 3.1-api-0:3.1.0-6.SP3_redhat_00001.1.el7ea - Upgrade
Upgrade
redhat/eap7-jgroups-kubernetesto a version that resolves this vulnerability.Fixed in 0:1.0.16-1.Final_redhat_00001.1.el7ea - Upgrade
Upgrade
redhat/eap7-nettyto a version that resolves this vulnerability.Fixed in 0:4.1.60-1.Final_redhat_00001.1.el7ea - Upgrade
Upgrade
redhat/eap7-resteasyto a version that resolves this vulnerability.Fixed in 0:3.11.4-1.Final_redhat_00001.1.el7ea - Upgrade
Upgrade
redhat/eap7-undertowto a version that resolves this vulnerability.Fixed in 0:2.0.35-1.SP1_redhat_00001.1.el7ea - Upgrade
Upgrade
redhat/eap7-velocityto a version that resolves this vulnerability.Fixed in 0:2.3.0-1.redhat_00001.1.el7ea - Upgrade
Upgrade
redhat/eap7-weld-coreto a version that resolves this vulnerability.Fixed in 0:3.1.6-1.Final_redhat_00001.1.el7ea - Upgrade
Upgrade
redhat/eap7-wildflyto a version that resolves this vulnerability.Fixed in 0:7.3.7-1.GA_redhat_00002.1.el7ea - Upgrade
Upgrade
redhat/eap7-wildfly-elytronto a version that resolves this vulnerability.Fixed in 0:1.10.12-1.Final_redhat_00001.1.el7ea - Upgrade
Upgrade
redhat/eap7-wildfly-http-clientto a version that resolves this vulnerability.Fixed in 0:1.0.26-1.Final_redhat_00001.1.el7ea - Upgrade
Upgrade
redhat/eap7-xalan-j2to a version that resolves this vulnerability.Fixed in 0:2.7.1-36.redhat_00013.1.el7ea - Upgrade
Upgrade
redhat/eap7-yassonto a version that resolves this vulnerability.Fixed in 0:1.0.9-1.redhat_00001.1.el7ea - Upgrade
Upgrade
redhat/eap7-artemis-wildfly-integrationto a version that resolves this vulnerability.Fixed in 0:1.0.4-1.redhat_00001.1.el8ea - Upgrade
Upgrade
redhat/eap7-bouncycastleto a version that resolves this vulnerability.Fixed in 0:1.68.0-2.redhat_00005.1.el8ea - Upgrade
Upgrade
redhat/eap7-hal-consoleto a version that resolves this vulnerability.Fixed in 0:3.2.14-1.Final_redhat_00001.1.el8ea - Upgrade
Upgrade
redhat/eap7-infinispanto a version that resolves this vulnerability.Fixed in 0:9.4.22-3.Final_redhat_00001.1.el8ea - Upgrade
Upgrade
redhat/eap7-ironjacamarto a version that resolves this vulnerability.Fixed in 0:1.4.30-1.Final_redhat_00001.1.el8ea - Upgrade
Upgrade
redhat/eap7-jboss-genericjmsto a version that resolves this vulnerability.Fixed in 0:2.0.9-1.Final_redhat_00001.1.el8ea - Upgrade
Upgrade
redhat/eap7-jboss-marshallingto a version that resolves this vulnerability.Fixed in 0:2.0.11-1.Final_redhat_00001.1.el8ea - Upgrade
Upgrade
redhat/eap7-jboss-server-migrationto a version that resolves this vulnerability.Fixed in 0:1.7.2-6.Final_redhat_00007.1.el8ea - Upgrade
Upgrade
redhat/eap7-jboss-weldto a version that resolves this vulnerability.Fixed in 3.1-api-0:3.1.0-6.SP3_redhat_00001.1.el8ea - Upgrade
Upgrade
redhat/eap7-jgroups-kubernetesto a version that resolves this vulnerability.Fixed in 0:1.0.16-1.Final_redhat_00001.1.el8ea - Upgrade
Upgrade
redhat/eap7-nettyto a version that resolves this vulnerability.Fixed in 0:4.1.60-1.Final_redhat_00001.1.el8ea - Upgrade
Upgrade
redhat/eap7-resteasyto a version that resolves this vulnerability.Fixed in 0:3.11.4-1.Final_redhat_00001.1.el8ea - Upgrade
Upgrade
redhat/eap7-undertowto a version that resolves this vulnerability.Fixed in 0:2.0.35-1.SP1_redhat_00001.1.el8ea - Upgrade
Upgrade
redhat/eap7-velocityto a version that resolves this vulnerability.Fixed in 0:2.3.0-1.redhat_00001.1.el8ea - Upgrade
Upgrade
redhat/eap7-weld-coreto a version that resolves this vulnerability.Fixed in 0:3.1.6-1.Final_redhat_00001.1.el8ea - Upgrade
Upgrade
redhat/eap7-wildflyto a version that resolves this vulnerability.Fixed in 0:7.3.7-1.GA_redhat_00002.1.el8ea - Upgrade
Upgrade
redhat/eap7-wildfly-elytronto a version that resolves this vulnerability.Fixed in 0:1.10.12-1.Final_redhat_00001.1.el8ea - Upgrade
Upgrade
redhat/eap7-wildfly-http-clientto a version that resolves this vulnerability.Fixed in 0:1.0.26-1.Final_redhat_00001.1.el8ea - Upgrade
Upgrade
redhat/eap7-xalan-j2to a version that resolves this vulnerability.Fixed in 0:2.7.1-36.redhat_00013.1.el8ea - Upgrade
Upgrade
redhat/eap7-yassonto a version that resolves this vulnerability.Fixed in 0:1.0.9-1.redhat_00001.1.el8ea - Upgrade
Upgrade
redhat/eap7-nettyto a version that resolves this vulnerability.Fixed in 0:4.1.63-1.Final_redhat_00001.1.el8ea - Upgrade
Upgrade
redhat/eap7-nettyto a version that resolves this vulnerability.Fixed in 0:4.1.63-1.Final_redhat_00001.1.el7ea - Upgrade
Upgrade
redhat/candlepinto a version that resolves this vulnerability.Fixed in 0:4.1.13-1.el7 - Upgrade
Upgrade
redhat/candlepinto a version that resolves this vulnerability.Fixed in 0:4.1.13-1.el8 - Upgrade
Upgrade
debian/nettyto a version that resolves this vulnerability.Fixed in 1:4.1.48-4+deb11u2Fixed in 1:4.1.48-7+deb12u1Fixed in 1:4.1.48-10 - Upgrade
Upgrade
redhat/netty-codec-httpto a version that resolves this vulnerability.Fixed in 4.1.60. - Upgrade
Upgrade
io.netty:netty-codec-http2to a version that resolves this vulnerability.Fixed in 4.1.60.Final - Configuration
If you cannot upgrade, implement a custom ChannelInboundHandler and insert it in the ChannelPipeline behind `Http2StreamFrameToHttpObjectCodec` to perform Content-Length validation, because Content-Length from the original HTTP/2 request is propagated without validation and can enable request smuggling when forwarded to a backend over HTTP/1.1.
Netty HTTP/2-to-HTTP/1.1 conversion pipeline ChannelPipeline behind Http2StreamFrameToHttpObjectCodec = Add a custom ChannelInboundHandler to validate Content-Length (and ensure it is checked before forwarding/proxying as HTTP/1.1)
Event History
Parent advisories
This vulnerability appears in the following advisories.
Frequently Asked Questions
What is the severity of CVE-2021-21295?
CVE-2021-21295 is classified as a moderate severity vulnerability.
How do I fix CVE-2021-21295?
To fix CVE-2021-21295, update to Netty version 4.1.60.Final or a later version.
What are the affected versions for CVE-2021-21295?
CVE-2021-21295 affects Netty versions up to 4.0.x.
Is CVE-2021-21295 present in my application?
CVE-2021-21295 may be present if your application uses affected versions of the Netty library.
What is the impact of CVE-2021-21295?
CVE-2021-21295 can lead to improper handling of the Content-Length header in HTTP/2 requests when proxied.