Skip to content

Traefik Manager

v1.7.0 Security

This release includes 1 security fix for security teams reviewing exposed deployments.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →
This release patches 1 known CVE

Topics

alpine-linux bcrypt crsf csrf-protection docker fernet
+13 more
flask flask-limiter flask-session gunicorn phosphor-icons python ruamel-yaml tailwind-css totp traefik traefik-management traefik-web-ui vanilla-js

Affected surfaces

auth rbac deps

ReleasePort's take

Moderate signal
editorial:auto 14d

The release fixes CVE-2026-39858 by patching the forwardAuth header‑alias bypass and adds a warning in Traefik Manager for affected versions.

Why it matters: CVE-2026-39858, severity 90, is mitigated; operators must upgrade to v1.7.0 immediately to prevent authentication bypass.

Summary

AI summary

CVE-2026-39858 forwardAuth header‑alias bypass fixed, Traefik Manager now warns about affected versions.

Changes in this release

Security Critical

Checks running Traefik version against known security advisories, warns on affected versions (CVE-2026-39858).

Checks running Traefik version against known security advisories, warns on affected versions (CVE-2026-39858).

Source: llm_adapter@2026-07-12

Confidence: high

Security High

Strips secret fields (OIDC client secret, API keys, etc.) from `/api/settings` responses.

Strips secret fields (OIDC client secret, API keys, etc.) from `/api/settings` responses.

Source: llm_adapter@2026-07-12

Confidence: high

Security High

Rejects link‑local, multicast, and cloud metadata addresses in connection‑test, webhook‑test, ping, and OIDC‑discovery fetchers.

Rejects link‑local, multicast, and cloud metadata addresses in connection‑test, webhook‑test, ping, and OIDC‑discovery fetchers.

Source: llm_adapter@2026-07-12

Confidence: high

Security High

Never persists or echoes Git credentials, using GIT_ASKPASS instead of embedding tokens in URLs.

Never persists or echoes Git credentials, using GIT_ASKPASS instead of embedding tokens in URLs.

Source: llm_adapter@2026-07-12

Confidence: low

Security High

Validates Git backup URLs to allowed schemes, disables dangerous git protocols.

Validates Git backup URLs to allowed schemes, disables dangerous git protocols.

Source: llm_adapter@2026-07-12

Confidence: low

Security Medium

Limits post‑login `next` redirect to same‑site paths, preventing open redirects.

Limits post‑login `next` redirect to same‑site paths, preventing open redirects.

Source: llm_adapter@2026-07-12

Confidence: high

Security Medium

Rate‑limits authentication attempts in the Go agent to throttle failed‑auth floods.

Rate‑limits authentication attempts in the Go agent to throttle failed‑auth floods.

Source: llm_adapter@2026-07-12

Confidence: high

Security Medium

Escapes all values in the route details panel, mitigating stored XSS from crafted names.

Escapes all values in the route details panel, mitigating stored XSS from crafted names.

Source: llm_adapter@2026-07-12

Confidence: low

Security Medium

Adds `underscoreHeadersStrategy` option to Static Config entry point editor to control underscore header aliases.

Adds `underscoreHeadersStrategy` option to Static Config entry point editor to control underscore header aliases.

Source: granite4.1:30b@2026-07-13-audit

Confidence: low

Security Medium

Supplies Git credentials via `GIT_ASKPASS` instead of embedding tokens, preventing persistence or echoing.

Supplies Git credentials via `GIT_ASKPASS` instead of embedding tokens, preventing persistence or echoing.

Source: granite4.1:30b@2026-07-13-audit

Confidence: low

Security Medium

Enforces default‑deny for OIDC logins when no email or group allow‑list is configured.

Enforces default‑deny for OIDC logins when no email or group allow‑list is configured.

Source: granite4.1:30b@2026-07-13-audit

Confidence: low

Security Low

Entry point editor now merges edits instead of dropping unmanaged keys like `underscoreHeadersStrategy`.

Entry point editor now merges edits instead of dropping unmanaged keys like `underscoreHeadersStrategy`.

Source: granite4.1:30b@2026-07-13-audit

Confidence: low

Security Low

Validates Git URLs and guards config‑file paths in the Go agent similarly to the host.

Validates Git URLs and guards config‑file paths in the Go agent similarly to the host.

Source: granite4.1:30b@2026-07-13-audit

Confidence: low

Security Low

Writes session signing key and TOTP key files with `0600` permissions; requires `SECRET_KEY` env var of at least 32 characters.

Writes session signing key and TOTP key files with `0600` permissions; requires `SECRET_KEY` env var of at least 32 characters.

Source: granite4.1:30b@2026-07-13-audit

Confidence: low

Security Low

Masks installer prompts for API tokens, keys, and passwords to prevent terminal echoing.

