{"id":"CVE-2026-59341","summary":"Sealed Secrets: decryption oracle via Go template injection in unauthenticated controller endpoints","details":"A security vulnerability exists in the Sealed Secrets controller's unauthenticated POST endpoints. By submitting a modified payload containing custom Go template logic in spec.template.data, an attacker with internal network access can abuse the handler as a decryption oracle to recover the full plaintext of any sealed secret.\n\n\n\nThe POST /v1/verify and /v1/rotate handlers call Unseal() to decrypt target secrets, then render any Go templates found in spec.template.data.* using the decrypted payload as the evaluation context (pkg/apis/sealedsecrets/v1alpha1/sealedsecret_expansion.go). Errors encountered during template execution are directly reflected in the resulting HTTP response status codes.\n\n\n\nMissing AEAD label binding: the spec.template.data field is omitted from the AEAD authenticated-data label binding ciphertext to metadata. As a result, an attacker can copy a target's valid metadata and encryptedData verbatim, satisfying AEAD decryption and label validation, while freely replacing spec.template.data with arbitrary template logic.\n\n\n\nSide-channel oracle: template execution errors map directly to HTTP response codes. HTTP 200 (OK) indicates template execution succeeded; HTTP 409 (Conflict) indicates template execution failed (e.g. via {{ fail \"...\" }}).\n\n\n\nBy injecting conditional statements such as {{ if eq (substr 0 1 .password) \"S\" }}ok{{ else }}{{ fail \"x\" }}{{ end }}, an attacker receives an HTTP 200 status when a character guess is correct and an HTTP 409 when it is incorrect. This differential response leaks one character-equality bit per request, allowing full secret extraction over successive queries.\n\n\n\nAttack vector & prerequisites: unauthenticated; requires network access to the controller's internal service port (:8080). Although this service is not exposed to the public internet by default, it is accessible to any pod within the Kubernetes cluster or via a kubectl port-forward connection.","aliases":["GHSA-qj4p-m373-p2wg"],"modified":"2026-09-17T03:47:23.386746040Z","published":"2026-09-15T09:16:59.460Z","database_specific":{"osv_generated_from":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/59xxx/CVE-2026-59341.json","cna_assigner":"vmware"},"references":[{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/59xxx/CVE-2026-59341.json"},{"type":"ADVISORY","url":"https://github.com/bitnami/sealed-secrets/security/advisories/GHSA-qj4p-m373-p2wg"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-59341"},{"type":"PACKAGE","url":"https://github.com/bitnami/sealed-secrets"}],"affected":[{"ranges":[{"type":"GIT","repo":"https://github.com/bitnami/sealed-secrets","events":[{"introduced":"0"},{"last_affected":"0cc547ad0c3756726768dcc916e39de3ac5b101b"}],"database_specific":{"source":"AFFECTED_FIELD","extracted_events":[{"introduced":"0"},{"last_affected":"0.38.4"}]}}],"versions":["v0.38.4","v0.38.3","v0.38.2","helm-v2.19.0","v0.38.1","v0.38.0","helm-v2.18.6","v0.37.0","helm-v2.18.5","v0.36.6","v0.36.5","v0.36.4","v0.36.3","v0.36.2","helm-v2.18.4","v0.36.1","helm-v2.18.3","helm-v2.18.2","v0.36.0","helm-v2.18.1","v0.35.0","helm-v2.18.0","v0.34.0","helm-v2.17.9","v0.33.1","helm-v2.17.8","v0.33.0","helm-v2.17.7","v0.32.2","helm-v2.17.6","v0.32.1","helm-v2.17.5","v0.32.0","helm-v2.17.4","v0.31.0","helm-v2.17.3","v0.30.0","helm-v2.17.2","v0.29.0","helm-v2.17.1","v0.28.0","helm-v2.17.0","v0.27.3","helm-v2.16.2","v0.27.2","helm-v2.16.1","v0.27.1","helm-v2.16.0","v0.27.0","helm-v2.15.4","v0.26.3","helm-v2.15.3","v0.26.2","helm-v2.15.2","helm-v2.15.1","v0.26.1","helm-v2.15.0","v0.26.0","helm-v2.14.2","v0.25.0","helm-v2.14.1","helm-v2.14.0","helm-v2.13.4","v0.24.5","helm-v2.13.3","v0.24.4","helm-v2.13.2","v0.24.3","helm-v2.13.1","v0.24.2","v0.24.1","helm-v2.13.0","v0.24.0","helm-v2.12.0","v0.23.1","helm-v2.11.0","v0.23.0","helm-v2.10.0","v0.22.0","helm-v2.9.0","v0.21.0","helm-v2.8.2","v0.20.5","v0.20.4","v0.20.3","helm-v2.8.1","v0.20.2","helm-v2.8.0","v0.20.1","v0.20.0","helm-v2.7.6","helm-v2.7.5","helm-v2.7.4","v0.19.5","helm-v2.7.3","v0.19.4","helm-v2.7.2","v0.19.3","helm-v2.7.1","v0.19.2","helm-v2.7.0","v0.19.1","v0.19.0","helm-v2.6.9","v0.18.5","helm-v2.6.8","v0.18.4","v0.18.3","helm-v2.6.7","helm-v2.6.6","helm-v2.6.5","helm-v2.6.4","helm-v2.6.3","helm-v2.6.2","helm-v2.6.1","v0.18.2","helm-v2.6.0","helm-v2.5.2","helm-v2.5.1","helm-v2.5.0","helm-v2.4.0","v0.18.1","helm-v2.3.0","helm-v2.2.0","v0.18.0","helm-v2.1.8","helm-v2.1.7","helm-v2.1.6","helm-v2.1.5","v0.17.4","helm-v2.1.4","helm-v2.1.3","helm-v2.1.2","v0.17.3","helm-v2.1.1","helm-v2.1.0","v0.17.2","helm-v2.0.2","helm-v2.0.1","helm-v2.0.0","v0.17.1","v0.17.0","helm-v1.16.1","helm-v1.16.0","v0.16.0","helm-v1.15.0-r3","helm-v1.15.0-r2","helm-v1.15.0-r1","v0.15.0","helm-v1.14.1-r1","v0.14.1","helm-v1.14.0-r1","v0.14.0","helm-v1.13.2-r2","sealed-secrets-1.13.2","sealed-secrets-1.13.1","helm-v1.13.0","v0.13.1","v0.13.0","v0.12.6","v0.12.5","v0.12.4","v0.12.3","v0.12.2","v0.12.1","v0.12.0","v0.11.0","v0.10.0","v0.10.0-alpha.2","v0.10.0-alpha.1","v0.9.8","v0.9.7","v0.9.6","v0.9.5","v0.9.4","v0.9.3","v0.9.2","v0.9.1","v0.9.0","v0.9.0-rc.3","v0.9.0-rc.2","v0.9.0-rc.1","v0.8.3","v0.8.2","v0.8.1","v0.8.0-rc.3","v0.8.0","v0.8.0-rc.2","v0.8.0-rc.1","v0.7.0","v0.6.0","v0.5.1","v0.5.0","v0.4.0","v0.3.1","v0.3.0","v0.2.1","v0.2.0","v0.1.0"],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-59341.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:H/PR:H/UI:R/S:U/C:H/I:N/A:N"}]}