<?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>Portainer (&gt;= 2.39.0, &lt; 2.39.2) — CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/portainer--2.39.0--2.39.2/</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, 14 May 2026 16:37:50 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/portainer--2.39.0--2.39.2/feed.xml" rel="self" type="application/rss+xml"/><item><title>Portainer JWT Leak via URL Query Parameter</title><link>https://feed.craftedsignal.io/briefs/2026-05-portainer-jwt-leak/</link><pubDate>Thu, 14 May 2026 16:37:50 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-05-portainer-jwt-leak/</guid><description>Portainer's authentication middleware accepts JWT bearer tokens passed as the `?token=&lt;JWT&gt;` URL query parameter on any authenticated API endpoint, leading to JWT leakage to logs and referrers, where a leaked token grants the full privileges of the user it was issued to, until the token expires.</description><content:encoded><![CDATA[<p>Portainer is vulnerable to JWT leakage due to accepting tokens via the <code>?token=&lt;JWT&gt;</code> URL query parameter. This vulnerability, present since the introduction of JWT authentication, allows the JWT to be exposed in reverse proxy logs, browser history, and HTTP Referer headers. The <code>?token=</code> parameter was used by Portainer&rsquo;s browser-based container attach, exec, and pod shell features, impacting any user with exec or attach rights. The issue was reported on 2026-03-06, and fixed in versions 2.33.8, 2.39.2, and 2.41.0. Exploitation requires an attacker to obtain a leaked token, but once obtained, it grants the privileges of the user it was issued to, including administrative access.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>A user authenticates to Portainer, receiving a JWT.</li>
<li>The user initiates a container attach, exec, or pod shell operation, triggering a request to Portainer that includes the JWT as a <code>?token=</code> query parameter.</li>
<li>The request is processed by Portainer&rsquo;s authentication middleware, which accepts the JWT from the query parameter.</li>
<li>The request, including the JWT in the URL, is logged by a reverse proxy or other network monitoring tool.</li>
<li>Alternatively, the user navigates to an external site from within the Portainer UI, causing the JWT to be sent in the Referer header.</li>
<li>An attacker gains access to the logs or intercepts the Referer header, obtaining the leaked JWT.</li>
<li>The attacker uses the leaked JWT to authenticate to the Portainer API, impersonating the original user.</li>
<li>If the compromised token belongs to an administrator, the attacker gains full API access, including user management, container exec, and stack deployment, potentially compromising the host filesystem of managed environments.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation of this vulnerability can lead to significant data breaches and system compromise. Leaked tokens can be captured by intermediate systems like reverse proxies, exposing the full JWT in plaintext. URLs containing <code>?token=</code> are recorded in browser history and forwarded in the <code>Referer</code> header. An attacker with a leaked JWT can act as the authenticated user for the remainder of the token&rsquo;s validity, gaining full API access, including user management, container exec, and stack deployment. If the leaked token belongs to an administrator, the attacker gains full control over Portainer and its managed environments.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Upgrade Portainer to version 2.33.8, 2.39.2, or 2.41.0 or later to remediate the vulnerability as outlined in the advisory.</li>
<li>Implement reverse proxy rules to strip the <code>?token=</code> parameter from requests before they reach Portainer, as mentioned in the workarounds, but be aware this breaks container attach/exec until Portainer is patched.</li>
<li>Audit existing logs for occurrences of <code>?token=</code> or <code>&amp;token=</code> as mentioned in the workarounds, and treat any captured JWT as compromised by resetting affected user passwords.</li>
<li>Deploy the Sigma rule &ldquo;Detect Portainer JWT Parameter in Web Logs&rdquo; to identify potential token leaks in web server logs.</li>
<li>Deploy the Sigma rule &ldquo;Detect Portainer API Access Using Leaked JWT&rdquo; to identify API access attempts using leaked JWTs.</li>
</ul>
]]></content:encoded><category domain="severity">high</category><category domain="type">advisory</category><category>jwt</category><category>token-leak</category><category>credential-access</category><category>CVE-2026-44883</category><category>portainer</category></item><item><title>Portainer Endpoint Security Bypass via Docker Swarm Service API</title><link>https://feed.craftedsignal.io/briefs/2026-05-portainer-swarm-bypass/</link><pubDate>Thu, 14 May 2026 16:37:27 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-05-portainer-swarm-bypass/</guid><description>Portainer is vulnerable to an endpoint security bypass via Swarm service create/update, enabling non-admin users with access to a Docker Swarm endpoint to bypass `EndpointSecuritySettings` restrictions and gain elevated privileges such as configuring services with elevated Linux capabilities, disabling syscall filtering and AppArmor confinement, setting arbitrary sysctl values, and mounting arbitrary host paths.</description><content:encoded><![CDATA[<p>Portainer enforces <code>EndpointSecuritySettings</code> restrictions to limit container configurations for non-admin users. However, these restrictions are not fully applied when creating or updating Docker Swarm services through the Portainer API. A non-admin user with access to a Docker Swarm endpoint can bypass these security measures by using the <code>POST /services/create</code> or <code>POST /services/{id}/update</code> endpoints. This bypass allows the user to escalate privileges, gaining capabilities such as mounting arbitrary host paths, elevating Linux capabilities (e.g., <code>CAP_SYS_ADMIN</code>), disabling syscall filtering, and disabling AppArmor confinement. The vulnerability affects all Portainer releases with Docker Swarm support prior to versions 2.33.8, 2.39.2, and 2.41.0, undermining the administrator&rsquo;s security policy on Swarm-enabled endpoints. The volume driver local-bind variant was disclosed on 2026-03-12, and the Swarm service create/update bypass was disclosed on 2026-04-05.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>An authenticated, non-admin user gains access to a Docker Swarm endpoint via Portainer RBAC.</li>
<li>The user crafts a <code>POST /services/create</code> request to create a new service, bypassing capability, sysctl, and security-opt checks.</li>
<li>Alternatively, the user creates a benign service and then sends a <code>POST /services/{id}/update</code> request to modify the service, bypassing all security checks.</li>
<li>The request includes configurations to elevate Linux capabilities (e.g., <code>CapabilityAdd: [&quot;ALL&quot;]</code>), disable syscall filtering (<code>Privileges.Seccomp.Mode: &quot;unconfined&quot;</code>), or disable AppArmor confinement (<code>Privileges.AppArmor.Mode: &quot;disabled&quot;</code>).</li>
<li>The request may also include configurations for arbitrary sysctl values inside the container namespace, and/or bind mounts of any host path, including sensitive paths such as <code>/</code>, <code>/var/run/docker.sock</code>, or SSH keys.</li>
<li>The Docker daemon creates or updates the service with the elevated privileges, bypassing Portainer&rsquo;s intended security restrictions.</li>
<li>The attacker can then leverage the elevated privileges to access the host filesystem (e.g., via <code>chroot /host</code>) or perform other actions with root-equivalent access on the Swarm manager host.</li>
<li>The final objective is to gain unauthorized access to sensitive data or systems, or to disrupt services running on the Docker Swarm cluster.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation allows a non-admin Portainer user to escalate privileges and gain root-equivalent access on the Swarm manager host. This bypasses the administrator&rsquo;s security policy and enables the attacker to perform actions such as accessing sensitive data, modifying system configurations, or disrupting services. The impact is significant because it undermines the security model of Portainer and Docker Swarm, potentially leading to unauthorized access to critical infrastructure and data. The vulnerability affects every Portainer release with Docker Swarm support prior to versions 2.33.8, 2.39.2, and 2.41.0.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Upgrade Portainer to versions 2.33.8, 2.39.2, or 2.41.0 to remediate CVE-2026-44849.</li>
<li>Until an upgrade can be performed, temporarily revoke Swarm endpoint access for non-admin users via Portainer RBAC, as described in the advisory.</li>
<li>Implement a daemon-side allowlist to block the creation of local-driver volumes that use <code>type: none</code> / <code>o: bind</code> on untrusted endpoints, mitigating the volume-driver-bind variant of the vulnerability.</li>
<li>Deploy the Sigma rules provided in this brief to your SIEM to detect exploitation attempts targeting the Portainer API.</li>
</ul>
]]></content:encoded><category domain="severity">critical</category><category domain="type">advisory</category><category>portainer</category><category>docker</category><category>swarm</category><category>privilege-escalation</category><category>vulnerability</category><category>CVE-2026-44849</category></item><item><title>Portainer Bind Mount Restriction Bypass via HostConfig.Mounts (CVE-2026-44850)</title><link>https://feed.craftedsignal.io/briefs/2026-05-portainer-bind-mount-bypass/</link><pubDate>Thu, 14 May 2026 16:30:41 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-05-portainer-bind-mount-bypass/</guid><description>Portainer versions 2.33.0 through 2.33.7, 2.39.0 through 2.39.1, and 2.40.0 through 2.40.9 are vulnerable to CVE-2026-44850, a bind-mount restriction bypass via the `HostConfig.Mounts` array allowing regular users to mount host paths into containers and potentially compromise the host filesystem.</description><content:encoded><![CDATA[<p>Portainer, a container management platform, contains a vulnerability (CVE-2026-44850) where the &ldquo;Disable bind mounts for non-administrators&rdquo; security setting can be bypassed. This setting aims to prevent regular users from binding host paths into containers they create through the Portainer-mediated Docker API. However, the check only inspected the <code>HostConfig.Binds</code> array and not the equivalent <code>HostConfig.Mounts</code> array. An authenticated user with container-create rights on an environment where the restriction is enabled could exploit this vulnerability and mount any host path into their container by submitting a <code>bind</code>-typed entry under <code>HostConfig.Mounts</code>. This bypass can be exploited to gain unauthorized access to the Docker host&rsquo;s filesystem, compromising the entire system. Fixes were released in versions 2.33.8, 2.39.2, and 2.41.0.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>An attacker authenticates to Portainer as a regular user with container-create rights.</li>
<li>The targeted Portainer environment has the &ldquo;Disable bind mounts for non-administrators&rdquo; security setting enabled.</li>
<li>The attacker crafts a <code>POST /containers/create</code> request to the Docker API through the Portainer proxy.</li>
<li>In the request body, the attacker includes a <code>HostConfig.Mounts</code> array with a <code>bind</code>-typed entry. This entry specifies the host path to be mounted into the container.</li>
<li>The Portainer proxy, which only checks <code>HostConfig.Binds</code>, fails to detect the malicious bind mount configuration in <code>HostConfig.Mounts</code>.</li>
<li>The Docker daemon creates the container with the specified bind mount, granting the attacker&rsquo;s container access to the host filesystem.</li>
<li>The attacker executes commands within the container to read or write to the mounted host path, potentially accessing sensitive data or modifying system configurations.</li>
<li>The attacker compromises the host system, other containers, or achieves persistence by writing to authorized_keys or systemd units.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation allows a regular user to bypass bind mount restrictions and gain unauthorized access to the Docker host filesystem. This can lead to:</p>
<ul>
<li>Reading or writing any path on the Docker host filesystem, including sensitive files like <code>/etc/shadow</code> or SSH keys under <code>/root/.ssh</code>.</li>
<li>Compromising other containers on the same host by accessing their layers, volumes, and live state within <code>/var/lib/docker</code>.</li>
<li>Gaining full Docker API access by mounting <code>/var/run/docker.sock</code> into the container.</li>
<li>Writing persistence to the host by dropping SSH keys into <code>authorized_keys</code> or installing systemd units.</li>
</ul>
<p>This vulnerability affects installations where the bind-mount restriction was relied upon as the primary defense against host exposure, particularly in shared environments with non-administrator container creators.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Upgrade Portainer to versions 2.33.8, 2.39.2, or 2.41.0 or later to patch CVE-2026-44850.</li>
<li>Deploy the Sigma rule <code>Detect Portainer HostConfig Mounts Bind Type (CVE-2026-44850)</code> to detect attempts to exploit this vulnerability by monitoring container creation events.</li>
<li>Audit recent container creations for <code>HostConfig.Mounts</code> of <code>Type: bind</code> from non-admin Portainer users as suggested in the advisory.</li>
<li>Revoke container-create rights from non-administrator accounts on affected environments until the patched release is deployed as described in the advisory.</li>
</ul>
]]></content:encoded><category domain="severity">high</category><category domain="type">advisory</category><category>privilege-escalation</category><category>vulnerability</category><category>container</category><category>CVE-2026-44850</category></item><item><title>Portainer Missing Authorization on Docker Plugin Endpoints Leads to Host RCE (CVE-2026-44848)</title><link>https://feed.craftedsignal.io/briefs/2026-05-portainer-rce/</link><pubDate>Thu, 14 May 2026 16:29:27 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-05-portainer-rce/</guid><description>Portainer versions 2.33.0 through 2.33.7, 2.39.0 through 2.39.1, and 2.40.0 expose a missing authorization vulnerability (CVE-2026-44848) on the Docker plugin management endpoints, allowing a non-admin user with access to a Docker endpoint to install and enable arbitrary Docker plugins from any registry, ultimately leading to root privileges on the Docker host and unauthorized file system access.</description><content:encoded><![CDATA[<p>Portainer, a web-based management UI for Docker, has a critical missing authorization vulnerability (CVE-2026-44848) affecting versions 2.33.0-2.33.7, 2.39.0-2.39.1, and 2.40.0. This flaw allows a standard (non-admin) user with access to a Docker endpoint to bypass Role-Based Access Control (RBAC) and directly interact with the Docker daemon&rsquo;s plugin management endpoints.  Specifically, the <code>/plugins/*</code> endpoints were not properly registered with an authorization handler. This oversight enables a malicious user to install, enable, and execute arbitrary Docker plugins, gaining root-level privileges on the underlying Docker host. This vulnerability was reported on 2026-03-16 and patched in subsequent releases, highlighting the importance of timely updates for Portainer deployments.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>A non-admin user authenticates to Portainer with access to a Docker endpoint.</li>
<li>The user crafts a <code>POST</code> request to the <code>/plugins/pull</code> endpoint, specifying a malicious Docker plugin from a public or private registry.</li>
<li>Portainer forwards the request to the Docker daemon without proper authorization checks, bypassing RBAC.</li>
<li>Docker pulls the specified plugin image from the registry.</li>
<li>The user crafts a <code>POST</code> request to the <code>/plugins/{name}/enable</code> endpoint to enable the pulled plugin.</li>
<li>Again, Portainer forwards the request to the Docker daemon without authorization.</li>
<li>Docker enables the plugin, granting it requested privileges such as <code>CAP_SYS_ADMIN</code> and host-path mounts.</li>
<li>The malicious Docker plugin executes with root privileges on the Docker host, allowing the user to read and modify files, effectively gaining complete control of the system.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>This vulnerability allows an attacker with limited Portainer privileges to achieve root-level access on the Docker host. The attacker can then read and modify sensitive data, install malware, or disrupt services. Given the widespread use of Portainer in managing Docker environments, a successful exploit could lead to significant data breaches, system compromise, and operational disruption.  Organizations using vulnerable Portainer versions are at high risk and should apply the provided patches or workarounds immediately.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li><strong>Upgrade Portainer:</strong> Immediately upgrade to the latest version of your supported branch (2.33.8, 2.39.2, or 2.41.0) to address the vulnerability as indicated in the advisory.</li>
<li><strong>Apply Workaround:</strong> As an interim measure, revoke Docker endpoint access for non-admin users via Portainer RBAC until the patched release is deployed as suggested in the &ldquo;Workarounds&rdquo; section.</li>
<li><strong>Monitor Docker API Access:</strong> Implement network monitoring to detect unauthorized access to the Docker API, focusing on <code>/plugins/*</code> endpoints, to catch potential exploit attempts.</li>
</ul>
]]></content:encoded><category domain="severity">critical</category><category domain="type">advisory</category><category>privilege-escalation</category><category>execution</category><category>CVE-2026-44848</category></item></channel></rss>