Back to skill

Security audit

Scavio Douyin

Security checks across malware telemetry and agentic risk

Overview

This skill is a straightforward Douyin data API guide that uses Scavio as disclosed, with no hidden execution, persistence, or unrelated access.

Before installing, confirm you are comfortable sending Douyin URLs, user identifiers, search terms, and your Scavio API key to Scavio, and watch credit usage because searches cost more than other endpoints. Avoid using it for sensitive person-level investigations or building profiles of individuals.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (8)

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill sends user-supplied queries, Douyin URLs, video IDs, and user identifiers to the third-party service api.scavio.dev, but the description and setup do not clearly warn users that their inputs and identifiers will be transmitted off-platform. This is a real privacy/transparency issue because users may provide profile URLs, search terms, or other sensitive research targets without informed consent about third-party disclosure.

External Transmission

Medium
Category
Data Exfiltration
Content
HEADERS = {"Authorization": f"Bearer {API_KEY}"}

# 1. Resolve a share link, then read that video's comments (1 credit each)
video = requests.post(f"{BASE}/api/v1/douyin/video/by-share-url", headers=HEADERS,
    json={"share_url": "https://v.douyin.com/v1zNJi__Teg/"}).json()
aweme_id = video["data"]["aweme_id"]
comments = requests.post(f"{BASE}/api/v1/douyin/video/comments", headers=HEADERS,
Confidence
84% confidence
Finding
This example performs an outbound request to a third-party API with a user-provided Douyin share URL, transmitting the URL and authorization header to Scavio. In context this is the intended function of the skill, but it still creates a genuine data-exposure surface because user-supplied links and derived metadata leave the agent environment and there is no nearby privacy warning or consent step.

External Transmission

Medium
Category
Data Exfiltration
Content
video = requests.post(f"{BASE}/api/v1/douyin/video/by-share-url", headers=HEADERS,
    json={"share_url": "https://v.douyin.com/v1zNJi__Teg/"}).json()
aweme_id = video["data"]["aweme_id"]
comments = requests.post(f"{BASE}/api/v1/douyin/video/comments", headers=HEADERS,
    json={"aweme_id": aweme_id, "count": 50}).json()

# 2. Resolve a profile URL to a user id, then read the user's posts (1 credit each)
Confidence
81% confidence
Finding
This request sends a resolved aweme_id and pagination parameters to the external API to fetch comments. Although expected for a scraping/API integration skill, it still transmits user-targeted content retrieval requests to a third party and may expose research interests or monitored accounts without explicit user awareness.

External Transmission

Medium
Category
Data Exfiltration
Content
json={"aweme_id": aweme_id, "count": 50}).json()

# 2. Resolve a profile URL to a user id, then read the user's posts (1 credit each)
uid = requests.post(f"{BASE}/api/v1/douyin/resolve/user-id", headers=HEADERS,
    json={"url": "https://www.douyin.com/user/"}).json()["data"]["sec_user_id"]
posts = requests.post(f"{BASE}/api/v1/douyin/user/posts", headers=HEADERS,
    json={"sec_user_id": uid, "count": 20}).json()
Confidence
85% confidence
Finding
This example transmits a Douyin profile URL to Scavio to resolve a sec_user_id, which is a user identifier tied to an individual account. In a social-data context, sending profile URLs and resolving account identifiers externally can create privacy and surveillance concerns if users are not clearly informed.

External Transmission

Medium
Category
Data Exfiltration
Content
# 2. Resolve a profile URL to a user id, then read the user's posts (1 credit each)
uid = requests.post(f"{BASE}/api/v1/douyin/resolve/user-id", headers=HEADERS,
    json={"url": "https://www.douyin.com/user/"}).json()["data"]["sec_user_id"]
posts = requests.post(f"{BASE}/api/v1/douyin/user/posts", headers=HEADERS,
    json={"sec_user_id": uid, "count": 20}).json()

# 3. Keyword search - 10 credits
Confidence
82% confidence
Finding
This request sends a sec_user_id to the external service to retrieve a user's posts. The behavior is core to the skill's purpose, but it remains a real external-transmission risk because it enables third-party processing of person-linked identifiers and account activity without a strong privacy disclosure in the skill text.

External Transmission

Medium
Category
Data Exfiltration
Content
json={"sec_user_id": uid, "count": 20}).json()

# 3. Keyword search - 10 credits
found = requests.post(f"{BASE}/api/v1/douyin/search/videos", headers=HEADERS,
    json={"keyword": "美食"}).json()
```
Confidence
80% confidence
Finding
This call sends a search keyword to the third-party API. Search terms can reveal sensitive interests, investigations, or business research, so the absence of a clear warning about third-party processing makes this a meaningful privacy issue even though the transmission is expected functionality.

External Transmission

Medium
Category
Data Exfiltration
Content
curl:

```bash
curl -s https://api.scavio.dev/api/v1/douyin/trending \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
curl:

```bash
curl -s https://api.scavio.dev/api/v1/douyin/trending \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

VirusTotal

64/64 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
SKILL.md:38