Back to skill

Security audit

RedNote Publish Auto

Security checks across malware telemetry and agentic risk

Overview

This skill is a real Xiaohongshu publishing tool, but it handles a full account cookie and can post publicly with under-scoped safeguards.

Install only if you are comfortable giving the skill a reusable Xiaohongshu session cookie and allowing it to publish after your confirmation. Use a dedicated account, review every preview carefully, avoid API mode unless the endpoint is local and fully trusted, do not send the cookie to remote services, keep the cookie out of shared repositories, and revoke or rotate the session after use.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (21)

Lp3

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding
The skill describes capabilities to read a local cookie file, access environment data, and publish over the network, but does not declare corresponding permissions. That creates a transparency and policy-enforcement gap: an agent/runtime may grant or execute sensitive actions without the user or platform being able to review them explicitly.

Context-Inappropriate Capability

Medium
Confidence
96% confidence
Finding
The skill instructs the agent to read an authentication cookie from a local file in the user's workspace. Authentication cookies are highly sensitive bearer credentials; granting the skill file access to them increases the blast radius beyond content creation and enables account actions if mishandled, leaked, or abused.

Intent-Code Divergence

Medium
Confidence
79% confidence
Finding
The skill says publishing requires explicit confirmation, but it also auto-triggers on broad phrases and starts the workflow immediately. In practice this can create ambiguous consent boundaries and raise the risk of the agent progressing toward a sensitive publish action from casual conversation or mistaken activation.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The script explicitly instructs users to extract and provide their full browser cookie from developer tools, which is a highly sensitive session credential. Full session cookies can enable account takeover or unauthorized publishing if leaked, reused, logged, or sent to another service, and this goes beyond normal content input for a publisher tool.

Vague Triggers

Medium
Confidence
88% confidence
Finding
Broad trigger phrases like '发小红书' or '写一篇小红书' are likely to overlap with normal conversation, making accidental activation more likely. In a skill that can eventually read credentials and publish content, mis-triggering materially increases the chance of unintended sensitive actions.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
The script performs the irreversible publish action immediately after initialization without an interactive confirmation, final summary approval, or strong warning. In an automation skill that can publish externally on a real account, accidental invocation, parameter mistakes, or prompt/agent misuse can result in unauthorized or unwanted public posts.

Missing User Warnings

High
Confidence
97% confidence
Finding
In API mode, the script sends the user's authentication cookie to an HTTP API service during session initialization, with no strong user-facing warning and no enforcement of HTTPS or trusted localhost-only use. This exposes a reusable session credential to interception, misconfiguration, or compromise of the API service, potentially leading to full account abuse.

External Transmission

