win32: restrict loading plugin dependencies (DLLs) to plugin, app
and system directories.
win32: run openvpn.exe from the interactive service at "high integrity
level", that is, process memory of openvpn.exe and all its threads are
protected from tampering. Signals/Events are still permitted.
win32: openvpnserv: strictly filter user-defined environment variables
before passing to openvpn.exe (CVE-2026-121720)
(Issue found by @refiaa, tracked in
Github: OpenVPN/openvpn-private-issues#186)
win32: openvpnserv: make validation of openvpn command line more robust
to invalid-quoting attacks (CVE-2026-115342)
win32: openvpn.exe: change parsing of commandline to use the same
function that the interactive service uses (CommandLineToArgvW())
(CVE-2026-115342)
(Issues found by Heiko Hund, tracked in
Github: OpenVPN/openvpn-private-issues#184)
Username/Password parsing from --auth-user-pass file (or inline)
left parts of overlong usernames in the password field. Fix.
(GH OpenVPN/openvpn#1140)
win32: openvpnserv: fix memory leak for security descriptors
win32: repair logging of errors in Windows tun_read_queue()
win32: avoid accessing uninitialized structure data if GetInterfaceInfo()
or GetPerAdapterInfo() fail
win32: openvpnserv: avoid double free() if GetTokenInformation() fails
win32: openvpnserv: avoid potential format-string issue on registry defaults
win32: openvpnserv: repair error reporting on RegGetValueA() failures
inside GetItfDnsServersV4()
win32: openvpnserv: fix inet_ntop() return code check in
GetItfDnsServersV6(), making it ignore DHCP-provided DNS servers.
route: repair printing of ROUTE_GATEWAY/ROUTE6_GATEWAY info - the actual gateway handling was correct, just not
printing anything anymore.
config: check_file_access: fix --extra-certs access check
win32: tun: free gc arena in windows_set_mtu() (mem leak in error path)
route: close socket in Haiku get_default_gateway() (FD leak)
win32: openvpnserv: skip conversion of empty domain names
win32: cmake+mingw: don't prefix the event message DLL with lib
(it was building 'libopenvpnservmsg.dll' instead of 'openvpnservmsg.dll')
win32: pass the buffer size in bytes to get_openvpn_reg_value()
PUSH_UPDATE server: free temporary options after sending message (memleak)
crypto_epoch: wipe key material with secure_memzero()
do not look up "none" cipher in OpenSSL - this avoids leaving an "error"
on the OpenSSL error stack, which can then later lead to spurious
SSL error prints on CRL loading.
Make CRL reload EOF detection independent of stale error queue entries
(GH: OpenVPN/openvpn#1104)
tls_crypt: fix handling of "cipher final output" (which is always empty
on today's SSL libraries, so no impact today, but might not be in future)
crypto: ASSERT() opt before first use in openvpn_decrypt_aead()
auth_token: wipe the server secret key after loading it
port-share: do not write journal file through symlinks or hardlinks
(and also document how port-share directory should be set up)
(GH OpenVPN/openvpn#1124)
dns-updown: close first pipe if creating the second one fails
(avoid leaking file descriptors on error)
init: check parameters for NULL before strlen() in send_cc_message
(not triggerable today)
crypto_openssl: Clear PEM decoded key data before freeing it
Increase the buffer size for alert-message in management user-pass query
(so long usernames can be hinted towards the GUI)
win32: openvpnserv: validate message size for dns/nrpt/wins handlers
(GH: OpenVPN/openvpn#1129)
win32: plugin: detect too long plugin paths on Windows
win32: openvpnserv: null-terminate iface.name in address and route handlers
(GH: OpenVPN/openvpn#1130)