T09 · Insecure Skill Coding Practices
- Location
wechat_to_md/downloader.py:42- Finding
Article-Controlled Image URLs Enable Server-Side Request Forgery
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill does what it claims, but it gives an agent broad network and file-writing behavior with weak limits, including unvalidated article-controlled image downloads that can reach internal services.
Install only in a sandbox or low-privilege environment. Use a dedicated output directory, avoid processing untrusted article URLs with image downloads enabled, consider --no-images for unknown content, and pin or review dependencies and the Camoufox browser artifact before production use.
wechat_to_md/downloader.py:42Article-Controlled Image URLs Enable Server-Side Request Forgery
wechat_to_md/downloader.py:45Unbounded Image Downloads and Caller-Controlled Concurrency Permit Resource Exhaustion
requirements.txt:1Unpinned Dependencies and Automatic Browser Retrieval Create Supply-Chain Risk
The README explicitly promotes 'anti-detection scraping' to bypass WeChat bot detection, which indicates intentional circumvention of a target platform's access controls rather than ordinary content conversion. In an AI-integrated skill context, this is riskier because it can encourage automated collection against service restrictions and normalizes stealth behavior that may be reused for broader unauthorized scraping.
The skill advertises and requires filesystem and network behavior, but it does not declare any explicit tool scope or permissions boundary. In an agent environment, that omission can cause overbroad invocation, weak user consent, and unclear trust boundaries around reading inputs, downloading remote content, and writing files locally.
This markdown file documents that the tool writes converted articles and images to an output directory and can overwrite existing output with --force, but it does not explicitly warn users that local files and directories will be created or replaced. Under the markdown-specific warning rule, data-affecting behavior should be clearly disclosed to users.
The skill description explains functionality but does not clearly warn that it will download article bodies and images and persist them to the local filesystem. This can lead users or higher-level agents to trigger the skill without understanding that it creates local copies of third-party content, which has privacy, storage, and compliance implications.
The MCP/tooling section describes remote fetching behavior but does not provide an explicit privacy or network warning that supplied URLs and related requests are sent to external services. In agent workflows, this can expose browsing targets, metadata, and fetched content to remote endpoints without sufficiently informed consent.
The dependency 'markdownify' is unpinned, which makes builds non-reproducible and can cause the skill to install a vulnerable or breaking release in the future without review. In a content-conversion skill that processes untrusted remote article content, unexpected upstream changes increase supply-chain and stability risk.
camoufox[geoip]
markdownify
beautifulsoup4
httpx
mcp
A known advisory exists for 'markdownify', but the requirements file does not pin a version, so the deployment may resolve to an affected release. Since this skill converts remote article HTML into Markdown, malformed input could trigger vulnerable parsing behavior if an affected version is installed.
The dependency 'beautifulsoup4' is unpinned, so installs may resolve to different versions over time. This weakens reproducibility and can silently introduce vulnerable or incompatible releases into a parser that handles attacker-controlled HTML.
camoufox[geoip]
markdownify
beautifulsoup4
httpx
mcp
The dependency 'httpx' is unpinned, allowing future installs to pull arbitrary newer releases within resolver behavior. Because this skill likely fetches remote WeChat content and images over the network, an unreviewed HTTP client version can affect request handling and security posture.
camoufox[geoip]
markdownify
beautifulsoup4
httpx
mcp
The file does not pin 'httpx', and there are known advisories for some versions, so it is impossible to verify whether installations are safe. Because the skill likely performs remote HTTP fetching, an affected HTTP client version could expose input-validation or request-handling weaknesses in normal operation.
The dependency 'mcp' is unpinned, creating supply-chain uncertainty and making it impossible to know which code will actually run at install time. This is more concerning than a pure utility library because MCP-related packages can expose protocol/server functionality with meaningful security consequences if vulnerable features are present.
markdownify
beautifulsoup4
httpx
mcp
The 'mcp' package has multiple known advisories, but no version is pinned, so the installed release may include vulnerable functionality. This is more dangerous in context because MCP libraries can affect server/protocol behavior, and if the skill exposes or later enables MCP features, issues such as rebinding or task access flaws could become exploitable.
This code fetches remote WeChat article content, optionally downloads images, creates directories, and writes Markdown files to disk. While the docstring describes parameters and outputs, it does not clearly warn users that invoking the tool will make network requests and persist downloaded content locally.
The file hardcodes SHANGHAI_TZ = timezone(timedelta(hours=8)) and format_timestamp always renders timestamps in Asia/Shanghai. This is a natural-language locale policy concern because the behavior imposes a specific locale/timezone without any user opt-in or visible justification in the file.
No suspicious patterns detected.