T03 · Remote Payload Retrieval and Execution
- Location
SKILL.md:31- Finding
Mutable Remote Setup Instructions Create a Post-Review Execution Channel
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is not clearly malicious, but it asks agents to install and operate broad third-party integrations through mutable remote setup instructions, unpinned packages, and risky token-handling scripts.
Review this skill before installing. It is intended to control connected work apps, so only use it with accounts you are comfortable delegating to an agent, avoid running the included REST test scripts with real tokens unless you trust the endpoint, and prefer pinned, reviewed install and MCP commands over floating npx or mutable remote setup instructions.
SKILL.md:31Mutable Remote Setup Instructions Create a Post-Review Execution Channel
references/mcp.md:43Unpinned Packages Are Downloaded and Executed Through npx
examples/curl/capability-search.sh:1Bearer Token Can Be Forwarded to an Arbitrary or Plaintext Endpoint
scripts/test-rest-api.sh:55OAuth Access Token Is Persisted Without Enforcing Restrictive File Permissions
scripts/test-rest-api.sh:55Externally Controlled Values Are Interpolated Directly into Python Source Code
Referenced artifact was not completely inspected
Do not create, edit, scaffold, validate, or inspect a local `SKILL.md` file unless the user explicitly asks to author a local skill.
Referenced artifact was not completely inspected
Do not create, edit, scaffold, validate, or inspect a local `SKILL.md` file unless the user explicitly asks to author a local skill.
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
BASE_URL="${AIDENT_BASE_URL:-https://app.aident.ai}"
QUERY="${1:-send email}"
curl -s -X POST "$BASE_URL/api/openapi/loadout/loadout_capabilities_search" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AIDENT_TOKEN" \
-d "{ \"query\": \"$QUERY\", \"limit\": 5 }" | python3 -m json.tool
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
CAPABILITY_NAME="${1:?Usage: ./skill-execute.sh <capability_name> <input_json>}"
INPUT_JSON="${2:?Usage: ./skill-execute.sh <capability_name> <input_json>}"
curl -s -X POST "$BASE_URL/api/openapi/loadout/loadout_capabilities_execute" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AIDENT_TOKEN" \
-d "{
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
BASE_URL="${AIDENT_BASE_URL:-https://app.aident.ai}"
curl -s -X POST "$BASE_URL/api/openapi/loadout/loadout_vault_status" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AIDENT_TOKEN" \
-d '{}' | python3 -m json.tool
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
## Getting A Token
Tokens are persisted to `~/.aident/credentials.json` after `aident login`. For direct HTTPS scripts, export the access token as `AIDENT_TOKEN`.
OAuth endpoints remain under the MCP OAuth namespace because MCP and OpenAPI use the same Aident OAuth server:
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
## Getting A Token
Tokens are persisted to `~/.aident/credentials.json` after `aident login`. For direct HTTPS scripts, export the access token as `AIDENT_TOKEN`.
OAuth endpoints remain under the MCP OAuth namespace because MCP and OpenAPI use the same Aident OAuth server:
Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
Add to ~/.gemini/settings.json:
{
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).
Your access token has expired (1 hour TTL). If you have a credential file, delete it and re-authenticate:
rm ~/.aident/credentials.json
The agent will automatically initiate a new OOB flow on the next request.
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).
Your access token has expired (1 hour TTL). If you have a credential file, delete it and re-authenticate:
rm ~/.aident/credentials.json
The agent will automatically initiate a new OOB flow on the next request.
The instruction to verify that the file contains base_url, client_id, and access_token encourages manual inspection of a sensitive credential store. Even though intended for troubleshooting, telling users to inspect token-bearing files can lead to accidental disclosure through screenshots, copy/paste into support tickets, or exposure in insecure environments.
ls -la ~/.aident/credentials.json
The file should be readable by your user. If not: `chmod 600 ~/.aident/credentials.json`.
**Verify contents:**
The file should contain `base_url`, `client_id`, and `access_token`. If any field is empty or the JSON is malformed, delete the file and re-authenticate.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Test OpenAPI package API and OOB OAuth flow
# Usage: ./aident-skill/scripts/test-rest-api.sh [BASE_URL]
#
# Credentials are saved to ~/.aident/credentials.json so you only need
# to authenticate once. Delete that file to force re-authentication.
set -euo pipefail
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Test OpenAPI package API and OOB OAuth flow
# Usage: ./aident-skill/scripts/test-rest-api.sh [BASE_URL]
#
# Credentials are saved to ~/.aident/credentials.json so you only need
# to authenticate once. Delete that file to force re-authentication.
set -euo pipefail
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Test OpenAPI package API and OOB OAuth flow
# Usage: ./aident-skill/scripts/test-rest-api.sh [BASE_URL]
#
# Credentials are saved to ~/.aident/credentials.json so you only need
# to authenticate once. Delete that file to force re-authentication.
set -euo pipefail
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Test OpenAPI package API and OOB OAuth flow
# Usage: ./aident-skill/scripts/test-rest-api.sh [BASE_URL]
#
# Credentials are saved to ~/.aident/credentials.json so you only need
# to authenticate once. Delete that file to force re-authentication.
set -euo pipefail
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Test OpenAPI package API and OOB OAuth flow
# Usage: ./aident-skill/scripts/test-rest-api.sh [BASE_URL]
#
# Credentials are saved to ~/.aident/credentials.json so you only need
# to authenticate once. Delete that file to force re-authentication.
set -euo pipefail
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Test OpenAPI package API and OOB OAuth flow
# Usage: ./aident-skill/scripts/test-rest-api.sh [BASE_URL]
#
# Credentials are saved to ~/.aident/credentials.json so you only need
# to authenticate once. Delete that file to force re-authentication.
set -euo pipefail
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Test OpenAPI package API and OOB OAuth flow
# Usage: ./aident-skill/scripts/test-rest-api.sh [BASE_URL]
#
# Credentials are saved to ~/.aident/credentials.json so you only need
# to authenticate once. Delete that file to force re-authentication.
set -euo pipefail
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
echo " 1. Log in if prompted"
echo " 2. Click 'Approve'"
echo " 3. Copy the access token from the OOB page"
echo ""
read -rp " Paste your access token here: " ACCESS_TOKEN
The script reads the access token interactively using read without suppressing terminal echo, so the bearer token may be visible on screen and captured in screen recordings, shoulder surfing, terminal logging, or shared-session tooling. In combination with later disk persistence, this increases the chance of credential compromise.
echo " 2. Click 'Approve'"
echo " 3. Copy the access token from the OOB page"
echo ""
read -rp " Paste your access token here: " ACCESS_TOKEN
if [ -z "$ACCESS_TOKEN" ]; then
red "No token provided. Aborting."
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
The README instructs agents to authenticate with external services and gives an example of sending email through connected accounts, but it does not clearly warn that these actions can cause real-world side effects or expose user data to third-party integrations. In an agent-skill context, this omission is risky because users or downstream agents may treat the examples as routine operations without explicit confirmation, increasing the chance of unintended external actions.
The skill instructs the agent to fetch remote content, run shell commands via npx, and potentially modify local state during setup/update flows, but it does not declare any explicit tool scope such as allowed tools or permissions. This increases the risk of overbroad execution in hosts that rely on manifest-scoped restrictions, making accidental or unsafe command/network use harder to constrain.
The skill tells the agent to install or update using npx skills add aident-ai/aident-skill without pinning a package version or commit. This creates a supply-chain risk because future upstream changes could alter behavior or introduce malicious code, and the agent is explicitly instructed to execute that remote package during setup.
The install command npx skills add aident-ai/aident-skill is presented as the package installation method without any version pinning. In a skill that already directs agents to fetch remote setup instructions, unpinned execution materially increases the attack surface for dependency or publisher compromise.
Detected: suspicious.exposed_secret_literal