Gemeente Cyber Dreigingsradar
Kritiek
Terug naar het overzicht
KritiekLeveranciersincidentGitHub Security Advisories

CamoFox MCP: Unauthenticated HTTP MCP browser-control surface

CamoFox MCP: Unauthenticated HTTP MCP browser-control surface

Prioriteit & onderbouwing

58 / 100

Prioriteit: Verhoogd

Deze week beoordelen

Verhoogd (58/100): deze week beoordelen. Zwaarst wegend: technische ernst en exploitatie.

Threat Score85 / 100

hoog

  • Technische ernst (severity): Genormaliseerde ernst 'critical'; geen CVSS-score beschikbaar.
Exploit Score45 / 100

midden

  • Exploit geclaimd: Een exploit wordt geclaimd maar is niet onafhankelijk bevestigd.
Municipal Relevance Score35 / 100

midden

  • Gemeentelijke relevantie: Relevantiescore 35/100 uit de relevantie-engine (module 5).
Action Urgency Score58 / 100

verhoogd

  • Technische ernst: Threat Score 85/100 x gewicht 25%.
  • Exploitatie: Exploit Score 45/100 x gewicht 25%.
  • Gemeentelijke relevantie: Relevantiescore 35/100 x gewicht 22%.
  • Betrouwbaarheid van het signaal: Confidence 'likely' x gewicht 12%.
  • Blootstellingskans: Geschatte blootstelling 30% x gewicht 10%.
  • Betrouwbaarheid van de bron: Bronbetrouwbaarheid 88% x gewicht 6%.

De priority_score is de Action Urgency Score: een gewogen combinatie van de technische ernst, de exploitatie en de gemeentelijke relevantie.

Toelichting

# Unauthenticated HTTP MCP browser-control surface in `camofox-mcp` ## Summary `camofox-mcp` exposed a Streamable HTTP MCP endpoint at `/mcp` with rate limiting but no inbound MCP-layer authentication. When HTTP mode was enabled, any client that could reach `/mcp` could list and invoke browser-control tools. If `CAMOFOX_API_KEY` was configured, the server then forwarded that server-side key to the underlying `camofox-browser` backend. That means an unauthenticated MCP caller could exercise the server's browser authority without knowing the backend browser API key. Reviewed vulnerable commit: `10e3ac08cb50d830eb4ee00a789229f02f28a1a4` Fixed commit observed on main: `599f56ee40f8062aeca541c251ed1d39fb437f50` Fixed release observed: `v1.13.2` Suggested severity: High, with the caveat that default loopback-only deployments reduce practical exposure. ## Root cause In the reviewed commit, `src/http.ts` creates the Express MCP app and applies only a rate limiter to `/mcp`: ```ts const app = createMcpExpressApp({ host: config.httpHost }); const limiter = rateLimit({ windowMs: 60_000, limit: config.httpRateLimit, standardHeaders: true, legacyHeaders: false }); app.use("/mcp", limiter); ``` The `POST /mcp` handler then creates a server and `StreamableHTTPServerTransport` and passes the request body into the MCP transport without checking `Authorization`, an inbound API key, allowed hosts, or public-bind safety: ```ts app.post("/mcp", async (req: any, res: any) => { try { const { server } = createServer(config); const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined }); await server.connect(transport); await transport.handleRequest(req, res, req.body); ``` `src/config.ts` made HTTP mode configurable and defaulted the HTTP host to loopback, but it did not require an inbound HTTP client secret: ```ts transport: cli.transport ?? envTransport ?? "stdio", httpPort: cli.httpPort ?? (Number.isNaN(httpPortFromEnv) ? 3000 : httpPortFromEnv), httpHost: cli.httpHost ?? env.CAMOFOX_HTTP_HOST ?? "127.0.0.1", ``` Separately, `src/client.ts` forwarded `CAMOFOX_API_KEY` server-side to the browser backend: ```ts if (this.apiKey) { headers.set("x-api-key", this.apiKey); headers.set("authorization", `Bearer ${this.apiKey}`); } ``` So `CAMOFOX_API_KEY` protected the MCP server's outbound requests to the backend browser service, but did not authenticate inbound HTTP MCP clients. ## Auth boundary The vulnerable boundary was the HTTP MCP endpoint. The client did not need to provide `Authorization` or any `CAMOFOX_API_KEY` value to call MCP tools. The default bind was `127.0.0.1`, which lowers severity for default local-only deployments. The risky cases are documented HTTP/remote-client deployments, Docker/port-forwarded deployments, or any environment where a browser page, local network client, reverse proxy, or another user can reach the `/mcp` endpoint. ## Proof of concept I used a fake `camofox-browser` backend so no real browser was launched and no external navigation occurred. The harness starts the reviewed `dist/http.js` server with `CAMOFOX_API_KEY=server-side-secret`, connects an MCP SDK client to `/mcp` with no auth headers, lists tools, then calls `create_tab` and `navigate`. Observed output: ```json { "authUsedByClient": false, "listedToolCount": 46, "backendRequests": [ { "method": "POST", "url": "/tabs", "headers": { "authorization": "Bearer server-side-secret", "x-api-key": "server-side-secret" } }, { "method": "POST", "url": "/tabs/fake-tab-1/navigate", "headers": { "authorization": "Bearer server-side-secret", "x-api-key": "server-side-secret" } } ], "observedUnauthenticatedBrowserControl": true, "serverSideSecretForwardedToBackend": true } ``` This demonstrates both parts of the issue: 1. The MCP client used no inbound authentication. 2. The server still used its configured backend browser secret when forwarding the tool calls. ## Impact An unauthenticated client that can reach the HTTP MCP endpoint can exercise b

