Determining whether VSV00008 affects 4.0.x
Sylvain Beucler
beuc at beuc.net
Wed Mar 16 18:34:20 UTC 2022
Hello Martin,
Thank you for your detailed answer.
Indeed I could reproduce the 'Connection:' behavior in 6.0.9 (unfixed,
"keep-alive") vs 6.0.10 (fixed, "close") using an undersized GET body,
mimicking the test case timeout:
$ nc -v localhost 6081 < req.txt
(req.txt attached)
However I noted that 4.0.x always sets 'Connection: close' (and does
close the connection) using this test, with or without my patch, unlike
3.0.7 or 4.1.11, so it seems there's a specific behavior for the whole
4.0.x branch.
(no actual request smuggling detected with this test though)
If you happen to have a reproducer for this vulnerability I'd be
grateful and perform more tests. Otherwise I'll probably abstain from
untestable patching and point users to the mitigation.
Cheers!
Sylvain
PS: for the record 3.0.7 and 4.0.x < 4.0.2 do set "Connection:
keep-alive" with f00008.vtc AFAICT
On 15/03/2022 11:18, Martin Blix Grydeland wrote:
> I believe the reason that you are seeing the test case succeed on 4.0.x
> regardless of if the fix for VSV00008 has been applied comes down to how
> the test case is constructed. The test case makes the Varnish server
> answer with a synthetic response (a response generated by VCL code
> internal to the Varnish server, as opposed to backend generated
> responses that Varnish normally delivers), because that is a convenient
> way to trigger the relevant code paths. And in Varnish prior to version
> 4.1 I believe, Varnish would always close the client connection when
> doing synthetic responses, meaning the test case always succeeds there.
>
> Though synthetic responses are not the only way to trigger the
> problematic code paths in Varnish. Any request handling that would end
> up with Varnish wanting to read and discard the unused request body from
> the client socket before starting a response delivery would be
> susceptible to the bug. One way to test it could maybe be to use a GET
> request with a request body on a URL that would result in a cache hit.
> These would then I presume also open the vulnerability on 4.0.x, but
> unfortunately a test case using this approach has not been constructed.
>
> When working on this vulnerability, we did not test specifically any
> Varnish versions prior to the supported releases, which stops at Varnish
> 6.0 LTS series as the oldest. Though code analysis suggests this
> vulnerability to be present since the very first releases, as listed in
> our vulnerability description.
>
> Regards,
> Martin Blix Grydeland
>
> On Fri, 11 Mar 2022 at 17:59, Sylvain Beucler <beuc at beuc.net
> <mailto:beuc at beuc.net>> wrote:
>
> Hello,
>
> I'm working on Debian security updates, and we're looking at fixing
> VSV00008 for Debian jessie (varnish 4.0.2).
>
> AFAICT this version is not affected by VSV00008. I'm posting my
> findings
> here in case this helps others distros or vendors.
>
> The test case for this vulnerability (f00008.vtc) passes for 4.0.x
> starting with 4.0.2.
> (note: backporting the test case requires s/resp.reason/resp.msg/)
>
> git-bissect shows that from:
> https://github.com/varnishcache/varnish-cache/commit/d11d4419f3f9fa1d70e984f80c2078ea44e9e53c
> <https://github.com/varnishcache/varnish-cache/commit/d11d4419f3f9fa1d70e984f80c2078ea44e9e53c>
> (<4.0.2) "Deal with any remaining request body in cnt_synth"
> until:
> https://github.com/varnishcache/varnish-cache/commit/0c35ac8a7df799b53c31d8429206b928a9b9ca2b
> <https://github.com/varnishcache/varnish-cache/commit/0c35ac8a7df799b53c31d8429206b928a9b9ca2b>
> (<4.1.0-beta1) "Use the HTTP/1 VFP's for fetching the req.body"
> varnish-cache does not set "connection: keep-alive", but sets
> "connection: closes" as expected, which also matches the documentation
> work-around for VSV00008.
>
> Backporting VSV00008's fix for 4.0.2 does not appear to alter this
> behavior.
>
> So AFAICT we do not need to fix VSV00008 for 4.0.2 in Debian jessie.
> If you think I'm mistaken I'd be grateful if you could let me know.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: CVE-2022-23959.patch
Type: text/x-patch
Size: 782 bytes
Desc: not available
URL: <https://www.varnish-cache.org/lists/pipermail/varnish-misc/attachments/20220316/2b766077/attachment-0001.bin>
-------------- next part --------------
GET / HTTP/1.1
Host: localhost:6081
Content-Length: 25
GET /smug HTTP/1.0
More information about the varnish-misc
mailing list