]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
tcp: apply CLOEXEC to accepted socket, not listener
authorJoshua Rogers <MegaManSec@users.noreply.github.com>
Tue, 21 Oct 2025 17:20:52 +0000 (01:20 +0800)
committerGert Doering <gert@greenie.muc.de>
Tue, 28 Oct 2025 16:50:59 +0000 (17:50 +0100)
The accept path calls set_cloexec(sd) after accept(). That re-flags the
listening socket, which is already CLOEXEC from create_socket_tcp(), and
leaves new_sd inheritable. As a result, client-connect and auth scripts
spawned after accept can inherit the connected socket and read or write
the raw TCP stream. This defeats the stated intent to prevent scripts from
accessing the client socket.

This bug was found using ZeroPath.

Signed-off-by: Joshua Rogers <MegaManSec@users.noreply.github.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <-MNw5Hu8h0rHV18x36ISt7V0UHchIO4i-JoAeV_wlxS1AmDIAe7YVYNput3_r2hiu3HhwxkhGyUhv4-iH_E7mf7nGjvocmGXlDq7Tjly5cE=@joshua.hu>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg33823.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
src/openvpn/socket.c

index 40a86fbb69a2a6b8735a165009a95a9443ce1179..8eac96dd0420c21f8a09f34930e6ea326e7fd80c 100644 (file)
@@ -836,7 +836,7 @@ socket_do_accept(socket_descriptor_t sd, struct link_socket_actual *act, const b
     {
         /* set socket file descriptor to not pass across execs, so that
          * scripts don't have access to it */
-        set_cloexec(sd);
+        set_cloexec(new_sd);
     }
     return new_sd;
 }