T03 · Remote Payload Retrieval and Execution
- Location
scripts/setup.sh:280- Finding
Mutable Remote NodeSource Script Is Executed Through a Privileged Shell
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill has a coherent browser-automation purpose, but it captures authenticated browser session data and has under-scoped controls around local services, sensitive exports, and optional privileged installs.
Review before installing. Use this only in an isolated VM or tightly contained container, bind VNC and CDP to localhost, avoid logging into sensitive accounts unless exporting their session cookies is intentional, skip the auto-install path until curl|bash and eval are removed, set private output permissions, and delete exported cookies/pages promptly.
scripts/setup.sh:280Mutable Remote NodeSource Script Is Executed Through a Privileged Shell
scripts/_env_loader.sh:11Skill Configuration Files Are Sourced as Arbitrary Shell Code
scripts/export_cookies.sh:7Authentication Cookies and Rendered Page Artifacts Are Written Without Restrictive Permissions
scripts/start_vnc.sh:40VNC and Browser-Control Services Are Not Explicitly Restricted to Loopback and Chrome Runs Without Its Sandbox
The skill explicitly supports exporting Chrome cookies, rendered HTML, and screenshots from a live browser session after manual login or MFA intervention. Even if intended for legitimate automation, this creates a powerful credential/session-harvesting capability that could be abused to capture authenticated sessions, bypass user intent, and exfiltrate sensitive data from browser state.
er X display provided by `Xvfb`.
- **Operator UI**: present the running browser to an operator via `x11vnc` (or optional noVNC web proxy). Operators can connect over SSH-forwarded ports or noVNC with token gating to perform manual actions (solve CAPTCHAs, authenticate), then signal the system to capture artifacts.
- **Programmatic capture**: export rendered `outerHTML`, full-page screenshots, and cookies using Chrome CDP (Playwright/Puppeteer compatible). Exports are intended for downstream automated analysis or storage.
- **Safe restart and recovery**: helpers to restart Chrome when flags change, with explicit user confirmation required for any action that may terminate existing browser instances.
- **Artifact hygiene**: captured artifacts are written to an artifacts directory with restrictive file permissions. The skill logs actions and writes diagnostic artifacts to facilitate debugging and comparison-based analysis.
## Security, privacy, and operational notes
- **VNC security**:
The skill description understates that it includes interactive setup, .env creation/modification, VNC credential generation, and optional package-manager execution. Those behaviors materially change the trust model because they can alter the host, create secrets, and install software, all of which are more dangerous than a simple browser-export utility.
The skill description understates that it includes interactive setup, .env creation/modification, VNC credential generation, and optional package-manager execution. Those behaviors materially change the trust model because they can alter the host, create secrets, and install software, all of which are more dangerous than a simple browser-export utility.
The skill description understates that it includes interactive setup, .env creation/modification, VNC credential generation, and optional package-manager execution. Those behaviors materially change the trust model because they can alter the host, create secrets, and install software, all of which are more dangerous than a simple browser-export utility.
The skill explicitly exports browser cookies, rendered HTML, and screenshots from an operator-driven authenticated session. Those capabilities closely match information-stealer behavior because they enable extraction of session tokens and sensitive page content; even if intended for legitimate automation, compromise or misuse would directly expose account access and confidential data.
er X display provided by `Xvfb`.
- **Operator UI**: present the running browser to an operator via `x11vnc` (or optional noVNC web proxy). Operators can connect over SSH-forwarded ports or noVNC with token gating to perform manual actions (solve CAPTCHAs, authenticate), then signal the system to capture artifacts.
- **Programmatic capture**: export rendered `outerHTML`, full-page screenshots, and cookies using Chrome CDP (Playwright/Puppeteer compatible). Exports are intended for downstream automated analysis or storage.
- **Safe restart and recovery**: helpers to restart Chrome when flags change, with explicit user confirmation required for any action that may terminate existing browser instances.
- **Artifact hygiene**: captured artifacts are written to an artifacts directory with restrictive file permissions. The skill logs actions and writes diagnostic artifacts to facilitate debugging and comparison-based analysis.
## Security, privacy, and operational notes
- **VNC security**:
Referenced artifact was not completely inspected
Include an appropriate `LICENSE` file when publishing (e.g., MIT). Update author/maintainer fields in `SKILL.md` prior to external publication.
The skill explicitly manages sensitive material including VNC passfiles, .env contents, and browser session artifacts such as cookies. In this context, references to .env are not harmless because the skill's stated functionality includes collecting and storing authentication-related data that could expose credentials or session tokens if mishandled.
nodejs npm python3-pip
---
Missing requirements: Xvfb x11vnc chrome node VNC_PASSFILE .env
--- Handling missing: Xvfb ---
Install Xvfb? (y/N) n
Skip. Manual: sudo apt-get install xvfb
Creating a template .env is not inherently malicious, but in this skill it may normalize storing operational secrets and ports in a local file that later scripts will consume. Because the skill also exposes VNC and CDP interfaces, weak handling of that file could facilitate session takeover or unauthorized browser access.
--- Handling missing: node --- Install Node.js v22+ using suggested command? (y/N) n Skipped automatic install. Please run the printed command manually. --- Handling missing: .env --- Create template .env? (y/N) y Created skills/headful-browser-vnc/.env
The creation of a local .env file is a credential-handling concern in this skill because it centralizes security-relevant configuration for VNC, proxies, and debugging endpoints. If the file is left readable or checked into source control, it can leak access details that materially weaken the environment.
Skipped automatic install. Please run the printed command manually. --- Handling missing: .env --- Create template .env? (y/N) y Created skills/headful-browser-vnc/.env
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
SKILL_DIR=/
#!/usr/bin/env bash
# load .env if present (non-destructive). Exports variables to child processes.
# Prefer a .env colocated with the skill scripts directory; fall back to parent for backward-compat.
SKILL_DIR="$(cd "$(dirname "$0")" && pwd)"
ENV_FILE="$SKILL_DIR/.env"
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
SKILL_DIR=/
#!/usr/bin/env bash
# load .env if present (non-destructive). Exports variables to child processes.
# Prefer a .env colocated with the skill scripts directory; fall back to parent for backward-compat.
SKILL_DIR="$(cd "$(dirname "$0")" && pwd)"
ENV_FILE="$SKILL_DIR/.env"
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
SKILL_DIR=/
#!/usr/bin/env bash
# load .env if present (non-destructive). Exports variables to child processes.
# Prefer a .env colocated with the skill scripts directory; fall back to parent for backward-compat.
SKILL_DIR="$(cd "$(dirname "$0")" && pwd)"
ENV_FILE="$SKILL_DIR/.env"
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
SKILL_DIR=/
#!/usr/bin/env bash
# load .env if present (non-destructive). Exports variables to child processes.
# Prefer a .env colocated with the skill scripts directory; fall back to parent for backward-compat.
SKILL_DIR="$(cd "$(dirname "$0")" && pwd)"
ENV_FILE="$SKILL_DIR/.env"
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
SKILL_DIR=/
#!/usr/bin/env bash
# load .env if present (non-destructive). Exports variables to child processes.
# Prefer a .env colocated with the skill scripts directory; fall back to parent for backward-compat.
SKILL_DIR="$(cd "$(dirname "$0")" && pwd)"
ENV_FILE="$SKILL_DIR/.env"
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
SKILL_DIR=/
#!/usr/bin/env bash
# load .env if present (non-destructive). Exports variables to child processes.
# Prefer a .env colocated with the skill scripts directory; fall back to parent for backward-compat.
SKILL_DIR="$(cd "$(dirname "$0")" && pwd)"
ENV_FILE="$SKILL_DIR/.env"
The script automatically sources a local .env file and exports all variables to child processes. In a skill that exposes Chrome CDP exports and browser automation, this increases the chance that sensitive tokens or credentials from .env are broadly propagated into subprocesses and become accessible to other components, debug interfaces, or accidental logging.
SKILL_DIR=/
#!/usr/bin/env bash
# load .env if present (non-destructive). Exports variables to child processes.
# Prefer a .env colocated with the skill scripts directory; fall back to parent for backward-compat.
SKILL_DIR="$(cd "$(dirname "$0")" && pwd)"
ENV_FILE="$SKILL_DIR/.env"
if [ ! -f "$ENV_FILE" ]; then
The fallback to '$SKILL_DIR/../.env' expands the trust boundary beyond the script directory and can cause the script to ingest secrets or attacker-controlled environment data from a parent directory. If the parent directory is less controlled, this can lead to configuration injection, credential exposure to child processes, or unsafe behavior in downstream tools.
# load .env if present (non-destructive). Exports variables to child processes.
# Prefer a .env colocated with the skill scripts directory; fall back to parent for backward-compat.
SKILL_DIR="$(cd "$(dirname "$0")" && pwd)"
ENV_FILE="$SKILL_DIR/.env"
if [ ! -f "$ENV_FILE" ]; then
# backward-compat fallback
ENV_FILE="$SKILL_DIR/../.env"
Conditionally sourcing the discovered .env file means arbitrary shell syntax in that file will be executed in the current shell context, not merely parsed as key-value pairs. In a security-sensitive browser automation skill, this is more dangerous because compromised workspace content or an untrusted .env could execute commands, alter runtime behavior, and expose credentials through inherited environment variables.
ENV_FILE="$SKILL_DIR/.env"
if [ ! -f "$ENV_FILE" ]; then
# backward-compat fallback
ENV_FILE="$SKILL_DIR/../.env"
fi
if [ -f "$ENV_FILE" ]; then
# ensure restrictive permissions
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Resolve ENV_FILE path (skill-local preferred, fallback to parent)
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
ENV_FILE="$SCRIPT_DIR/.env"
if [ ! -f "$ENV_FILE" ]; then
ENV_FILE="$(dirname "$SCRIPT_DIR")/.env"
fi
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Resolve ENV_FILE path (skill-local preferred, fallback to parent)
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
ENV_FILE="$SCRIPT_DIR/.env"
if [ ! -f "$ENV_FILE" ]; then
ENV_FILE="$(dirname "$SCRIPT_DIR")/.env"
fi
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Resolve ENV_FILE path (skill-local preferred, fallback to parent)
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
ENV_FILE="$SCRIPT_DIR/.env"
if [ ! -f "$ENV_FILE" ]; then
ENV_FILE="$(dirname "$SCRIPT_DIR")/.env"
fi
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).
fontconfig freetype
Arch Linux (pacman):
pacman -Syu --noconfirm xorg-server-xvfb x11vnc fluxbox xorg-x11-utils \
chromium nodejs npm python-pip noto-fonts-cjk
Notes:
The script constructs an executable pacman command using --noconfirm and later runs it with eval in auto-install mode. In an agent skill, allowing unattended package-manager actions weakens operator control and can amplify the impact of accidental or manipulated installation flows.
"
;;
arch)
cmd_xvfb="${PKG_PREFIX}pacman -Syu --noconfirm xorg-server-xvfb"
cmd_x11vnc="${PKG_PREFIX}pacman -S --noconfirm x11vnc"
cmd_chrome="${PKG_PREFIX}pacman -S --noconfirm chromium || true"
cmd_node="${PKG_PREFIX}pacman -S --noconfirm nodejs npm"
This x11vnc install command uses a noninteractive pacman flag in an execution path that can perform system changes. Even with outer prompts, disabling the tool's native confirmation reduces a safety barrier for privileged modifications.
;;
arch)
cmd_xvfb="${PKG_PREFIX}pacman -Syu --noconfirm xorg-server-xvfb"
cmd_x11vnc="${PKG_PREFIX}pacman -S --noconfirm x11vnc"
cmd_chrome="${PKG_PREFIX}pacman -S --noconfirm chromium || true"
cmd_node="${PKG_PREFIX}pacman -S --noconfirm nodejs npm"
;;
This chromium install command combines --noconfirm with eval-based execution and also suppresses failure via '|| true'. That combination can hide unsuccessful or partial package actions while still enabling unattended system modification.
arch)
cmd_xvfb="${PKG_PREFIX}pacman -Syu --noconfirm xorg-server-xvfb"
cmd_x11vnc="${PKG_PREFIX}pacman -S --noconfirm x11vnc"
cmd_chrome="${PKG_PREFIX}pacman -S --noconfirm chromium || true"
cmd_node="${PKG_PREFIX}pacman -S --noconfirm nodejs npm"
;;
alpine)
No suspicious patterns detected.