{"id":22932,"date":"2026-09-15T20:31:05","date_gmt":"2026-09-15T12:31:05","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-59341"},"modified":"2026-09-15T20:31:05","modified_gmt":"2026-09-15T12:31:05","slug":"cve-2026-59341","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-59341","title":{"rendered":"CVE-2026-59341 [MEDIUM] &#8211; A security vulnerability exists in the Sealed Secrets controller&#8217;s unauthenticated POST en"},"content":{"rendered":"<p>A security vulnerability exists in the Sealed Secrets controller&#8217;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.<\/p>\n<p>The 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.<\/p>\n<p>Missing 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&#8217;s valid metadata and encryptedData verbatim, satisfying AEAD decryption and label validation, while freely replacing spec.template.data with arbitrary template logic.<\/p>\n<p>Side-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 &#8220;&#8230;&#8221; }}).<\/p>\n<p>By injecting conditional statements such as {{ if eq (substr 0 1 .password) &#8220;S&#8221; }}ok{{ else }}{{ fail &#8220;x&#8221; }}{{ 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.<\/p>\n<p>Attack vector &amp; prerequisites: unauthenticated; requires network access to the controller&#8217;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.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A security vulnerability exists in the Sealed Secrets controller&#8217;s unauthenticated POST endpoints. By submitting a modified payload containing custom Go template logic in spec.template.data, an attack<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-22932","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/22932","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=22932"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=22932"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=22932"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}