T05 · Unauthorized Access and Privilege Escalation
- Location
SKILL.md:352- Finding
Security Controls Can Be Disabled Through the CloakBrowser Unsafe Mode
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This browser-research skill is mostly coherent, but it exposes unsafe bypass modes, persistent container setup, and sensitive browser/session controls that need review before installation.
Install only if you trust the Camofox/CloakBrowser components and are comfortable with an agent controlling a local browser service. Avoid `--unsafe`, avoid persistent profiles unless explicitly needed, do not put proxy passwords directly in commands, pin and verify any Docker image before running it, and keep API/admin keys narrowly scoped.
SKILL.md:352Security Controls Can Be Disabled Through the CloakBrowser Unsafe Mode
SKILL.md:289Mutable and Unqualified Docker Image Creates a Supply-Chain Execution Risk
SKILL.md:323Proxy Credentials Are Embedded in Command-Line Arguments
The documented ability to delete session traces is a destructive capability that can affect forensic visibility and debugging artifacts. In an agent-accessible skill, this increases the chance of evidence removal or accidental deletion of operational records.
API_KEY="${CAMOFOX_API_KEY}"
The API key (Bearer) is required for `POST /evaluate`, `POST /sessions/{userId}/cookies`, `DELETE /sessions/{userId}`, `GET /sessions/{userId}/traces`, `DELETE /sessions/{userId}/traces/{filename}`, and `POST /pressure/cleanup`. `POST /stop` requires `x-admin-key` header (see below). Other endpoints work without auth.
**General pattern:**
The documented ability to delete session traces is a destructive capability that can affect forensic visibility and debugging artifacts. In an agent-accessible skill, this increases the chance of evidence removal or accidental deletion of operational records.
API_KEY="${CAMOFOX_API_KEY}"
The API key (Bearer) is required for `POST /evaluate`, `POST /sessions/{userId}/cookies`, `DELETE /sessions/{userId}`, `GET /sessions/{userId}/traces`, `DELETE /sessions/{userId}/traces/{filename}`, and `POST /pressure/cleanup`. `POST /stop` requires `x-admin-key` header (see below). Other endpoints work without auth.
**General pattern:**
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
1. **Create tab** → `POST /tabs` → get `tabId` (+ initial snapshot)
2. **Operate** on the tab with snapshot, evaluate, click, scroll...
3. **Close tab** → `DELETE /tabs/{tabId}`
> **TabId persistence:** Always keep the `tabId` between commands. Camofox commands must never run in isolation: create a tab, use the `tabId` for all subsequent operations, then close it.
>
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
docker start camofox-browser
# If doesn't exist (⚠️ use --env-file for API keys, bind to 127.0.0.1):
# Create .env file first: echo "CAMOFOX_API_KEY=your-key" > .env
docker run -d --name camofox-browser --restart unless-stopped \
-p 127.0.0.1:9377:9377 \
--env-file .env \
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
docker start camofox-browser
# If doesn't exist (⚠️ use --env-file for API keys, bind to 127.0.0.1):
# Create .env file first: echo "CAMOFOX_API_KEY=your-key" > .env
docker run -d --name camofox-browser --restart unless-stopped \
-p 127.0.0.1:9377:9377 \
--env-file .env \
The skill explicitly documents an --unsafe mode that bypasses SSRF protection, sandboxing, and path-traversal checks, even though the skill's purpose is ordinary web research. In an agent setting, exposing a one-flag bypass for multiple security boundaries materially increases the chance of internal-network access, local file/script abuse, or execution beyond intended constraints.
The activation guidance says to use the skill whenever web research is needed, which is overly broad for a capability that includes arbitrary page evaluation, browser automation, admin endpoints, proxies, and protected-site tooling. Broad routing increases the odds that the agent invokes higher-risk tooling unnecessarily, expanding exposure to data transmission and misuse paths.
The core rules prohibit browsing Instagram, Facebook, TikTok, LinkedIn, and Twitter/X with Camofox or CloakBrowser, yet the Camofox macro table later includes @linkedin_search, @twitter_search, @instagram_search, and @tiktok_search. This is an active contradiction in the skill's own guidance about intended usage.
The documentation includes authenticated requests involving cookies, traces, and session operations, but does not prominently warn that using them may transmit or manipulate authentication/session data. In an agent context, that omission can lead to accidental handling of sensitive tokens or cookies without informed consent or clear scoping.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 1. Create tab and navigate → returns { tabId, url } (snapshot separate)
exec curl -s -X POST "http://localhost:9377/tabs" \
-H 'Content-Type: application/json' \
-d "{\"userId\":\"$USER_ID\",\"sessionKey\":\"$SESSION_KEY\",\"url\":\"<url>\"}"
This endpoint allows arbitrary JavaScript expressions to be sent to the browser evaluation API, authenticated with a bearer token. In context, that creates a powerful remote code/DOM execution surface inside the browsing environment, which can be abused for unauthorized data extraction, unsafe interactions, or expansion of impact if paired with weaker sandboxing or the documented --unsafe bypasses.
# Options: &includeScreenshot=true | &offset=N (pagination)
# 3. Evaluate (arbitrary JavaScript — for HTML tables, <code>, <pre>, non-ARIA divs)
exec curl -s -X POST "http://localhost:9377/tabs/<tabId>/evaluate" \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $API_KEY" \
-d "{\"userId\":\"$USER_ID\",\"expression\":\"<js-expression>\"}"
The documented /stop admin endpoint allows terminating the browser service, which is unrelated to normal web research and gives the agent operational control over shared infrastructure. If misused, it can disrupt other sessions, destroy availability, and interfere with auditing or ongoing tasks.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 1. Create tab
exec curl -s -X POST "http://localhost:9377/tabs" \
-H 'Content-Type: application/json' \
-d '{"userId":"$USER_ID","sessionKey":"$SESSION_KEY","url":"https://example.com"}'
# → {"tabId":"abc123","url":"https://example.com/"}
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
-d '{"userId":"$USER_ID","expression":"document.querySelector(\"main\")?.innerHTML || document.body.innerHTML"}'
# 4. Interact: scroll, click, type...
exec curl -s -X POST "http://localhost:9377/tabs/abc123/scroll" \
-H 'Content-Type: application/json' \
-d '{"userId":"$USER_ID","direction":"down","amount":500}'
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.
The skill documents proxy usage for browsing protected sites without a strong warning that page contents, queries, and possibly session traffic may traverse third-party infrastructure. That can create confidentiality and compliance risks, especially when an agent may browse user-specified targets or carry cookies/session state.
The document frames --unsafe as an available expert option while acknowledging it bypasses SSRF, sandbox, and path-traversal protections. Presenting a consolidated safety bypass in normal documentation semantically normalizes dangerous behavior and makes it easier for an agent to justify crossing boundaries that should remain hard security limits.
Detected: suspicious.generated_source_template_injection