Medium
Category
Data Exfiltration
Content
# 初始化 session
        try:
            resp = requests.post(
                f"{self.api_url}/init",
                json={
                    "session_id": self.session_id,
Confidence
93% confidence
Finding
This outbound request transmits sensitive authentication material and session setup data to an API endpoint. Because the default URL is plain HTTP and the code does not constrain destination trust, the external transmission meaningfully increases risk of credential leakage and downstream account compromise.

External Transmission

Medium
Category
Data Exfiltration
Content
if post_time:
                payload["post_time"] = post_time
            
            resp = requests.post(
                f"{self.api_url}/publish/image",
                json=payload,
                timeout=120
Confidence
84% confidence
Finding
This request transmits note content and local file paths to an external API service for publication. Even if the cookie was already sent earlier, this still exposes user-generated content and filesystem metadata to another service without strong transport or trust guarantees, increasing privacy and integrity risk.

Credential Access

High
Category
Privilege Escalation
Content
python publish_xhs.py --title "标题" --desc "描述" --images cover.png card_1.png --api-mode

环境变量:
    在同目录或项目根目录下创建 .env 文件,配置:
    
    # 必需:小红书 Cookie
    XHS_COOKIE=your_cookie_string_here
Confidence
72% confidence
Finding
The documentation directs users to place a sensitive authentication cookie in a .env file. Storing reusable session credentials in local config files is risky because such files are often accidentally committed, copied, backed up, or exposed through tooling, especially in agent skill repositories.

Credential Access

High
Category
Privilege Escalation
Content
cookie = os.getenv('XHS_COOKIE')
    if not cookie:
        print("❌ 错误: 未找到 XHS_COOKIE 环境变量")
        print("请创建 .env 文件,添加以下内容:")
        print("XHS_COOKIE=your_cookie_string_here")
        print("\nCookie 获取方式:")
        print("1. 在浏览器中登录小红书(https://www.xiaohongshu.com)")
Confidence
91% confidence
Finding
The script directly instructs the user to create a .env containing a full XHS browser cookie and explains how to extract it from developer tools. This meaningfully facilitates acquisition and storage of a reusable account session credential, which is highly sensitive and dangerous if leaked or reused.

Unpinned Dependencies

Low
Category
Supply Chain
Content
# 小红书笔记创作技能依赖

# Markdown 处理
markdown>=3.4.0
PyYAML>=6.0

# 浏览器自动化(渲染图片)
Confidence
94% confidence
Finding
Using a lower-bound specifier like 'markdown>=3.4.0' allows installation of any later version, including versions with breaking changes or newly introduced vulnerabilities. In a publishing skill that renders user-controlled content, uncontrolled dependency resolution increases supply-chain and stability risk.

Unpinned Dependencies

Low
Category
Supply Chain
Content
# Markdown 处理
markdown>=3.4.0
PyYAML>=6.0

# 浏览器自动化(渲染图片)
playwright>=1.40.0
Confidence
97% confidence
Finding
An unpinned PyYAML dependency is especially risky because YAML parsers have a long history of unsafe deserialization issues and parser-related vulnerabilities. Allowing any version >=6.0 means builds are not reproducible and may silently pull a vulnerable release in environments that process user-supplied content or config.

Unpinned Dependencies

Low
Category
Supply Chain
Content
PyYAML>=6.0

# 浏览器自动化(渲染图片)
playwright>=1.40.0

# 小红书发布
xhs>=0.4.0
Confidence
92% confidence
Finding
Unpinned Playwright introduces supply-chain risk and can also create operational inconsistency because browser automation packages are sensitive to version mismatches. In this skill, browser automation is used for rendering, so unexpected dependency changes can expand attack surface or break sandbox assumptions.

Unpinned Dependencies

Low
Category
Supply Chain
Content
playwright>=1.40.0

# 小红书发布
xhs>=0.4.0

# 环境变量管理
python-dotenv>=1.0.0
Confidence
95% confidence
Finding
The 'xhs' package appears central to account posting automation, so leaving it unpinned increases supply-chain risk around authentication, publishing actions, and API behavior. A malicious or compromised future release could affect credentials or publish unauthorized content.

Unpinned Dependencies

Low
Category
Supply Chain
Content
xhs>=0.4.0

# 环境变量管理
python-dotenv>=1.0.0

# HTTP 请求(API 模式)
requests>=2.28.0
Confidence
90% confidence
Finding
Unpinned python-dotenv can introduce vulnerable behavior into configuration loading and secret handling workflows. Because this skill likely uses environment variables for platform credentials, uncontrolled upgrades may affect how secrets are read, written, or exposed.

Unpinned Dependencies

Low
Category
Supply Chain
Content
python-dotenv>=1.0.0

# HTTP 请求(API 模式)
requests>=2.28.0
Confidence
94% confidence
Finding
Requests is a security-sensitive HTTP client, and an unpinned version can inherit new or existing flaws affecting redirects, TLS handling, proxies, credential leakage, or request parsing. This matters more here because the skill may communicate with external APIs and handle authenticated publishing workflows.

Known Vulnerable Dependency: markdown — 2 advisory(ies): CVE-2025-69534 (Python-Markdown has an Uncaught Exception); CVE-2025-69534 (Python-Markdown version 3.8 contain a vulnerability where malformed HTML-like se)

High
Category
Supply Chain
Confidence
80% confidence
Finding
The finding indicates known advisories affecting Python-Markdown, and the requirements entry does not constrain away vulnerable releases. Given this skill generates and renders Markdown from user-provided themes or materials, a vulnerable parser could lead to denial of service or unsafe content handling depending on how it is used downstream.

Known Vulnerable Dependency: PyYAML — 8 advisory(ies): CVE-2019-20477 (Deserialization of Untrusted Data in PyYAML); CVE-2020-1747 (Improper Input Validation in PyYAML); CVE-2020-14343 (Improper Input Validation in PyYAML) +5 more

Critical
Category
Supply Chain
Confidence
98% confidence
Finding
PyYAML has multiple well-known unsafe deserialization and input-validation issues, and the dependency declaration does not exclude vulnerable versions. In a workflow skill that may consume templates, metadata, or configuration derived from user input, YAML parsing vulnerabilities can lead to code execution, file access, or service compromise if unsafe loaders are used anywhere in the codebase.

Known Vulnerable Dependency: python-dotenv — 1 advisory(ies): CVE-2026-28684 (python-dotenv: Symlink following in set_key allows arbitrary file overwrite via )

Low
Category
Supply Chain
Confidence
74% confidence
Finding
The cited advisory for python-dotenv concerns symlink-following during set_key-style file writes. This is only exploitable if the skill uses vulnerable write APIs on attacker-influenced .env paths, but because the dependency is unconstrained, the risk is real enough to treat as a vulnerability until version and usage are verified.

Known Vulnerable Dependency: requests — 10 advisory(ies): CVE-2014-1830 (Exposure of Sensitive Information to an Unauthorized Actor in Requests); CVE-2024-47081 (Requests vulnerable to .netrc credentials leak via malicious URLs); CVE-2024-35195 (Requests `Session` object does not verify requests after making first request wi) +7 more

High
Category
Supply Chain
Confidence
93% confidence
Finding
Requests has a history of vulnerabilities affecting credential handling and request safety, and the dependency line does not ensure a patched release. This skill's API/publishing behavior likely involves authenticated outbound requests, making issues like credential leakage or improper verification materially more dangerous.

VirusTotal

64/64 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.