Onderbouwing van de classificatie

Categorie 'supplier_incident' overgenomen van de bron; geen specifieker incidenttype gedetecteerd. Severity 'critical' bepaald op basis van: bronlabel 'high', trefwoord 'unauthenticated'. Confidence 'likely': gerenommeerd securityonderzoek (GitHub Security Advisories). Geen bekende leveranciers of producten herkend.

Kwetsbaarheden

Geen CVE toegekendPrioriteitsscore 0.0 / 100
CVSS
EPSS
KEV
Nee
npm

Gemeentelijke relevantie

35

Deze dreiging scoort 35/100 voor de gemeentelijke relevantie. Meegewogen: een hoge ernstinschaling en een leveranciers- of ketenrisico. Geraakte processen: Netwerk en infrastructuur, Leveranciersketen.

Bestuurlijke duiding

Deze dreiging is relevant voor de gemeente. Omdat het een leverancier betreft, is de gemeente afhankelijk van diens herstel en is regie op de keten nodig. De impact is beheersbaar mits de geadviseerde maatregelen tijdig worden opgevolgd. Laat de CISO de voortgang bewaken en escaleer richting directie zodra nieuwe signalen daartoe aanleiding geven.

Geraakte processen

Netwerk en infrastructuurLeveranciersketen

Geraakte technologie

camofox-mcpnpm

Betrokken rollen

CISO · ISO · SOC · ICT beheer · Leveranciersmanager

Operationele acties

  • Inventariseer welke koppelingen en gegevensstromen met de leverancier lopen.
  • Schakel waar nodig de koppeling met de leverancier tijdelijk uit.
  • Vraag bewijs van herstel op voordat de dienstverlening wordt hervat.

Concrete stappen voor ICT-beheer en het securityteam.

Aanbevolen acties

  • Breng in kaart welke leveranciers en koppelingen zijn geraakt.
  • Vraag de leverancier om een statusupdate en een herstelplan.
  • Beoordeel de impact op de eigen dienstverlening.

Dit zijn algemene handelingsperspectieven. Stem de opvolging af op de eigen omgeving en het ISMS van uw gemeente.

Kenmerken

Ernst
Kritiek
Categorie
Leveranciersincident
Zekerheid
Waarschijnlijk
Status
Verrijkt
CVE's
Geen
Prioriteitsscore
58 / 100 · Verhoogd
Bron
GitHub Security Advisories
Gepubliceerd
19 mei 2026

Labels

Supply chainOpensource
Originele publicatie