# CVE-2025-66491: traefik — Fixed in 3.6.3

🐹

🐹 Go

Not in CISA KEV

MEDIUM severity

# CVE-2025-66491 — traefik

MEDIUM [Fix: traefik/traefik@14a1aed](https://github.com/traefik/traefik/commit/14a1aedf5704673d875d210d7bacf103a43c77e4)

CVE-2025-66491 is a medium-severity (CVSS 5.9) CWE-295 vulnerability in github.com/traefik/traefik/v3. A fix is available for github.com/traefik/traefik/v3 — see the affected versions and patch details below.

Traefik has Inverted TLS Verification Logic in its ingress-nginx Provider

Also known as[GHSA-7vww-mvcr-x6vj](/vulnerability/GHSA-7vww-mvcr-x6vj)GO-2025-4205

Published

Dec 9, 2025

Updated

Oct 28, 2026

Affected

1 pkg

Patched

1 / 1

Exploits

None indexed

Exploitation data as of Nov 10, 2026 · OSV.dev, NVD, FIRST.org (EPSS)

## Exploitation Status

### No confirmed exploitation observed yet

-   CISA’s own triage has not observed active exploitation or public proof-of-concept code for this CVE as of its last assessment.

Exploitation and automatability from CISA’s SSVC triage for CVE-2025-66491.

## EPSS Exploitation Probability

[via FIRST.org ↗](https://www.first.org/epss/)

0.2%probability of exploitation in next 30 days

Lower Risk+0.02%

Lower risk than most CVEs15th percentile — riskier than 15% of all scored CVEsHighest risk

0.00%0.25%0.49%0.74%0.0%0.2%May 26Sep 26Nov 26

Probability of exploitation in the next 30 days, from [FIRST.org EPSS](https://www.first.org/epss/).

## How urgent is this, really

## Where this sits among everything scored

## Real-World Exposure

1 pkg affected

🐹`github.com/traefik/traefik/v3`

Real-time download stats are indexed for npm and PyPI packages. This vulnerability affects Go packages — download data is not available via public APIs for these ecosystems.

## Description

### Impact

There is a potential vulnerability in Traefik NGINX provider managing the `nginx.ingress.kubernetes.io/proxy-ssl-verify` annotation.

The provider inverts the semantics of the `nginx.ingress.kubernetes.io/proxy-ssl-verify` annotation. Setting the annotation to `"on"` (intending to enable backend TLS certificate verification) actually disables verification, allowing man-in-the-middle attacks against HTTPS backends when operators believe they are protected.

### Patches

-   [https://github.com/traefik/traefik/releases/tag/v3.6.3](https://github.com/traefik/traefik/releases/tag/v3.6.3)

### For more information

If you have any questions or comments about this advisory, please [open an issue](https://github.com/traefik/traefik/issues).

<details> <summary>Original Description</summary>

#### Summary

A logic error in Traefik's experimental ingress-nginx provider inverts the semantics of the `nginx.ingress.kubernetes.io/proxy-ssl-verify` annotation. Setting the annotation to `"on"` (intending to enable backend TLS certificate verification) actually disables verification, allowing man-in-the-middle attacks against HTTPS backends when operators believe they are protected.

#### Details

In `pkg/provider/kubernetes/ingress-nginx/kubernetes.go` at line 512, the `InsecureSkipVerify` field is set using inverted logic:

```
nst := &namedServersTransport{
    Name: provider.Normalize(namespace + "-" + name),
    ServersTransport: &dynamic.ServersTransport{
        ServerName:         ptr.Deref(cfg.ProxySSLName, ptr.Deref(cfg.ProxySSLServerName, "")),
        InsecureSkipVerify: strings.ToLower(ptr.Deref(cfg.ProxySSLVerify, "off")) == "on",
    },
}
```

The expression `== "on"` evaluates to `true` when the annotation is `"on"`, setting `InsecureSkipVerify: true`. In Go's `crypto/tls`, `InsecureSkipVerify: true` means "do not verify the server's certificate" — the opposite of what `proxy-ssl-verify: "on"` should do according to NGINX semantics.

**Current behavior:**

Annotation Value

InsecureSkipVerify

Actual Result

`"on"`

`true`

Verification **disabled** ❌

`"off"` (default)

`false`

Verification **enabled**

**Expected behavior (per NGINX semantics):**

Annotation Value

InsecureSkipVerify

Expected Result

`"on"`

`false`

Verification **enabled**

`"off"` (default)

`true`

Verification **disabled**

The test in `pkg/provider/kubernetes/ingress-nginx/kubernetes_test.go` lines 397-403 confirms this inverted behavior is codified as "expected":

```
ServersTransports: map[string]*dynamic.ServersTransport{
    "default-ingress-with-proxy-ssl": {
        ServerName:         "whoami.localhost",
        InsecureSkipVerify: true,  // Wrong: should be false when annotation is "on"
        RootCAs:            []types.FileOrContent{"-----BEGIN CERTIFICATE-----"},
    },
},
```

**Affected versions:** v3.5.0 through current master (introduced in commit `9bd5c617820f2a8d23b50b68d114bb7bc464eccd`)

Pavel Kohout Aisle Research

</details>

## Affected Packages

1 total 1 fixed

Ecosystem

Package

Vulnerable range

Fix

🐹Go

`github.com/traefik/traefik/v3` 

≥ 3.5.0&&< 3.6.3

3.6.3`go get github.com/traefik/traefik/v3@v3.6.3`

## Affected Products

1 product · 1 configurations

Application

`traefik`traefik

≥ 3.5.0 && < 3.6.3

range

## Detection & mitigation playbook

Open-source dependency

1.  ### Detect
    
    Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for github.com/traefik/traefik/v3, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.
    
2.  ### Fix
    
    Update github.com/traefik/traefik/v3 to 3.6.3 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms CVE-2025-66491 is resolved across your whole dependency graph.
    
3.  ### Workarounds
    
    If you can't upgrade right away: gate or disable the affected feature, validate untrusted input at the boundary, and avoid passing attacker-controlled data into the vulnerable path. O3's runtime protection blocks exploitation in production as an interim safeguard until the upgrade lands.
    

## Fixing This On Your OS

If you run this on a Linux distribution, patch through your package manager against the distro's own security advisory below — it tracks the exact backported fix for your release, which can ship on a different timeline (and sometimes a different severity) than the upstream project.

Red HatModerate

Workaround published by Red Hat

> Mitigation for this issue is either not available or the currently available options do not meet the Red Hat Product Security criteria comprising ease of use and deployment, applicability to widespread installation base or stability.

Source: [Red Hat security advisory for CVE-2025-66491](https://access.redhat.com/security/cve/cve-2025-66491) (CC BY 4.0)

## Frequently Asked Questions

\## Impact There is a potential vulnerability in Traefik NGINX provider managing the \`nginx.ingress.kubernetes.io/proxy-ssl-verify\` annotation. The provider inverts the semantics of the \`nginx.ingress.kubernetes.io/proxy-ssl-verify\` annotation. Setting the annotation to \`"on"\` (intending to enable backend TLS certificate verification) actually disables verification, allowing man-in-the-middle attacks against HTTPS backends when operators believe they are protected. ## Patches - https://github.com/traefik/traefik/releases/tag/v3.6.3 ## For more information If you have any questions or comm

O3 Security · Impact-Aware SCA

### Is CVE-2025-66491 in your dependencies?

Find it across Go, including transitive dependencies.

[Scan my dependencies](/book-demo) [How O3 SCA works](/impact-aware-sca)