T01 · Skill Instruction Hijacking
- Location
SKILL.md:99- Finding
Mandatory Promotional Content Injection into User-Published Output
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is coherent with its stated Instagram carousel purpose, but it can publish public posts, push and delete GitHub-hosted assets, send images to third-party services, and handles tokens in risky ways without clear approval gates.
Install only if you are comfortable giving the agent control over an Instagram account, a GitHub repo used for public image hosting, and Topaz image processing. Before use, add a required preview and approval step, remove or make tabiji.ai branding optional, avoid access_token in URLs, use a per-run temp directory, and delete only files created by the current run.
SKILL.md:99Mandatory Promotional Content Injection into User-Published Output
SKILL.md:147Instagram Access Token Exposed in URL Query Strings
SKILL.md:157Overbroad Cleanup Commands Can Delete Unrelated Carousel Assets
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).
cd /path/to/tabiji/repo
git rm img/instagram/slide-*.jpg
git commit -m "cleanup: remove instagram carousel images after publish"
git push
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).
Also clean up local temp files:
```bash
rm -rf /tmp/ig-carousel/
Output: Instagram post URL
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).
Also clean up local temp files:
```bash
rm -rf /tmp/ig-carousel/
Output: Instagram post URL
The skill sends locally stored images to Topaz Labs and later submits content to Facebook/Instagram using credential-backed API calls, but it does not disclose those third-party transfers to the user. This is dangerous because operators may unknowingly transmit copyrighted, sensitive, or regulated content to external vendors and perform actions under privileged accounts.
The synchronous Topaz enhancement request uploads a local image file to a third-party API using an API key from the macOS Keychain. That behavior is central to the feature, but it is still a real security/privacy concern because it transmits data off-device under stored credentials without any embedded consent or policy guardrails.
TOPAZ_API_KEY=$(security find-generic-password -s "topaz-api-key" -w)
curl --request POST \
--url https://api.topazlabs.com/image/v1/enhance \
--header "X-API-Key: ${TOPAZ_API_KEY}" \
--header 'accept: image/jpeg' \
--header 'content-type: multipart/form-data' \
The async submission endpoint also uploads local images to Topaz, creating the same third-party exposure as the sync path. The presence of both paths increases the chance data will be transmitted externally even if one code path fails, which strengthens the need for explicit controls and disclosure.
# Async: submit
RESPONSE=$(curl -s --request POST \
--url https://api.topazlabs.com/image/v1/enhance/async \
--header "X-API-Key: ${TOPAZ_API_KEY}" \
--header 'content-type: multipart/form-data' \
--form 'model=Low Resolution V2' \
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# Poll status until Completed
while true; do
STATUS=$(curl -s --header "X-API-Key: ${TOPAZ_API_KEY}" \
"https://api.topazlabs.com/image/v1/status/${PROCESS_ID}" | jq -r '.status')
[ "$STATUS" = "Completed" ] && break
sleep 3
done
This step downloads processed image data from Topaz, confirming that user-selected images are transmitted through an external service. While the API call itself is expected for the workflow, it is still a genuine external data-transfer surface with privacy, compliance, and content-rights implications if users are not informed.
done
curl -s --header "X-API-Key: ${TOPAZ_API_KEY}"
"https://api.topazlabs.com/image/v1/download/${PROCESS_ID}"
--output "/tmp/ig-carousel/${slug}-enhanced.jpg"
This download call retrieves processed content from Topaz and is part of the same third-party processing flow. Although it does not newly expose data, it confirms reliance on an external service for handling user content, which remains a real concern when not clearly disclosed or approved.
curl -s --header "X-API-Key: ${TOPAZ_API_KEY}"
"https://api.topazlabs.com/image/v1/download/${PROCESS_ID}"
--output "/tmp/ig-carousel/${slug}-enhanced.jpg"
The skill automates publication to Instagram and temporarily hosts generated images on a public GitHub URL, but it does not require an explicit user confirmation or warning before making content public. This creates a real risk of unintended disclosure, accidental publishing, or exposing copyrighted/private images to a public endpoint.
No suspicious patterns detected.