T03 · Remote Payload Retrieval and Execution
- Location
assets/project-tunnel.sh:521- Finding
Unverified Mutable Native Binary Is Downloaded and Executed
- Content
View full analysis
"${MACHINE_AGENT_RUNNER}" <- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill creates public project URLs as advertised, but it also automatically changes the host, downloads executable code, and leaves background tunnel state that users should review first.
Install only if you are comfortable with a skill that can expose local projects to the public internet, install system packages, download and run a third-party native agent, keep shared tunnel state under your home directory, and stop local processes by port. Review or patch the scripts first if you need explicit consent, HTTPS/WSS control channels, verified binaries, or reliable cleanup.
assets/project-tunnel.sh:521Unverified Mutable Native Binary Is Downloaded and Executed
scripts/fix_env.sh:15Mutable Homebrew Installer Is Downloaded Directly Into a Shell
assets/project-tunnel.sh:829Machine-Wide Tunnel Agent Remains Running After the Documented Stop Operation
assets/project-tunnel.sh:712Tunnel Credentials and Control Messages Use Plaintext Network Protocols
scripts/fix_env.sh:31Autonomous Tunnel Startup Performs Privileged System Package Installation
assets/project-tunnel.sh:583Startup and Stop Logic Can Terminate Unrelated Processes by Port Number
Copying or writing scripts into a user's project directory without clearly declaring that behavior is a meaningful integrity risk, especially when combined with shell execution and automation. Users may unknowingly end up with modified project contents or wrapper scripts that later execute with trust they did not intentionally grant.
Copying or writing scripts into a user's project directory without clearly declaring that behavior is a meaningful integrity risk, especially when combined with shell execution and automation. Users may unknowingly end up with modified project contents or wrapper scripts that later execute with trust they did not intentionally grant.
Copying or writing scripts into a user's project directory without clearly declaring that behavior is a meaningful integrity risk, especially when combined with shell execution and automation. Users may unknowingly end up with modified project contents or wrapper scripts that later execute with trust they did not intentionally grant.
Copying or writing scripts into a user's project directory without clearly declaring that behavior is a meaningful integrity risk, especially when combined with shell execution and automation. Users may unknowingly end up with modified project contents or wrapper scripts that later execute with trust they did not intentionally grant.
Copying or writing scripts into a user's project directory without clearly declaring that behavior is a meaningful integrity risk, especially when combined with shell execution and automation. Users may unknowingly end up with modified project contents or wrapper scripts that later execute with trust they did not intentionally grant.
The trigger phrases include common requests like '启动项目' and 'start my project,' which can unintentionally invoke internet exposure and environment-changing behavior when a user may only want a local dev server. Because the skill's context is public exposure and automation, broad triggers materially raise the risk of accidental activation and unconsented external access.
The skill description does not prominently warn that it may expose a local project to the public internet and automatically install or change system packages. In this context, omission is especially dangerous because users may disclose internal apps or data externally and permit host modifications without informed consent.
The skill is designed to autonomously detect a project, start it, repair the environment, and expose it via a public URL, all without a user-facing warning about system and network consequences. This is dangerous because it can execute local code, install or modify dependencies, and publish a potentially sensitive development service to the internet without informed consent.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
Default behavior (zero-config):
- PROJECT_DIR: current directory
- PROJECT_NAME: package.json.name or current folder name
- PROJECT_PORT: .tunnel-port > .env.local/.env PORT= > 3000
- USER_ID: current system user
- SUBDOMAIN: <project>-<user>
- DOMAIN_MODE: fixed (stable domain)
The cleanup logic kills processes by persisted PID files and by whatever process is currently listening on a port, including sibling-state cleanup and restart paths. If ports or PID files are stale or collide with unrelated services, the script can terminate unrelated local applications, causing denial of service or data loss.
The script downloads an executable agent from GitHub at runtime and immediately marks it executable for later execution, without signature or checksum verification. This creates a supply-chain execution path not disclosed by the skill description, allowing compromise if the release source, network path, or repository is tampered with.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
if [[ -f "${PROJECT_DIR}/.tunnel-port" ]]; then
PROJECT_PORT="$(head -n1 "${PROJECT_DIR}/.tunnel-port" | tr -d '[:space:]')"
else
PROJECT_PORT="$(port_from_file "${PROJECT_DIR}/.env.local" || true)"
if [[ -z "${PROJECT_PORT}" ]]; then
PROJECT_PORT="$(port_from_file "${PROJECT_DIR}/.env" || true)"
fi
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
else
PROJECT_PORT="$(port_from_file "${PROJECT_DIR}/.env.local" || true)"
if [[ -z "${PROJECT_PORT}" ]]; then
PROJECT_PORT="$(port_from_file "${PROJECT_DIR}/.env" || true)"
fi
PROJECT_PORT="${PROJECT_PORT:-3000}"
fi
The skill advertises and instructs shell execution, file reads/writes, and environment modification, but declares no tool scope or permission boundaries. This creates an authorization gap where an agent could perform filesystem and command actions without explicit limitation or user-visible consent, increasing the chance of unsafe execution.
The instruction requires replying with only ✅ 公网地址:<public_url>, which forces a Chinese response regardless of the user's language or locale. This is a natural-language policy issue because no opt-in or language choice is provided, and earlier instructions/examples mix English and Chinese user inputs.
The instruction to avoid asking the user for input unless port detection fails removes an important human checkpoint before high-impact actions are taken. In context, the autonomous behavior includes shell script execution, environment modification, and external network exposure, making the lack of confirmation materially unsafe.
scripts/auto_start.sh . 3000 --startsh scripts/dev.sh # custom start script
If auto_start.sh fails due to missing tools, run scripts/fix_env.sh <missing>, then retry.
Never ask the user for input unless the port truly cannot be detected.
policy:
allow_implicit_invocation: true
The manifest explicitly enables implicit invocation without narrowly defined trigger constraints, allowing the skill to run based on broad natural-language phrases. In this skill, implicit execution is especially risky because invocation leads to network exposure and process/environment changes, so accidental or ambiguous triggers could expose a local project without clear user confirmation.
The script sends JSON payloads to a remote control API to create/update routes and tunnels, which is necessary for the feature but still constitutes external transmission. In this context, the transmission is security-relevant because it enables public exposure of local services and sends identifiers such as hostname, target, project, and user-derived values to an external server.
local body_file
body_file="$(mktemp)"
local status
status="$(curl -sS -o "${body_file}" -w "%{http_code}" -X POST "${url}" \
-H "Content-Type: application/json" \
--data "${payload}")"
if ((status < 200 || status >= 300)); then
The script performs remote binary download plus tunnel registration to external endpoints without clearly warning that code will be fetched and executed and that project metadata/routing will be sent off-host. In an auto-triggered skill that promises zero-config exposure, lack of disclosure materially increases user risk.
The script uses nohup/background execution with PID files to keep the app and agent running after invocation, and it additionally persists machine-level state under ~/.tunneling. In a skill that auto-triggers to expose projects publicly, this persistence can outlive user intent and leave services reachable longer than expected.
local runner="$1"
local pid_file="$2"
local log_file="$3"
nohup "${runner}" >>"${log_file}" 2>&1 &
echo $! >"${pid_file}"
}
The skill advertises exposing the current project, but the script creates a persistent machine-wide tunnel and agent under ~/.tunneling and reuses them across projects and sessions. This broadens scope beyond the user's apparent request, creates cross-project coupling, and can unintentionally expose or retain routing state for other local projects.
The script builds the project, starts commands, and kills existing processes as part of restart logic without an explicit warning or confirmation. In this skill context, automatic execution and termination increase the risk of surprising destructive behavior on the user's machine.
The script advertises fully automatic project detection and tunnel startup, but it also accepts and forwards arbitrary extra arguments such as custom start commands and scripts to the downstream launcher. In an auto-triggered skill, this expands behavior from simple automation into arbitrary command execution paths that are not disclosed in the manifest, increasing the chance of unexpected or unsafe process execution.
The script copies a helper executable into the target project directory without disclosing that side effect in the skill description. Writing executables into user projects can alter repository state, confuse users, and create persistence or trust-boundary issues if the file is later run, committed, or mistaken for project-owned code.
This skill autonomously writes a new executable file into the user's project with no warning or confirmation. In the context of a skill that auto-triggers on natural-language requests, silent workspace modification is risky because it creates unexpected files and executable content inside a trusted codebase.