Description
Bifrost HTTP transport before 2.0.0 accepts an enabled custom plugin whose path is an HTTP URL through unauthenticated POST /api/plugins when management authentication is disabled (the default, governance.auth_config.is_enabled=false). The shared-object loader treats an http-prefixed path as a download URL, writes the body to a temporary .so, and passes it to Go's plugin.Open. After a successful open, optional Init runs immediately with the supplied config as the Bifrost process user. On documented dynamically linked builds (DYNAMIC=1 / no static-link flags), which the vendor requires for custom Go plugins, plugin.Open is expected to succeed and this is unauthenticated remote code execution. On the published statically linked Docker image, plugin.Open fails with Dynamic loading not supported, so that build class is only server-side request forgery. Attack complexity is High because the attacker cannot force RCE on the default static image and a loadable plugin must match the host Go version, OS, architecture, and linkage. The 1.6.x HTTP transport line through 1.6.11 does not contain the fix.
Published: 2026-09-06
Score: 8.1 High
EPSS: 1.1% Low
KEV: No
Impact: Unauthenticated remote code execution via dynamic plugin loading
Action: Immediate Patch
AI Analysis

Impact

Bifrost HTTP transport versions prior to 2.0.0 allow an unauthenticated attacker to create a custom plugin whose path is an HTTP URL through the POST /api/plugins endpoint when dashboard authentication is disabled. The shared‑object loader treats the HTTP prefix as a download URL, writes the retrieved content to a temporary .so file, and passes it to Go's plugin.Open. Once the plugin is opened, its optional Init function runs immediately with the supplied configuration as the Bifrost process user, providing a full uncompromised remote code execution channel. The flaw is rooted in improper access control (CWE‑284), missing authentication checks (CWE‑306), and insecure code execution (CWE‑94).

Affected Systems

The vulnerability affects the Bifrost project maintained by maximhq. All HTTP transport builds before version 2.0.0, including the 1.6.x series through 1.6.11, are susceptible when the product is built with dynamic linking enabled. The vendor requires dynamic linking for custom Go plugins, but the published statically linked Docker image is not affected because plugin.Open fails in that configuration, limiting the impact to server‑side request forgery in that scenario.

Risk and Exploitability

The assessed CVSS score is 8.1, indicating a high severity. No EPSS data is available, and the vulnerability is not listed in CISA’s KEV catalog. Attackers can exploit the flaw over an open network path, as the default configuration turns off management authentication. Successful exploitation requires delivering a compatible Go plugin that matches the host's Go version, operating system, architecture, and linking style, which makes the attack complexity high. Once succeeded, the attacker gains full control of the Bifrost process with the privileges it runs under.

Generated by OpenCVE AI on September 6, 2026 at 12:35 UTC.

Remediation

Vendor Solution

Upgrade Bifrost HTTP transport to 2.0.0 or later. The fix (PR #5763) refuses create and update of a non-builtin plugin path when the request was let through because dashboard authentication is disabled or unconfigured (403), and replaces the plugin downloader with an SSRF-hardened client. The 1.6.x line through 1.6.11 does not include this change.


Vendor Workaround

If custom Go plugins are not required, run the statically linked binary or official Docker image so plugin.Open cannot succeed. Otherwise enable dashboard authentication and keep the management listener off untrusted networks.


OpenCVE Recommended Actions

  • Upgrade the Bifrost HTTP transport to version 2.0.0 or later so that plugin path creation is denied when dashboard authentication is disabled and the plugin downloader is replaced with an SSRF‑hardened client.
  • If upgrading is not immediately possible, run the statically linked binary or the official Docker image, which prevents plugin.Open from succeeding and thus removes the RCE path.
  • If custom Go plugins are necessary, enable dashboard authentication and ensure that the management listener is not exposed to untrusted networks to mitigate the risk of abuse.

Generated by OpenCVE AI on September 6, 2026 at 12:35 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Tue, 08 Sep 2026 19:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'total'}, 'version': '2.0.3'}


Sun, 06 Sep 2026 13:15:00 +0000

Type Values Removed Values Added
First Time appeared Maximhq
Maximhq bifrost
Vendors & Products Maximhq
Maximhq bifrost

Sun, 06 Sep 2026 11:30:00 +0000

Type Values Removed Values Added
Description Bifrost HTTP transport before 2.0.0 accepts an enabled custom plugin whose path is an HTTP URL through unauthenticated POST /api/plugins when management authentication is disabled (the default, governance.auth_config.is_enabled=false). The shared-object loader treats an http-prefixed path as a download URL, writes the body to a temporary .so, and passes it to Go's plugin.Open. After a successful open, optional Init runs immediately with the supplied config as the Bifrost process user. On documented dynamically linked builds (DYNAMIC=1 / no static-link flags), which the vendor requires for custom Go plugins, plugin.Open is expected to succeed and this is unauthenticated remote code execution. On the published statically linked Docker image, plugin.Open fails with Dynamic loading not supported, so that build class is only server-side request forgery. Attack complexity is High because the attacker cannot force RCE on the default static image and a loadable plugin must match the host Go version, OS, architecture, and linkage. The 1.6.x HTTP transport line through 1.6.11 does not contain the fix.
Title Unauthenticated RCE via Custom Plugin HTTP Path on Dynamically Linked Builds
Weaknesses CWE-284
CWE-306
CWE-94
References
Metrics cvssV3_1

{'score': 8.1, 'vector': 'CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H'}


cve-icon MITRE

Status: PUBLISHED

Assigner: JFROG

Published:

Updated: 2026-09-08T18:23:28.573Z

Reserved: 2026-09-06T09:15:54.440Z

Link: CVE-2026-86242

cve-icon Vulnrichment

Updated: 2026-09-08T18:23:25.435Z

cve-icon NVD

Status : Awaiting Analysis

Published: 2026-09-06T12:17:15.583

Modified: 2026-09-09T15:44:01.133

Link: CVE-2026-86242

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-06T13:00:07Z

Weaknesses
  • CWE-284

    Improper Access Control

  • CWE-306

    Missing Authentication for Critical Function

  • CWE-94

    Improper Control of Generation of Code ('Code Injection')