Dangerous exec
- Finding
- Shell command execution detected (child_process).
Security checks across static analysis, malware telemetry, and agentic risk
This scraper largely matches its stated purpose, but it controls a logged-in browser, advertises anti-detection scraping, and includes under-disclosed credential/cloud-sync behavior.
Install only if you are comfortable letting the skill operate a logged-in Xiaohongshu browser. Do not use it to bypass platform rules, protect or delete any cookies.json file, review npm dependencies before running npm install, and do not run the Zion sync script unless you intend to use a verified least-privilege Zion credential.
VirusTotal findings are pending for this skill version.
Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.
Using this may violate Xiaohongshu rules, trigger account restrictions, or let automation act through your real browser session.
The skill explicitly promotes using an authenticated real browser to avoid captcha/risk-control handling while performing automated collection.
**核心优势**:直接使用已登录的浏览器,无需 Cookie 管理、无需处理验证码、天然绕过风控检测。
Use only where you have permission, keep collection limits low, and avoid using the skill specifically to bypass platform anti-automation controls.
If run, the skill can use high-privilege Zion credentials to insert or update cloud data and transmit scraped content to the configured Zion endpoint.
The included sync script reads a local Zion admin token and uses it as a Bearer credential for GraphQL writes, while the registry metadata declares no primary credential or required config path.
const zionCredPath = path.resolve(process.cwd(), '.zion', 'credentials.yaml'); ... const token = cred.admin_token?.token; ... Authorization: `Bearer ${cfg.token}`Do not run sync.ts unless you intend to use Zion; use a least-privilege token, verify the endpoint/table name, and require explicit confirmation before cloud writes.
Anyone who obtains cookies.json may be able to reuse or inspect your Xiaohongshu session.
The optional login helper stores Xiaohongshu browser cookies locally, which is sensitive session material even though no exfiltration is shown.
const COOKIE_FILE = path.resolve(process.cwd(), 'cookies.json'); ... const cookies = await context.cookies(); fs.writeFileSync(COOKIE_FILE, JSON.stringify(cookies, null, 2));
Avoid running the legacy login helper unless needed; protect cookies.json, do not commit or share it, and delete it when finished.
Opening the generated report could run injected scripts or load unexpected resources if scraped content contains malicious markup.
Scraped titles/content are inserted into generated HTML via innerHTML without visible escaping, so untrusted page content could become executable HTML/JavaScript in the local report.
container.innerHTML = data.map((item, idx) => `... <div class="card-title">${item.title || '无标题'}</div> ... <div class="card-text">${item.content || ''}</div> ...`)Escape all scraped fields before HTML insertion or render them with textContent/DOM APIs; treat generated reports as untrusted until fixed.
Running the skill executes local shell commands and depends on the integrity of the local WebBridge binary/service.
The script uses shell execution to send commands to a fixed localhost WebBridge endpoint; this is purpose-aligned, and the shown command does not interpolate the search keyword directly into the shell.
const res = execSync(`curl -s -X POST ${WEBBRIDGE_URL} -H 'Content-Type: application/json' -d @${tmpFile}`, { encoding: 'utf-8', timeout: 60000 });Run it only from a trusted checkout and with a trusted WebBridge installation.
A malicious or misconfigured local MCP/WebBridge service could observe browser data or cause unintended browser actions.
The MCP mode talks to a local browser-control service and invokes an unsafe browser code tool; the trust boundary depends on the external local MCP service configuration.
const MCP_ENDPOINT = process.env.MCP_ENDPOINT || 'http://localhost:8931'; ... return this.call('tools/call', { name, arguments: args }); ... browser_run_code_unsafeConnect only to trusted local browser-control services, use authentication tokens where available, and stop the service after use.