This bug has been reported: 
1.Upstream Bug: https://community.openvpn.net/openvpn/ticket/725
2.Suse Bug report: 
https://build.opensuse.org/package/view_file/network:vpn/openvpn/openvpn-fips140-2.3.2.patch


** Description changed:

  [IMPACT]
+ openvpn segfaults when using fips-mode openssl because of MD5.
+ 
+ xenial has version 2.3.x and subsequent releases have 2.4.x.
+ MD5 is used in 2 places in 2.3.x and one place in 2.4.x.
+  
+ First place:
  openvpn when estabishing a tls connection will segfault when used with 
Ubuntu's FIPS 140-2 libcrypto.so (openssl).
  
  openvpn tls connection does TLS PRF(pseudorandom function) to produce 
securely generated pseudo random output that is used to generate keys.
  MD5 is used as the hash in this computation.
  
  FIPS 140-2 does not permit MD5 use except when used for pseudorandom
  function (PRF). When openvpn requests MD5 operation to FIPS-mode
  libcrypto.so, since it is not allowed in general, FIPS-mode libcrypto.so
  goes into an error state.
  
- openvpn needs to set and pass a flag that FIPS-mode libcrypto.so
- recognizes and that indicates it is using MD5 for PRF, thereby FIPS-mode
- libcrypto.so will grant the request instead of entering an error state.
- In non-FIPS libcrypto.so the flag has no meaning.
+ The context flag value, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW, is defined in
+ both FIPS and non-FIPS libcrypto.so. However, the MD5 check for it is
+ only in FIPS-mode libcrypto.so to permit MD5. In non-FIPS libcrypto.so
+ this check does not exist since it always permits MD5. openvpn should
+ use this flag when it makes its MD5 request.
  
- **NOTE: The openvpn 2.3 version in xenial has the above issue and an
- additional one. It also use MD5 internally for configuration status
- verification. It is not communicated externally. However, this
- particular use of MD5 is not allowed by FIPS and thus when openvpn tries
- to use FIPS-mode libcrypto.so to compute MD5, it results in openvpn
- segfaulting. This 2nd issue was fixed by upstream openvpn community in
- subsequent versions(2.4) to not use MD5 and use SHA(256) instead and
- thus why bionic and disco do not require any change for this 2nd issue.
+ Second place (only in 2.3.x): 
+ **NOTE: The openvpn 2.3 version in xenial has the above issue and an 
additional one. It also use MD5 internally for configuration status 
verification. It is not communicated externally. However, this particular use 
of MD5 is not allowed by FIPS and thus when openvpn tries to use FIPS-mode 
libcrypto.so to compute MD5, it results in openvpn segfaulting. This 2nd issue 
was fixed by upstream openvpn community in subsequent versions(2.4) to not use 
MD5 and use SHA(256) instead and thus why bionic, cosmic, and disco do not 
require any change for this 2nd issue.
  
  [TEST]
  Test data including commands and parameters are included below.
  
  Testing comprised establishing a tls connection between an openvpn
  client and server. Once the connection was successfully established, a
  ping thru the established vpn tunnel was done from the client for
  assurance.
  
  Interoperability testing was done to ensure no regression. Test data
  reflects testing was done between openvpn server and client with and
  without the patch and between various releases (xenial, bionic, and
  disco).
  
  Test was also done with FIPS-enabled libcrypto.so to ensure everything
  worked in FIPS mode.
  
  [REGRESSION]
- The FIPS-mode libcrypto.so flag passed by openvpn has no meaning in non-FIPS 
libcrypto.so. Thus nothing changes for openvpn behaviour in non-FIPS mode in 
regards to this.
+ The context flag value, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW, is defined in both 
FIPS-mode openssl and non-FIPS openssl. However, the MD5-permit check against 
this flag-value does not occur in non-FIPS libcrypto.so, so there should be no 
change in behaviour. non-FIPS libcrypto.so should continue to service all MD5 
requests.   
  
- xenial has additional change of using SHA instead of MD5 for
- configuration status verification. This is an internal hash that is not
- communicated externally. Thus it should not regress interoperability or
- ability to establish connections.
+ xenial with version 2.3.x, has additional change of using SHA instead of
+ MD5 for configuration status verification. This is an internal hash that
+ is not communicated externally. Thus it should not regress
+ interoperability or ability to establish connections.

** Bug watch added: community.openvpn.net/openvpn/ #725
   https://community.openvpn.net/openvpn/ticket/725

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1807439

Title:
  openvpn crashes when run with fips openssl

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/openvpn/+bug/1807439/+subscriptions

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to