T05 · Unauthorized Access and Privilege Escalation
- Location
scripts/fetch_zhihu_content.py:395- Finding
Unrestricted URL Navigation Enables SSRF-Like Internal Network Access
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill mostly matches its Zhihu download purpose, but it can open arbitrary web addresses with weakened browser protections, so it should be reviewed before use.
Install only if you are comfortable running a browser automation scraper locally. Use it only on trusted Zhihu URLs, preferably in a disposable or isolated environment with no sensitive local services exposed. Before broader use, the maintainer should enforce a strict Zhihu URL allowlist, validate redirects, remove default --no-sandbox, and clearly disclose or remove anti-detection behavior.
scripts/fetch_zhihu_content.py:395Unrestricted URL Navigation Enables SSRF-Like Internal Network Access
scripts/fetch_zhihu_content.py:415Chromium Browser Sandbox Is Explicitly Disabled
The documented behavior does not fully match the skill’s actual capabilities, including support for broader URL types and undisclosed anti-detection or anti-automation evasion. Hidden or misleading behavior is dangerous because it defeats informed consent, can violate platform expectations, and may mask functionality that increases legal, operational, or detection risk when the agent runs the skill.
The script injects anti-detection logic to spoof webdriver, plugins, languages, and window.chrome in order to evade bot detection. For a content-export skill, this is unnecessary and materially increases abuse potential by helping automated browsing bypass platform defenses, making the tool more dangerous than its stated purpose suggests.
The skill invokes a Python script that writes files and may access environment-dependent browser/runtime state, but it declares no explicit tool scope or permissions. This weakens policy enforcement and reviewability: an agent or orchestrator cannot reliably constrain file output locations or understand that local resources may be touched before execution.
The browser context is hard-coded to use locale="zh-CN" and timezone_id="Asia/Shanghai", and the anti-detection script also forces navigator.languages to ['zh-CN', 'zh']. This is a natural-language/locale policy concern because the skill imposes a specific language/locale environment without user opt-in or configuration.
The skill claims to download Zhihu content, but parse_args() accepts any argument containing 'zhihu.com' and fetch_zhihu() never enforces that the URL is actually a Zhihu article/answer/question page. This broad URL acceptance can be abused to make the agent visit unintended endpoints under attacker influence, expanding the tool into a general authenticated browser fetcher for the zhihu.com domain and potentially enabling misuse against internal Zhihu flows or sensitive pages.
Dynamic getattr() with a non-literal attribute name can access arbitrary object attributes, potentially bypassing access controls.
if cfg["channel"]:
launch_kwargs["channel"] = cfg["channel"]
engine = getattr(p, engine_name)
echo(f" 启动浏览器: {engine_name}" + (f" ({cfg['channel']})" if cfg['channel'] else ""))
return await engine.launch(**launch_kwargs)
No suspicious patterns detected.