Masks installer prompts for API tokens, keys, and passwords to prevent terminal echoing.

Source: granite4.1:30b@2026-07-13-audit

Confidence: low

Feature Medium

Agents can back up to the Host's git repository using Host credentials without agent‑side GIT_BACKUP_* vars.

Agents can back up to the Host's git repository using Host credentials without agent‑side GIT_BACKUP_* vars.

Source: llm_adapter@2026-07-12

Confidence: high

Feature Low

Provides Encoded Characters middleware template for Traefik's `encodedCharacters` (rejects ambiguous percent‑encoded paths).

Provides Encoded Characters middleware template for Traefik's `encodedCharacters` (rejects ambiguous percent‑encoded paths).

Source: granite4.1:30b@2026-07-13-audit

Confidence: low

Feature Low

Exposes `maxResponseBodySize` in forwardAuth wizards to limit auth server response size.

Exposes `maxResponseBodySize` in forwardAuth wizards to limit auth server response size.

Source: granite4.1:30b@2026-07-13-audit

Confidence: low

Bugfix Medium

Correctly preserves port when target host starts with "http" (e.g., `http_inspector:3000`).

Correctly preserves port when target host starts with "http" (e.g., `http_inspector:3000`).

Source: llm_adapter@2026-07-12

Confidence: high

Bugfix Medium

Prevents spurious "failed" errors and settings corruption from concurrent saves by using unique temp files and thread‑local YAML engine.

Prevents spurious "failed" errors and settings corruption from concurrent saves by using unique temp files and thread‑local YAML engine.

Source: granite4.1:30b@2026-07-13-audit

Confidence: low

Bugfix Medium

Corrects restore paths to read from repository root with fallback for older layouts, fixing silent failures.

Corrects restore paths to read from repository root with fallback for older layouts, fixing silent failures.

Source: granite4.1:30b@2026-07-13-audit

Confidence: low

Bugfix Low

Agent git backup now syncs before push and retries once after a rejected push, fixing stuck backups when remote moves.

Agent git backup now syncs before push and retries once after a rejected push, fixing stuck backups when remote moves.

Source: granite4.1:30b@2026-07-13-audit

Confidence: low

Bugfix Low

Host git push retries once on rejection after re‑syncing, handling concurrent external pushes gracefully.

Host git push retries once on rejection after re‑syncing, handling concurrent external pushes gracefully.

Source: granite4.1:30b@2026-07-13-audit

Confidence: low

Bugfix Low

Refreshes git panel when switching between Host and agent in Settings → Backups → Git UI.

Refreshes git panel when switching between Host and agent in Settings → Backups → Git UI.

Source: granite4.1:30b@2026-07-13-audit

Confidence: low

Full changelog

v1.7.0

