]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
sitnl: set FD_CLOEXEC on socket to prevent abuse
authorAntonio Quartulli <antonio@mandelbit.com>
Tue, 28 Oct 2025 16:28:38 +0000 (17:28 +0100)
committerGert Doering <gert@greenie.muc.de>
Tue, 28 Oct 2025 16:31:35 +0000 (17:31 +0100)
Since OpenVPN spawns various child processes, it is important
that sockets are closed after calling exec.

The sitnl socket didn't have the right flag set, resulting
in it surviving in, for example, connect/disconnect scripts
and giving the latter a chance to abuse the socket.

Ensure this doesn't happen by setting FD_CLOEXEC on
this socket right after creation.

Reported-by: Joshua Rogers <contact@joshua.hu>
Found-by: ZeroPath (https://zeropath.com/)
Change-Id: I54845bf4dd17d06cfc3b402f188795f74f4b1d3e
Signed-off-by: Antonio Quartulli <antonio@mandelbit.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/1314
Message-Id: <20251028162843.18189-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg33952.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
CMakeLists.txt
src/openvpn/networking_sitnl.c
tests/unit_tests/openvpn/Makefile.am

index 5954a6e9c74fb0ff65d1c32f917ebbbd11b29ae3..bf754f35278018effcd679d3daf41e6e5c60afd1 100644 (file)
@@ -923,6 +923,7 @@ if (BUILD_TESTING)
             src/openvpn/crypto_openssl.c
             src/openvpn/crypto.c
             src/openvpn/crypto_epoch.c
+            src/openvpn/fdmisc.c
             src/openvpn/otime.c
             src/openvpn/packet_id.c
             )
index b3adb16ba03fcc25211df73f420bec1fe4bf3412..3e20b7004aeb33a50c76152a41b24dd73f72da59 100644 (file)
@@ -27,6 +27,7 @@
 
 #include "dco.h"
 #include "errlevel.h"
+#include "fdmisc.h"
 #include "buffer.h"
 #include "misc.h"
 #include "networking.h"
@@ -181,6 +182,9 @@ sitnl_socket(void)
         return fd;
     }
 
+    /* set close on exec to avoid child processes access the socket */
+    set_cloexec(fd);
+
     if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &sndbuf, sizeof(sndbuf)) < 0)
     {
         msg(M_WARN | M_ERRNO, "%s: SO_SNDBUF", __func__);
index 997703a876fc96dee67ac5f7134744f0cf2687a1..0f13172b112950db4c63bd5cb287f0bdd39ea4c0 100644 (file)
@@ -196,6 +196,7 @@ networking_testdriver_SOURCES = test_networking.c mock_msg.c \
        $(top_srcdir)/src/openvpn/crypto_epoch.c \
        $(top_srcdir)/src/openvpn/crypto_mbedtls.c \
        $(top_srcdir)/src/openvpn/crypto_openssl.c \
+       $(top_srcdir)/src/openvpn/fdmisc.c \
        $(top_srcdir)/src/openvpn/otime.c \
        $(top_srcdir)/src/openvpn/packet_id.c \
        $(top_srcdir)/src/openvpn/platform.c