[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4 4/7] nbd/server: CVE-2024-7409: Drop non-negotiating clien
From: |
Daniel P . Berrangé |
Subject: |
Re: [PATCH v4 4/7] nbd/server: CVE-2024-7409: Drop non-negotiating clients |
Date: |
Wed, 7 Aug 2024 19:28:26 +0100 |
User-agent: |
Mutt/2.2.12 (2023-09-09) |
On Wed, Aug 07, 2024 at 12:43:30PM -0500, Eric Blake wrote:
> A client that opens a socket but does not negotiate is merely hogging
> qemu's resources (an open fd and a small amount of memory); and a
> malicious client that can access the port where NBD is listening can
> attempt a denial of service attack by intentionally opening and
> abandoning lots of unfinished connections. The previous patch put a
> default bound on the number of such ongoing connections, but once that
> limit is hit, no more clients can connect (including legitimate ones).
> The solution is to insist that clients complete handshake within a
> reasonable time limit, defaulting to 10 seconds. A client that has
> not successfully completed NBD_OPT_GO by then (including the case of
> where the client didn't know TLS credentials to even reach the point
> of NBD_OPT_GO) is wasting our time and does not deserve to stay
> connected. Later patches will allow fine-tuning the limit away from
> the default value (including disabling it for doing integration
> testing of the handshake process itself).
>
> Note that this patch in isolation actually makes it more likely to see
> qemu SEGV after nbd-server-stop, as any client socket still connected
> when the server shuts down will now be closed after 10 seconds rather
> than at the client's whims. That will be addressed in the next patch.
>
> For a demo of this patch in action:
> $ qemu-nbd -f raw -r -t -e 10 file &
> $ nbdsh --opt-mode -c '
> H = list()
> for i in range(20):
> print(i)
> H.insert(i, nbd.NBD())
> H[i].set_opt_mode(True)
> H[i].connect_uri("nbd://localhost")
> '
>
> where later connections get to start progressing once earlier ones are
> forcefully dropped for taking too long, rather than hanging.
>
> Suggested-by: Daniel P. Berrangé <berrange@redhat.com>
> Signed-off-by: Eric Blake <eblake@redhat.com>
> ---
> nbd/server.c | 31 ++++++++++++++++++++++++++++++-
> nbd/trace-events | 1 +
> 2 files changed, 31 insertions(+), 1 deletion(-)
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
- [PATCH for-9.1 v4 0/7] CVE-2024-7409, Eric Blake, 2024/08/07
- [PATCH v4 2/7] nbd/server: Plumb in new args to nbd_client_add(), Eric Blake, 2024/08/07
- [PATCH v4 1/7] nbd: Minor style fixes, Eric Blake, 2024/08/07
- [PATCH v4 3/7] nbd/server: CVE-2024-7409: Change default max-connections to 100, Eric Blake, 2024/08/07
- [PATCH v4 4/7] nbd/server: CVE-2024-7409: Drop non-negotiating clients, Eric Blake, 2024/08/07
- Re: [PATCH v4 4/7] nbd/server: CVE-2024-7409: Drop non-negotiating clients,
Daniel P . Berrangé <=
- [PATCH v4 6/7] qemu-nbd: Allow users to adjust handshake limit, Eric Blake, 2024/08/07
- [PATCH v4 5/7] nbd/server: CVE-2024-7409: Close stray client sockets at shutdown, Eric Blake, 2024/08/07
- [PATCH v4 7/7] nbd/server: Allow users to adjust handshake limit in QMP, Eric Blake, 2024/08/07
- Re: [PATCH for-9.1 v4 0/7] CVE-2024-7409, Denis V. Lunev, 2024/08/22