[Sorry James for the dupe - used the wrong sender for the list]

On Fri, 01 Aug 2008, James Yonan wrote:

> Download:
> 
> http://openvpn.net/download.html
> 
> 2008.07.31 -- Version 2.1_rc9
> 
> * Security Fix -- affects non-Windows OpenVPN clients running
>    OpenVPN 2.1-beta14 through 2.1-rc8 (OpenVPN 2.0.x clients are NOT
>    vulnerable nor are any versions of the OpenVPN server vulnerable).
>    An OpenVPN client connecting to a malicious or compromised
>    server could potentially receive an "lladdr" or "iproute"
>    configuration directive from the server which could cause arbitrary
>    code execution on the client. A successful attack requires that (a)
>    the client has agreed to allow the server to push configuration
>    directives to it by including "pull" or the macro "client" in its
>    configuration file, (b) the client successfully authenticates the
>    server, (c) the server is malicious or has been compromised and is
>    under the control of the attacker, and (d) the client is running a
>    non-Windows OS.  Credit: David Wagner.
> 
> * Miscellaneous defensive programming changes to multiple
>    areas of the code.  In particular, use of the system() call
>    for calling executables such as ifconfig, route, and
>    user-defined scripts has been completely revamped in favor
>    of execve() on unix and CreateProcess() on Windows.

Hi James,

while packaging the new release for FreeBSD ports, I made some
observations:

1 - --script-security is documented in openvpn --help,
    but not in the manual page.

2 - apparently the security issue has been assigned CVE-2008-3459 (at
    least that one references your changelog and adumbrates the
    described security issue you fixed).

3 - one part of the self-test suite ("make check") needs to be adjusted
    to cater for the tightened script security. Patch attached (against
    SVN) - it also adds retrying if the addresses are in use. Note there
    are two "svn propedit" or "svn propset" required for an additional
    --down script - see attached patch

Best regards
Matthias Andree
Index: t_cltsrv.sh
===================================================================
--- t_cltsrv.sh (revision 3198)
+++ t_cltsrv.sh (working copy)
@@ -1,7 +1,7 @@
 #! /bin/sh
 #
 # t_cltsrv.sh - script to test OpenVPN's crypto loopback
-# Copyright (C) 2005,2006  Matthias Andree
+# Copyright (C) 2005, 2006, 2008  Matthias Andree
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -38,22 +38,50 @@
     fi
     ;;
 esac
-echo "the following test will take about two minutes..." >&2
-set +e
-(
-./openvpn --cd "${srcdir}" ${addopts} --down 'echo "srv:${signal}" >&3 ; : #' 
--tls-exit --ping-exit 180 --config sample-config-files/loopback-server &
-./openvpn --cd "${srcdir}" ${addopts} --down 'echo "clt:${signal}" >&3 ; : #' 
--tls-exit --ping-exit 180 --config sample-config-files/loopback-client
-) 3>log.$$.signal >log.$$ 2>&1
-e1=$?
-wait $!
-e2=$?
-grep -v ":inactive$" log.$$.signal >/dev/null && { cat log.$$.signal ; echo ; 
cat log.$$ ; exit 1 ; }
 
+# make sure that the --down script is executable -- fail (rather than
+# skip) test if it isn't.
+downscript="t_cltsrv-down.sh"
+test -x "${srcdir}"/$downscript || chmod +x "${srcdir}"/$downscript || { echo 
>&2 "$downscript is not executable, failing." ; exit 1 ; }
+echo "The following test will take about two minutes." >&2
+echo "If the addresses are in use, this test will retry up to two times." >&2
+
+# go
+success=0
+for i in 1 2 3 ; do
+  set +e
+  (
+  ./openvpn --script-security 2 --cd "${srcdir}" ${addopts} --setenv role srv 
--down "$downscript" --tls-exit --ping-exit 180 --config 
sample-config-files/loopback-server &
+  ./openvpn --script-security 2 --cd "${srcdir}" ${addopts} --setenv role clt 
--down "$downscript" --tls-exit --ping-exit 180 --config 
sample-config-files/loopback-client
+  ) 3>log.$$.signal >log.$$ 2>&1
+  e1=$?
+  wait $!
+  e2=$?
+  grep 'TCP/UDP: Socket bind failed on local address.*in use' log.$$ 
>/dev/null && {
+    echo 'address in use, retrying in 150 s'
+    sleep 150
+    continue
+  }
+  grep -v ':inactive$' log.$$.signal >/dev/null && { cat log.$$.signal ; echo 
; cat log.$$ ; exit 1 ; }
+  success=1
+  break
+done
+
 set -e
 
-if [ $e1 != 0 ] || [ $e2 != 0 ] ; then
-    cat log.$$
-    exit 1
+# exit code - defaults to 0, PASS
+ec=0
+
+if [ $success != 1 ] ; then
+  # couldn't run test -- addresses in use, skip test
+  cat log.$$
+  ec=77
+elif [ $e1 != 0 ] || [ $e2 != 0 ] ; then
+  # failure -- fail test
+  cat log.$$
+  ec=1
 fi
+
 rm log.$$ log.$$.signal
 trap 0
+exit $ec
Index: t_cltsrv-down.sh
===================================================================
--- t_cltsrv-down.sh    (revision 0)
+++ t_cltsrv-down.sh    (revision 0)
@@ -0,0 +1,2 @@
+#! /bin/sh
+echo "${role}:${signal}" >&3

Property changes on: t_cltsrv-down.sh
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:eol-style
   + native

Attachment: pgpZJaSoU6v4r.pgp
Description: PGP signature

Reply via email to