T03 · Remote Payload Retrieval and Execution
- Location
SKILL.md:32- Finding
Unverified Remote Installer Executed Directly by the Shell
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill appears to perform its stated upload workflow, but it asks users to handle long-lived account credentials and runs unpinned external code with access to those credentials.
Install only if you are comfortable storing a Pocket Casts refresh token and YouTube cookies locally and letting the script's runtime tools access them. Prefer reviewing or pinning the external tools first, avoid running it with elevated privileges, keep the credentials directory locked down, rotate/revoke the token and cookies if logs or files are exposed, and use it only for media you have rights to download and upload.
SKILL.md:32Unverified Remote Installer Executed Directly by the Shell
scripts/upload.sh:66Unpinned Third-Party Package Is Downloaded and Executed at Runtime
scripts/upload.sh:8Predictable Shared Temporary Paths Permit Symlink and File-Clobbering Attacks
The skill clearly instructs users to run a shell script and install command-line tools, but it does not declare any corresponding permissions. Undeclared shell capability weakens transparency and review controls, making it easier for a skill to execute local commands or process files without users understanding the operational risk.
The skill is designed to access and use sensitive authentication material, including a Pocket Casts refresh token and YouTube cookies, to obtain access tokens and perform uploads. Even though this appears functional rather than malicious, handling long-lived tokens and browser cookies increases the blast radius if the script, logs, or credential storage are compromised.
## How It Works
1. Downloads video via `yt-dlp --remux-video mp4`
2. Refreshes Pocket Casts access token using stored refresh token
3. Requests presigned upload URL from Pocket Casts API
4. PUTs file to S3 via presigned URL
5. Deletes local video file
If token refresh fails, the script includes the full TOKEN_RESPONSE in the error message. API error bodies can contain sensitive authentication material, account details, or debugging data, so echoing them to stderr may leak secrets into terminal history, logs, agent transcripts, or centralized monitoring systems.
--data-raw "{\"grantType\":\"refresh_token\",\"refreshToken\":\"$REFRESH_TOKEN\"}")
ACCESS_TOKEN=$(echo "$TOKEN_RESPONSE" | jq -r '.accessToken')
[[ -n "$ACCESS_TOKEN" && "$ACCESS_TOKEN" != "null" ]] || err "Failed to get access token: $TOKEN_RESPONSE"
log "Got access token"
No suspicious patterns detected.