<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Fission/Fission (&lt;= 1.22.0) — CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/fission/fission--1.22.0/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata. Fed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Thu, 21 May 2026 20:18:20 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/fission/fission--1.22.0/feed.xml" rel="self" type="application/rss+xml"/><item><title>Fission Function Pods Leak Service Account Token, Enabling Namespace-Wide Secret Access</title><link>https://feed.craftedsignal.io/briefs/2026-05-fission-sa-token-leak/</link><pubDate>Thu, 21 May 2026 20:18:20 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-05-fission-sa-token-leak/</guid><description>Fission runtime pods were created with the `fission-fetcher` service account, granting namespace-wide `get` access to secrets and configmaps; the runtime pod's automounted token was reachable from inside the user's function container, allowing user-supplied function code to inherit the same Kubernetes API privileges and read any secret or configmap in the function's namespace, far beyond the intended `Function.spec.secrets` allowlist.</description><content:encoded><![CDATA[<p>Fission is a function-as-a-service (FaaS) framework for Kubernetes. Prior to version 1.23.0, Fission runtime pods were configured with the <code>fission-fetcher</code> service account, which had broad permissions to read secrets and configmaps within its namespace. This was necessary for the fetcher sidecar to retrieve function code, environment variables, and configuration data. However, the service account token was automatically mounted into the user&rsquo;s function container at <code>/var/run/secrets/kubernetes.io/serviceaccount/token</code>. This exposed the token to user-supplied function code, granting it unintended Kubernetes API privileges and the ability to read any secret or configmap in the function&rsquo;s namespace, bypassing the intended security controls defined by <code>Function.spec.secrets</code>. This vulnerability allows malicious function code to escalate privileges and access sensitive data within the Kubernetes namespace.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>An attacker gains the ability to deploy or update a Fission <code>Function</code> or <code>Package</code> resource in a Kubernetes namespace.</li>
<li>The attacker crafts a malicious function that reads the service account token file located at <code>/var/run/secrets/kubernetes.io/serviceaccount/token</code>.</li>
<li>The function uses the token to authenticate against the Kubernetes API server.</li>
<li>The function queries the Kubernetes API to list and read all secrets within the namespace.</li>
<li>The function retrieves sensitive data from the secrets, such as TLS keys, OIDC client secrets, database credentials, or cloud provider credentials.</li>
<li>The function queries the Kubernetes API to list and read all configmaps within the namespace.</li>
<li>The attacker uses the stolen credentials to pivot to other Kubernetes resources or external systems.</li>
<li>The attacker compromises other systems or resources using the obtained credentials.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation of this vulnerability allows an attacker to read every secret and configmap within a Kubernetes namespace where Fission runtime pods are scheduled. This could include sensitive information such as database credentials, API keys, and TLS certificates. By gaining access to these secrets, an attacker could potentially compromise other applications and services running within the cluster, or even gain unauthorized access to external systems. The vulnerability violates the principle that <code>Function.spec.secrets</code> should be the sole declaration of secrets accessible to a function.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Upgrade to Fission version 1.23.0 or later, where the user function container has <code>AutomountServiceAccountToken</code> set to <code>false</code> at the container level to prevent the token leak, as described in <a href="https://github.com/fission/fission/pull/3366">PR #3366</a>.</li>
<li>Until an upgrade is possible, restrict who can create or update <code>Function</code> and <code>Package</code> CRDs in your cluster, treating function code deployment as equivalent to namespace-wide secret read.</li>
<li>Reduce the scope of the <code>fission-fetcher</code> ClusterRole/Role where possible, limiting access to specific named secrets via separate Role bindings.</li>
<li>Implement NetworkPolicy egress rules to deny function pods access to the Kubernetes API server, mitigating the impact of a token leak.</li>
</ul>
]]></content:encoded><category domain="severity">high</category><category domain="type">advisory</category><category>privilege-escalation</category><category>kubernetes</category><category>faas</category></item></channel></rss>