Skip to content

SupiVPN v0.7.0

Choose a tag to compare

@github-actions github-actions released this 23 Oct 23:02
Immutable release. Only release title and notes can be modified.
73f1114

SupiVPN v0.7.0

Security fixes for SAML/XML verification and VPN sign-in intent, plus optional
SAML assertion encryption. Upgrade deployments running 0.4.0 through 0.6.1.

Changes

  • Bound XML signature-verification work: limit inclusive namespace prefixes,
    authenticate SignedInfo before processing the referenced document, and enforce
    the canonical-output budget consistently. See
    GHSA-45v3-cvr2-xcg6.
  • Require an explicit browser confirmation before VPN SAML login by default.
    A GET displays the prompt; a protected same-origin POST starts authentication.
    This mitigates silent authorization of an attacker's pending VPN connection
    through a relayed login link. See
    GHSA-59hj-hg2f-54x4.
  • Preserve the signed bearer NotBefore bound at final admission and reject
    malformed or ambiguous recipient PEM input.
  • Add RSA-OAEP and AES-GCM assertion encryption with explicit disabled
    (default), optional and required modes. Trusted IdP signatures, audience,
    recipient, time, browser/request correlation, groups and replay checks remain
    mandatory. Encryption does not replace HTTPS or client/browser binding.
  • Add real Okta acceptance for encrypted/plaintext policy, recipient keys,
    group denial, cookies, replay and six client profile downloads, run weekly,
    after relevant main changes and manually before releases.

Compatibility

VPN login now requires a confirmation click by default. Public reverse
proxies and API gateways must forward both GET and POST /login/{ticket} to the
controller. Configure this route before rolling out the update, and keep all
controller replicas on a consistent confirmation policy. Profile downloads
retain their own login flow.

The explicit operator opt-out is "vpn_login_confirmation": false. Omitted,
null or true keeps confirmation enabled. Disabling it restores the silent
relayed-link risk. Even with confirmation enabled, approving someone else's
request can authorize that person's connection: cryptographic binding between
browser and VPN client is not implemented. Only approve a login initiated by
your own VPN client. MFA and assertion encryption do not remove this limitation.

Existing plaintext IdP configurations continue to work with encryption disabled.
To enable encryption, provision a dedicated RSA recipient key and certificate,
roll out optional to all controllers, configure the IdP, verify VPN/profile
flows, then select required. Required mode rejects plaintext assertions. Only
one recipient key is loaded per process; automatic overlapping-key rotation is
not implemented. See the
encryption guide
for supported algorithms, file permissions and rollout details.

Database migration files and Go dependencies are unchanged from v0.6.1. Existing
VPN tunnels do not move between nodes; reconnecting after node loss requires a
new login and assigns a different IP. This release does not change those limits.
Maintain ingress rate, concurrency and body-size limits alongside the XML fixes.

Upgrade through the signed APT repository or verified
GitHub Release packages, following the
deployment guide.
The two advisory publications follow verification of the patched downloads and
APT delivery.

Verification

The release source passed main Checks and CodeQL, real Okta encrypted assertions,
XMLSec/OpenSSL interoperability, race and PostgreSQL integration tests, bounded
fuzzing, vulnerability scans and four clean Debian 13/systemd VM scenarios:
arm64 and amd64, each with local and external PostgreSQL. Interactive OpenVPN
Connect UI acceptance remains deferred; native OpenVPN integration passed.

The release workflow additionally requires successful tag checks and build
provenance before signing and publishing the exact tag-built assets.

Source commit: 73f1114c87e050d93ee31ec9a8f1d80d7afc8dd8.
Changes since v0.6.1.

Packages

Commit: 73f1114c87e050d93ee31ec9a8f1d80d7afc8dd8. License: AGPL-3.0-only.

Verified native ARM64 and AMD64 builds from Checks for this signed tag. Both bundles use format 3.

Debian 13 packages for ARM64 and AMD64, a shared metapackage and native Debian source are included. Install verified matching packages with apt install ./supivpn*.deb; see DEPLOYMENT.md.

GitHub build provenance was verified for all binary archives, Debian assets and Corresponding Source, including the tag commit and Checks run attempt 1.

Database schema: 10; compatible VM schemas: 7, 8, 9, 10.
Isolated Lambda required schema: 10.

Corresponding Source accompanies the binaries. Verify SHA256SUMS.asc with the pinned SupiVPN release key, then verify the downloaded files against SHA256SUMS before use.