Security

  • Traefik security advisory warnings - Traefik Manager now checks the running Traefik version against a list of known security advisories and shows a warning when your Traefik is affected, with extra urgency when a forwardAuth middleware is in use. Covers CVE-2026-39858 (ForwardAuth/header-alias authentication bypass; fixed in Traefik 2.11.43 / 3.6.14 / 3.7.0-rc.2). Works for the Host and remote agents.
  • underscoreHeadersStrategy entry point option - the Static Config entry point editor can now set http.underscoreHeadersStrategy (Keep / Delete / Reject) to stop underscore header aliases (e.g. X_Auth_User) from bypassing forwardAuth on backends that treat dashes and underscores the same. The option is only offered when the running Traefik supports it (3.6.20 / 3.7.6+).
  • Entry point editor no longer drops unmanaged keys - editing an entry point in the Static Config editor now merges into the existing definition instead of rebuilding it, so hand-added keys (like underscoreHeadersStrategy or transport settings) are preserved.
  • Encoded Characters middleware - new middleware wizard template for Traefik's encodedCharacters middleware (Traefik 3.7+), which rejects ambiguous percent-encoded path characters.
  • ForwardAuth response size limit - the forwardAuth wizards (including Authentik, Authelia, and Gatekeeper) now expose maxResponseBodySize to cap the auth server's response body (Traefik 3.7+).
  • New Security hardening documentation page covering these options and the header-alias attack.
  • OIDC stays enforced when built-in authentication is disabled (fixes #95) - previously, turning off the password login disabled all web-UI authentication even with OIDC configured, leaving the interface public. OIDC is now an independent mechanism: disabling built-in auth only hides the password form and makes OIDC the sole login. API keys keep working in every mode (the mobile app is unaffected), the password hash is preserved for manager.yml recovery if the provider becomes unreachable, and a warning is shown in the app, in Settings, and at startup when no authentication is active.

Security audit hardening

A full security audit was run over the host app, the Go agent, and the installer. The following were hardened for this release (host and agents):

  • Git backup transport is locked to real remotes - the repository URL is now validated to https://, http://, ssh://, or git:// before any git command runs, and git is invoked with protocol.ext/protocol.file/protocol.fd disabled. This blocks ext::, file://, and fd:: transport tricks that could have run local commands via a crafted backup URL.
  • Git credentials are never persisted or echoed - the access token is supplied to git through GIT_ASKPASS instead of being embedded in the remote URL, so it no longer lands in .git/config or process arguments, and it is redacted from any error message surfaced in the UI.
  • Settings responses no longer expose secrets - the /api/settings payload strips the OIDC client secret, CrowdSec keys, Traefik API password, git token, webhook password, encrypted TOTP secret, and per-agent credentials. These write-only fields are never returned to the browser or mobile app.
  • OIDC access is default-deny - when neither an email nor a group allow-list is configured, logins are rejected unless you explicitly opt in with Allow any authenticated user. Previously an empty allow-list admitted any account from the identity provider.
  • Server-side request forgery guard - the connection-test, webhook-test, ping, and OIDC-discovery fetchers reject link-local, multicast, and cloud metadata addresses (e.g. 169.254.169.254), while still allowing the private and loopback targets a self-hosted proxy legitimately needs.
  • Open-redirect fix - the post-login next redirect only accepts same-site paths, so a crafted login link can no longer bounce you to an external site.
  • Config file reads are path-scoped - the static-config, logs, and certificate read endpoints resolve paths against the allowed config directories only, preventing arbitrary file reads.
  • Additional CSRF coverage - the TLS-options save/delete and notification-settings endpoints now require a CSRF token like every other state-changing route.
  • Output escaping - the route details panel escapes all values before rendering, closing a stored-XSS path from crafted router/service names.
  • Agent hardening - the Go agent now rate-limits before authentication (so failed-auth floods are throttled), bounds its per-IP limiter map, validates git URLs and guards config-file paths the same way, and fixed a data race in the API-key store.
  • Local key material - the session signing key and TOTP key files are written 0600, and a SECRET_KEY supplied via environment is required to be at least 32 characters.
  • Installer secret prompts are masked - the stack and agent installers read API tokens, keys, and passwords without echoing them to the terminal.

Features

  • Agents can back up to the Host's git repository - in Settings → Backups → Git with an agent active, enable Use Host Repository and pick a branch. The Host pushes that agent's dynamic and static config to the Host's repository using the Host's credentials - no GIT_BACKUP_* env vars needed on the agent. Every server pushes to its own branch (enforced - the Host branch and other agents' branches are rejected), auto-push fires on every route/middleware/config change made through TM, and history, diffs, one-click restore, and manual pushes with custom commit messages all work per agent.

Fixes

  • Route port dropped for hosts starting with "http" (fixes #96) - creating a route whose target host began with http (e.g. http_inspector, httpbin) emitted the bare hostname as the server URL and dropped the scheme and port. The builder now only treats a target as a full URL when it actually starts with http:// or https://, so http_inspector + port 3000 correctly produces http://http_inspector:3000. Applies to the Host and agents.
  • Agent git backup no longer gets stuck after the remote moves - the agent now syncs its clone to the remote before every push (like the Host does) and retries once after a rejected push, so a diverged remote self-heals instead of failing every subsequent backup.
  • Host git push retries once on rejection - if another writer pushes between the Host's sync and push, the push is retried after a re-sync instead of surfacing a transient error for a backup that then succeeds.
  • Spurious "failed" errors and settings corruption on concurrent saves - settings and config writes used a fixed temporary file name, so two simultaneous requests (across gunicorn workers) could collide and report an error even though the save succeeded, and the shared YAML engine was not thread-safe, which could corrupt manager.yml under concurrent requests. Temporary files are now unique per process and thread, the YAML engine is thread-local, and interrupted writes are cleaned up.
  • Stale git panel when switching servers - opening Settings → Backups → Git on the Host and then switching to an agent kept showing the Host's git settings form. The panel now refreshes when the backups view loads.
  • Git restore used the wrong paths - restore read files from the repository root while pushes write to dynamic/ and static/, so restoring a commit could silently restore nothing. Restore now reads the correct paths (with a fallback for repositories from older layouts).
  • Docs: pointing multiple servers (Host or agents) at the same git repository and branch is now explicitly warned against - every server pushes to the same dynamic/ and static/ paths and they overwrite each other. Use a separate repository or a branch per server.

Security Fixes

  • CVE-2026-39858 — ForwardAuth/header‑alias authentication bypass fixed in Traefik Manager; warning added for affected versions (fixed in Traefik 2.11.43 / 3.6.14 / 3.7.0‑rc.2)

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track Traefik Manager

Get notified when new releases ship.

Sign up free

About Traefik Manager

Clean web interface for managing Traefik

All releases →

Related context

Related CVEs

Beta — feedback welcome: [email protected]