openvpn crashes when run with fips openssl
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
OpenVPN |
Unknown
|
Unknown
|
|||
openvpn (Ubuntu) |
Fix Released
|
Undecided
|
Joy Latten | ||
Xenial |
Fix Released
|
Undecided
|
Andreas Hasenack | ||
Bionic |
Fix Released
|
Undecided
|
Andreas Hasenack | ||
Cosmic |
Fix Released
|
Undecided
|
Andreas Hasenack | ||
Disco |
Fix Released
|
Undecided
|
Joy Latten |
Bug Description
[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.
The context flag value, EVP_MD_
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 context flag value, EVP_MD_
xenial with version 2.3.x, has additional change of using SHA256 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.
Related branches
- Andreas Hasenack: Approve
- Seth Arnold (community): Approve
-
Diff: 373 lines (+351/-0)3 files modifieddebian/changelog (+7/-0)
debian/patches/openvpn-fips140-2.3.2.patch (+343/-0)
debian/patches/series (+1/-0)
- Andreas Hasenack: Approve
-
Diff: 132 lines (+110/-0)3 files modifieddebian/changelog (+7/-0)
debian/patches/openvpn-fips-2.4.patch (+102/-0)
debian/patches/series (+1/-0)
- Andreas Hasenack: Approve
-
Diff: 132 lines (+110/-0)3 files modifieddebian/changelog (+7/-0)
debian/patches/openvpn-fips-2.4.patch (+102/-0)
debian/patches/series (+1/-0)
- Andreas Hasenack: Approve
- Seth Arnold (community): Approve
- Canonical Server: Pending requested
-
Diff: 132 lines (+110/-0)3 files modifieddebian/changelog (+7/-0)
debian/patches/openvpn-fips-2.4.patch (+102/-0)
debian/patches/series (+1/-0)
description: | updated |
description: | updated |
description: | updated |
Changed in openvpn (Ubuntu Disco): | |
status: | Incomplete → New |
Changed in openvpn (Ubuntu Bionic): | |
status: | Incomplete → New |
Changed in openvpn (Ubuntu Xenial): | |
status: | Incomplete → New |
description: | updated |
Changed in openvpn (Ubuntu Disco): | |
status: | New → In Progress |
assignee: | nobody → Joy Latten (j-latten) |
Changed in openvpn (Ubuntu Cosmic): | |
status: | New → Incomplete |
status: | Incomplete → In Progress |
Changed in openvpn (Ubuntu Bionic): | |
status: | New → In Progress |
assignee: | nobody → Andreas Hasenack (ahasenack) |
Changed in openvpn (Ubuntu Cosmic): | |
assignee: | nobody → Andreas Hasenack (ahasenack) |
description: | updated |
Changed in openvpn (Ubuntu Xenial): | |
status: | New → In Progress |
assignee: | nobody → Andreas Hasenack (ahasenack) |
Hi,
I'm really unsure what the expectation here is now.
This does not contain steps to reproduce the issue nor any suggested changes to make it work better.
Both would be needed.
Also is this actually the code in the main archive or any FIPS special PPA?