Skip to main content

pi-agent-dashboard EUVDEUVD-2026-104154

| CVE-2026-112101 LOW
Origin Validation Error (CWE-346)
2026-10-19 VulDB GHSA-wx6r-347g-2f27
2.1
CVSS 4.0 · Vendor: VulDB
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Lure victim to malicious web page
  2. Delivery
    Browser JS dials ws://127.0.0.1:8000/ws
  3. Exploit
    Gateway accepts untrusted Origin
  4. Execution
    Spawn terminal and blind-POST /api/*
  5. Impact
    Read session snapshot, control local shell

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Origin validation
Exploitation Conditions

Requires (1) the victim to be actively running pi-agent-dashboard (version ≤ 0.8.0) listening on loopback (ws://127.0.0.1:8000/ws), and (2) the victim to visit an attacker-controlled web page in a browser on the same host (UI:P / UI:R) - the malicious page's script then opens a cross-origin WebSocket that the pre-patch gateway admits without validating the Origin header, and can also drive untrusted-Origin mutations against /api/* and POST /auth/logout. Limiting factors: no server-side authentication is needed (PR:N), but exploitation is gated by the required user interaction, by the dashboard being bound to loopback rather than exposed network-wide, and by the narrow single-host victim model. Not exploitable against header-less local clients (pi-dashboard CLI, curl, the bridge) since browsers cannot omit Origin; the 0.9.0 patch closes it via a WS-upgrade Origin gate, an onRequest CSRF gate, and a pi-gateway Origin refusal.

Impact

This is a cross-site WebSocket hijacking / CSRF-class origin-validation flaw (CWE-346) in the pi-agent-dashboard WebSocket Gateway, rated CVSS 4.0 base 5.3 (Medium) with AV:N/AC:L/AT:N/PR:N/UI:P and only low integrity impact (VI:L). The signals partly conflict: the CVSS vector sets VC:N (no confidentiality impact), but the vendor's own patch notes (issue #625) state that any visited web page could open ws://127.0.0.1:8000/ws, receive the session snapshot broadcast, spawn a terminal, and blind-POST every /api/* route - that is clear confidentiality loss and potential command execution via the spawned terminal, so the official vector appears to UNDER-rate real impact. Countervailing factors keep real-world priority moderate: exploitation requires user interaction (UI:P - the victim must visit an attacker-controlled page while the dashboard is running on loopback), the product is a niche local developer dashboard rather than an internet-facing service, no EPSS score is provided, and it is NOT on the CISA KEV list. A public exploit reference exists (GitHub issue #625), so this is 'publicly available exploit code exists,' which is a distinct and weaker signal than active exploitation - there is no evidence of in-the-wild use. Net: a credible, patch-worthy browser-pivot bug for anyone running the dashboard, but not an emergency-grade internet-wide threat. Note the description's mention of a 'cwd argument' is not corroborated by the source-code evidence, which is entirely about Origin admission on the WebSocket upgrade and /api/* mutations - verify the exact trigger with the vendor.

Exploit ScenarioDerived

A developer runs pi-agent-dashboard locally on 127.0.0.1:8000 and, in the same browser, visits an attacker-controlled web page. JavaScript on that page silently opens a cross-origin WebSocket to the dashboard (which, pre-0.9.0, performs no Origin validation on the upgrade), receives the broadcast session snapshot, spawns a terminal, and issues blind state-changing POSTs to /api/* routes using the victim's ambient trust. A public exploit reference is disclosed in GitHub issue #625.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 19, 2026

Cross-site WebSocket hijacking and request-forgery in BlackBeltTechnology pi-agent-dashboard through 0.8.0 lets any web page the victim visits open an unauthenticated WebSocket to the loopback dashboard (ws://127.0.0.1:8000/ws), receive the session snapshot, spawn a terminal, and blind-POST to /api/* and /auth/logout using the victim's ambient trust, because the gateway validates neither Origin nor a CSRF gate on those paths. Exploitation requires the dashboard to be running locally and the user to browse an attacker-controlled page on the same host (UI:P/UI:R); no credentials are needed (PR:N), but the pre-patch impact is limited to low integrity (VI:L / CVSS 4.0 base 5.3 Medium) since CORS only ever hid responses, not requests. Publicly available exploit code exists (a GitHub issue tracking the flaw and an upstream fix PR), and the vendor shipped a patched release; no CISA KEV entry has been recorded, so active in-the-wild exploitation is not confirmed.

RemediationAI

Vendor-released patch: upgrade to pi-agent-dashboard 0.9.0 or later (release tag v0.9.0, commit 48fd0bad5adfe76af9736599699d51a5f60019f6, merged via PR https://github.com/BlackBeltTechnology/pi-agent-dashboard/pull/636); this adds the WS-upgrade Origin gate, the onRequest CSRF gate on /api/* and POST /auth/logout, and the pi-gateway Origin refusal. If upgrading immediately is not possible, compensating controls are: keep the dashboard bound to 127.0.0.1 and never expose port 8000 to a LAN or tunnel interface, and stop the dashboard whenever browsing untrusted sites in the same browser profile - note that these only shrink the window, since any page the victim loads while the service runs can still reach loopback and the pre-patch gateway has no Origin check. Operators of hand-started zrok share public tunnels must add that share's origin to cors.allowedOrigins in ~/.pi/dashboard/config.json after upgrading, because 0.9.0 deliberately drops the *.share.zrok.io admission wildcard (side effect: dashboard-managed tunnels still work, manual shares are rejected until listed). Restricting browser use on dashboard hosts to a dedicated profile or separate browser is a partial mitigation only, and disabling the WebSocket/terminal feature entirely if it is not required removes the hijack primitive at the cost of losing terminal access.

Affected VersionsENISA

pi-agent-dashboard 0.7
pi-agent-dashboard 0.4
pi-agent-dashboard 0.5
pi-agent-dashboard 0.2
pi-agent-dashboard 0.1
pi-agent-dashboard 0.3
pi-agent-dashboard 0.6
pi-agent-dashboard 0.8.0

Affected Packages

euvd pi_agent_dashboard no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The dashboard is a Node/Fastify server (packages/server/src/server.ts) exposing a WebSocket gateway on port 8000 plus a REST surface under /api/ and /auth/logout, with a separate pi bridge gateway (packages/server/src/pi/bridge-upgrade-auth.ts) for local CLI/bridge clients. The root cause is CWE-346 (Origin Validation Error): the WebSocket 'upgrade' handler and the REST routes treated the browser's same-origin policy and the @fastify/cors callback as a security boundary, but CORS only decides whether a cross-origin script may READ a response - it never blocks the request or the TCP upgrade. Consequently a malicious page could dial ws://127.0.0.1:8000/ws (browsers always send Origin on WebSocket handshakes), get admitted, receive the broadcast session snapshot, and spawn a terminal, while also issuing blind state-changing POSTs to /api/* and /auth/logout. Because header-less clients (curl, the pi-dashboard CLI, the bridge, the skill) cannot be distinguished from browsers by Origin absence alone, the fix introduces a shared admission decision (isOriginAdmitted in cors-origin.ts) combining the CORS allow-list with a Host-header match and removal of the *.share.zrok.io wildcard for admission (free self-service zrok shares are same-site to a victim's tunnel); it is enforced in three places - a 403 before any other branch in the WS upgrade handler, a Fastify onRequest CSRF hook covering /api/* and POST /auth/logout (403 {"error":"untrusted origin"}), and an unconditional refusal of any pi-gateway TCP upgrade carrying an Origin header. The 'cwd' argument in the report refers to the terminal-spawn path reachable after a successful hijack.

Know when Pi Agent Dashboard gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (VulDB) PRIMARY 2.1 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N/E:P
vuln.today AI 5.4 MEDIUM

Browser-driven CSWSH needs no server auth (PR:N) but a victim must visit a malicious page (UI:R); session-snapshot read and blind /api/* writes give C:L/I:L.

3.1 AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (VulDB).

CVSS VectorVendor: VulDB

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
Passive
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
Low
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

3
Severity Changed
Oct 19, 2026 - 10:23 NVD
MEDIUM LOW
CVSS changed
Oct 19, 2026 - 10:23 NVD
5.3 (MEDIUM) 2.1 (LOW)
CVE Published
Oct 19, 2026 - 09:30 cve.org
LOW 2.1

DescriptionCVE.org

A vulnerability was determined in BlackBeltTechnology pi-agent-dashboard up to 0.8.0. The affected element is an unknown function of the file /BlackBeltTechnology/pi-agent-dashboard of the component WebSocket Gateway. Executing a manipulation of the argument cwd can lead to origin validation error. The attack can be executed remotely. The exploit has been publicly disclosed and may be utilized. Upgrading to version 0.9.0 is sufficient to fix this issue. This patch is called 48fd0bad5adfe76af9736599699d51a5f60019f6. It is recommended to upgrade the affected component.

Threat Intelligence Overview

EPSS Score
0.3%
Top 82% exploitable
Prevalence
Low
niche local developer agent dashboard, loopback-bound, limited production footprint
Exploit
POC
Public exploit code exists
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment CIRCL GitHub VulDB

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity LOW
CISA KEV No
Public POC Yes
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Low
Technical Impact
Partial

Priority Score

30
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +10
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy