oss-sec mailing list archives

Three TLS Bugs in GoAhead web server prior to 6.1.1


From: Alan Coopersmith <alan.coopersmith () oracle com>
Date: Tue, 27 Oct 2026 17:17:41 -0700

EmbedThis GoAhead is an embeddable web server available under GPL or
commercial license (see https://github.com/embedthis/goahead ).

It can be compiled against a choice of TLS backends.

https://foxio.io/blog/choose-your-backend-three-tls-bugs-in-goahead
discloses vulnerabilities in the GoAhead code for three of those
backends: OpenSSL, LibreSSL, and Mbed TLS.

The TLDR section on that page says:
GoAhead is used in hundreds of millions of IoT, Firewall, OT, and
Military devices including those from Palo Alto Networks, Comcast,
D-Link, HP, Canon, Honeywell, GE, Oracle, Siemens, Rockwell, Digi,
Lockheed Martin, Boeing, and more.

Three independent bugs in GoAhead's TLS integrations can leave revoked
client certificates accepted, encrypted sessions recoverable to an
observer or a configured chain-depth limit unenforced. Exposure
depends on the TLS library and the verification settings built into
the device:

* OpenSSL-compatible backend - Critical, CVSS 9.1 - CRL loaded but not
  enforced, revoked client certificates are silently accepted.
  GOAHEAD-SA-2026-0006.

* LibreSSL legacy verifier - High, CVSS 7.4 - An over-depth client chain
  is accepted when client certificates are required but issuer checking
  is disabled. This bypasses the chain-depth restriction.
  GOAHEAD-SA-2026-0004.

* Mbed TLS - Medium, CVSS 5.9 - A buffer-length typo reduces a 2048-bit
  DH modulus to one byte. TLS 1.2 DHE_RSA sessions are decryptable when
  the client accepts the broken parameters. GOAHEAD-SA-2026-0005.


TLS build:                      OpenSSL-compatible backend
GoAhead versions:               >= 3.4.5, <= 6.1.0
Required configuration:         mTLS enabled with a CRL configured. Revoked
                                client certificates remain accepted even with
                                issuer verification enabled.
Fix or mitigation:              Upgrade to 6.1.1 or later.


TLS build:                      Mbed TLS backend
GoAhead versions:               >= 4.0.2, <= 6.1.0
Required configuration:         TLS 1.2 DHE_RSA negotiated with a client
                                that accepts the broken DH parameters.
Fix or mitigation:              Upgrade to 6.1.1 or later, disable finite-field
                                DHE suites, or use the OpenSSL backend.


TLS build:                      LibreSSL legacy verifier — 3.2.x or 3.3.2–3.3.6
GoAhead versions:               <= 6.1.0
Required configuration:         VERIFY_PEER=1 and VERIFY_ISSUER=0.
                                An over-depth client chain is accepted.
Fix or mitigation:              Enable VERIFY_ISSUER=1 with a trusted CA bundle,
                                or use OpenSSL / LibreSSL 4.x.



The web page then goes into much further detail I've not included here.

These seem to correspond to these GHSA advisories in their repo:

https://github.com/embedthis/goahead/security/advisories/GHSA-5m75-xq69-c3c5
 OpenSSL CRL loaded but not enforced in GoAhead sslOpen() (src/openssl.c):
 revoked client certificates are silently accepted

https://github.com/embedthis/goahead/security/advisories/GHSA-fmvx-2xfx-2gq4
 MbedTLS DH parameter truncation destroys forward secrecy: a length typo in
 sslOpen() (src/mbedtls.c) transmits a 1-byte DH modulus on TLS 1.2 DHE-RSA
 handshakes

https://github.com/embedthis/goahead/security/advisories/GHSA-r392-vqwx-3r4g
 mTLS client-certificate bypass: GoAhead's verifyClientCertificate() depth
 guard is skipped when the verifier reports a prior error, accepting an
 over-depth client chain on LibreSSL legacy-verifier builds

https://github.com/embedthis/goahead/security lists additional vulnerabilities
fixed in their 6.1.1 release.


Current thread: