Repository navigation
GoAhead v6.1.1 Release Notes
Release Date: August 2, 2026 (device builders); advisories published October 12, 2026
Overview
GoAhead v6.1.1 is a security patch release. It closes an authentication bypass, TLS and mTLS certificate-validation defects, CGI argument- and environment-injection defects, several HTTP request-smuggling vectors, and the findings of an in-house multi-specialist source audit. With this release no Critical or High finding remains open. Upgrading is recommended for all deployments.
What's New
Security Audit
The most significant change in this release is the outcome of a full in-house security audit of the source tree:
- Eleven Advisories: Eleven GoAhead security advisories are resolved in this release (see Security Advisories below)
- Audit Fixes: A further 31 internally found defects are fixed, grouped below by class
- Regression Coverage: Every fix carries a regression test
- Release Gates: Security gates now run in CI on every push and pull request
Security Enhancements
-
Authentication & Sessions:
- Session id is rotated at every privilege transition: form, Basic and Digest login
- Clients can no longer seed a new session with their own cookie value
- Digest nonce no longer carries the server secret on the wire
- Plaintext password limit (32 characters) is now independent of username and realm length
- BF1 stored hashes combined with Digest authentication are rejected explicitly
- A build with
ME_GOAHEAD_AUTH=0now refuses to start with a route table that requires authentication, rather than serving protected routes unauthenticated - Startup warnings when no route requires authentication, or when an unauthenticated route shadows an authenticated one
-
HTTP Protocol Hardening:
- Strict RFC 9112 request framing:
Content-LengthwithTransfer-Encodingrejected, unsupported transfer codings rejected,Content-Lengthparsed strictly at 64-bit width - Per-peer connection limit and an absolute deadline on the pre-header phase to bound Slowloris attacks
- Blocking response flush is bounded by a deadline so a slow reader cannot freeze the server indefinitely
- Only regular files are served; FIFOs and Windows device names are refused
- Authentication challenges and error responses are no longer marked publicly cacheable
- Strict RFC 9112 request framing:
-
CGI Hardening:
- ISINDEX query terms can no longer inject command-line options into the CGI program
HTTP_PROXY(httpoxy) filtered, and the CGI environment blacklist repaired- Request data is staged outside the served tree under unguessable names
- CGI response headers are tokenized and sanitized; CGI-declared
Content-Lengthis enforced
-
Code Hardening:
%nremoved from the internalsprintfimplementation- printf-family wrappers carry format attributes; builds ratcheted to
-Wformat=2, with equivalent MSVC diagnostics
Fixed Issues
Security Fixes
-
Advisory Fixes:
- Critical: Basic-auth password bypass for users with Blowfish (
BF1:) stored hashes: any password authenticated the user (GOAHEAD-SA-2026-0001) - Critical: Windows CGI command injection:
.batCGI scripts ran throughcmd.exewith request data on the command line (GOAHEAD-SA-2026-0007) - Critical: OpenSSL CRL checking was never enabled, so revoked mTLS client certificates were accepted (GOAHEAD-SA-2026-0006)
- High: mTLS client-certificate chain-depth guard skipped on some LibreSSL releases, accepting over-depth chains with
VERIFY_ISSUER=0(GOAHEAD-SA-2026-0004) - High: CGI
HTTP_PROXYinjection and an inert CGI environment blacklist (GOAHEAD-SA-2026-0003) - High (conditional): CGI ISINDEX argument and option injection, including an encoded
=bypass (GOAHEAD-SA-2026-0009) - Medium: Digest nonce exposed the server master secret (GOAHEAD-SA-2026-0002)
- Medium: MbedTLS DHE sent a 1-byte DH modulus, destroying forward secrecy (GOAHEAD-SA-2026-0005)
- Medium: HTTP request smuggling via
Content-Length/Transfer-Encodingdesync (GOAHEAD-SA-2026-0008) - Medium: HTTP request smuggling via an undrained HEAD body and a chunk-size integer wrap; cumulative chunked body now bounded (GOAHEAD-SA-2026-0010)
- Low: Session fixation; session id not rotated on login (GOAHEAD-SA-2026-0011)
- Critical: Basic-auth password bypass for users with Blowfish (
-
Authorization and Routing:
- Critical: Case-variant, Unicode-normalization and Windows filename-folding URIs bypassed route authorization on case-insensitive file systems
- Critical: A handler could run after the authentication gate had already returned 401
- Critical: Unbounded re-route loop wedged the server
-
Memory Safety:
- Critical: Use-after-free of a request freed by timeout while its CGI child was registered
- Critical: Use-after-free of a session freed by a concurrent logout or prune
- Critical: Double free when the PUT staging file could not be opened
- Critical: Repeated upload
filename=parameters leaked file descriptors and temp files - High: Pre-authentication out-of-bounds read in the Digest
Authorizationparser - High: Heap use-after-free in the JST interpreter
- High: Memory leak per failed Digest authentication, and per
Set-Cookie(including unauthenticated logout)
-
Format Strings:
- Critical: CGI
Content-Typevalue used as a printf format string - Critical:
%nconversion supported by the internal formatter - High: Missing format attributes hid format-string defects from the compiler
- Critical: CGI
-
Availability:
- Critical: Slow-reading client could freeze the event loop indefinitely
- Critical: Request naming a FIFO or device blocked the server
- High: No concurrent-connection limit made Slowloris a whole-server denial of service
- Medium: Failed form logins exhausted the session table
- Medium: Leading blank lines before the request line were unbounded
-
CGI:
- Critical: Chunked and body-less requests published
CONTENT_LENGTH=-1to CGI programs - High: CGI header pass-through bypassed the header-key sanitizer
- High: Headerless CGI output corrupted the response header block
- High: CGI-declared
Content-Lengthnot enforced against bytes written - High: 408 timeout response never sent for a detached CGI
- Medium: CGI control headers dropped after a pass-through header
- Critical: Chunked and body-less requests published
-
HTTP Framing:
- Medium: Request smuggling via
Content-Lengthinteger overflow - Medium: Response
Content-Lengthtruncated for files of 2 GiB or more
- Medium: Request smuggling via
Platform-Specific Fixes
-
Windows:
- Fixed CGI handle lifecycle (invalid handle closed, uninitialised thread handle)
- Fixed
websReadWholeFileleaving heap data after file contents - Restored the Windows build script; added
make.batfor Visual Studio 2022
-
VxWorks:
- High: No-fork CGI freed argv storage while the spawned task was still reading it
- High: CGI temp files created in the document root under predictable names
-
Linux:
- Fixed PIE/PIC link conflict
Protocol & Functionality Fixes
- Local host address resolved with
getaddrinfo, with a fallback when the hostname does not resolve - Command-line options missing their value are rejected
- Startup diagnostics written to stderr
- PAM group buffer freed on every authentication
- Access-log format corrected for request sizes
Improvements
Build System
- Build projects generated from premake5: GNU Make, Visual Studio 2022 and Xcode
- Reproducible source distribution with normalised archive metadata
- Release archives published with SHA-256 checksums
- Removed the unused updater module and obsolete project files
Code Quality
- Source reformatted to the project style
- Stale comments and dead code removed
- Compiler format-string diagnostics enabled on all toolchains
Documentation
- User information, Declaration of Conformity and SBOM shipped in the archive's
doc/directory - Conformity documentation (risk assessment, traceability, test report) maintained per release
Development Infrastructure
- CI runs the full suite on Linux, macOS and Windows, plus static analysis (
scan-build) - CI verifies the committed
dist/amalgamation matchessrc/ - Test dependencies consumed from published npm packages
Compatibility
Breaking Changes
- Windows:
.batand.cmdCGI scripts are no longer executed; requests for them receive 404. Wrap batch logic in a small.exeprogram. - BF1 hashes created by calling
websMakePassword()directly on raw plaintext, bypassinggopass, no longer verify and must be regenerated withgopass.
Behavior Changes
- Requests with both
Content-LengthandTransfer-Encoding, orTransfer-Encodingon HTTP/1.0, receive 400 - Unsupported transfer codings receive 501 instead of being treated as
Content-Lengthframed - On Windows, requests for
.bator.cmdCGI scripts receive 404 - ISINDEX query terms beginning with
-or containing a decoded=receive 400 gopassrejects a plaintext password longer than 32 characters with exit code 3- Pre-login session variables do not survive login
- A build with
ME_GOAHEAD_AUTH=0refuses a route table that requires authentication
Deprecations
None.
Platform Support
- Linux: x86_64 (CI-tested), ARM
- macOS: Intel, Apple Silicon (CI-tested)
- Windows: Windows 10+, Visual Studio 2022+ (CI-tested)
- Embedded: VxWorks (supported via the osdep layer, not CI-tested)
Dependencies
- OpenSSL (preferred) or MbedTLS. GoAhead does not pin a TLS library version; the integrator selects and maintains it
- Standard C compiler (GCC, Clang, MSVC)
- GNU Make, Visual Studio or Xcode
- TestMe, Bun and npm for running unit tests
Migration Guide
Upgrading from 6.1.0
Drop-in replacement for 6.1.0. Rebuild and redeploy.
Configuration Changes
No configuration file changes required. Review startup warnings about unauthenticated routes.
Post-Upgrade Actions
- Invalidate active sessions, or restart the server, to discard any pre-upgrade session id
- Rotating BF1 user passwords is recommended
API Changes
- Added
websRotateSession(). All existing APIs remain compatible.
Known Issues
- 174 Medium and Low findings remain open and are risk-accepted for this release. None is a disclosure, remote-code-execution or authentication-bypass path in a default build.
- A slow-reading client can still hold the single-threaded event loop for up to
ME_GOAHEAD_LIMIT_TIMEOUT(60 seconds by default) before it is dropped. - JST templates have no execution budget, and GoAhead provides no privilege-drop mechanism.
These limitations are described under Known Limitations in the user information shipped with the release.
Security Advisories
This release resolves the following GoAhead security advisories:
- GOAHEAD-SA-2026-0001 (Critical): Blowfish Basic-auth password bypass (GHSA-qj3g-66fp-rhhr)
- GOAHEAD-SA-2026-0002 (Medium): Digest nonce master-secret disclosure (GHSA-qvph-ww7v-qjv7)
- GOAHEAD-SA-2026-0003 (High): CGI
HTTP_PROXYinjection and environment blacklist (GHSA-w3p3-6x8p-vrjr) - GOAHEAD-SA-2026-0004 (High): mTLS chain-depth bypass (GHSA-r392-vqwx-3r4g)
- GOAHEAD-SA-2026-0005 (Medium): MbedTLS DH parameter truncation (GHSA-fmvx-2xfx-2gq4)
- GOAHEAD-SA-2026-0006 (Critical): OpenSSL CRL checking disabled (GHSA-5m75-xq69-c3c5)
- GOAHEAD-SA-2026-0007 (Critical): Windows CGI command injection (GHSA-584w-ph2x-4gfq)
- GOAHEAD-SA-2026-0008 (Medium): HTTP request smuggling (CL/TE) (GHSA-7vfh-w73q-vw6g)
- GOAHEAD-SA-2026-0009 (High, conditional): CGI ISINDEX option injection (GHSA-c7w3-26wq-mjc3)
- GOAHEAD-SA-2026-0010 (Medium): HTTP request smuggling (HEAD body, chunk size) (GHSA-858g-p4c8-vv8x)
- GOAHEAD-SA-2026-0011 (Low): Session fixation (GHSA-w597-qv62-qx2q)
CVE identifiers have been requested and will be added to the advisories as they are assigned.
Operators running Basic authentication with BF1 users, mTLS, CGI (especially Windows .bat CGI), or GoAhead behind a proxy, load balancer or WAF should upgrade as a priority.
Testing
All unit tests pass: 86/86 tests, 12249/12249 assertions. The suite runs in CI on:
- Linux (x86_64)
- macOS (Apple Silicon)
- Windows (x64)
The suite grew from 39 tests / 757 assertions, with new regression coverage for every security fix.
Acknowledgments
Thanks to the Embedthis team for the security audit, and to the researchers who reported issues under coordinated disclosure: Anushka Virgaonkar, Jérémy Luyé-tanet (Synacktiv), Vito Rallo, Sébastien Féry, Alejandro Ramos, Thurein Oo, Xinyao Hu, BUG|PWN Research and Sadoc ADONON, and NVIDIA Project Vanessa.
Getting the Release
Source Code
- GitHub: https://github.com/embedthis/goahead/releases/tag/v6.1.1
- Direct Download: https://www.embedthis.com/goahead/download.html
Verify the archive against the published SHA256SUMS.
Binary Packages
Binary packages are available for download from the Embedthis website:
Support
Commercial Support
Commercial support and licenses are available from:
Community Support
- GitHub Issues: https://github.com/embedthis/goahead/issues
- Documentation: https://www.embedthis.com/goahead/doc/
- Email: dev@embedthis.com
Security Issues
Please report security issues to: security@embedthis.com
What's Next
GoAhead is in maintenance mode. Future releases will focus on:
- Security updates (active)
- Remaining Medium and Low audit findings
- Critical bug fixes (as needed)
- Platform compatibility updates (as needed)
For new projects, consider the Ioto Device Agent, which provides modern IoT device management capabilities.
Commit Statistics
- 129 commits since v6.1.0
- Contributors: Embedthis development team
- Files changed: 460
- Focus areas: Fixes (40%), Build and CI (26%), Development (14%), Testing (11%), Documentation (9%)
Full Changelog: v6.1.0...v6.1.1