Back to skill

Security audit

trump_news

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent Trump-news summarizer, but it needs review because it asks users to use sensitive Truth Social credentials or browser tokens with an unpinned optional dependency.

Install only if you are comfortable with a Chinese-language Trump-news workflow that makes outbound requests and may send results to Telegram. Avoid using a browser session token if possible, pin and review truthbrush before enabling Truth Social, keep credentials in a restricted environment, and enable cron or Telegram only after verifying the destination and schedule.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (2)

T08 · Insecure Dependencies

Warning
Location
requirements-optional.txt:1
Finding

Unpinned Authentication Dependency Can Expose Truth Social Credentials

Content
View full analysis
=0.2.0 ``` The dependency receives the credentials in `scripts/fetch_truth_social.py:34-45`: ```python username = os.environ.get("TRUTHSOCIAL_USERNAME") password = os.environ.get("TRUTHSOCIAL_PASSWORD") token = os.environ.get("TRUTHSOCIAL_TOKEN") if not token and not (username and password): return [], "未配置 Truth Social:请设置 TRUTHSOCIAL_USERNAME / TRUTHSOCIAL_PASSWORD 或 TRUTHSOCIAL_TOKEN" handle = handle or os.environ.get("TRUTHSOCIAL_HANDLE") or DEFAULT_HANDLE created_after = datetime.now(timezone.utc) - timedelta(days=days_back) try: api = tb.Api(username=username, password=password, token=token) except Exception as e: return [], f"Truth Social 登录失败: {e}" ``` ### Technical Analysis The version constraint `truthbrush>=0.2.0` permits installation of any current or future release satisfying the lower bound. No exact version, package hash, lock file, or integrity verification constrains the code that will be installed. At runtime, the package is imported into the main Python process and directly receives either a username and password or an authenticated browser token. Imported Python packages execute with the same operating-system permissions as the Skill and can inspect the full process environment, access local files available to that user, and initiate arbitrary network requests. The dependency is relevant to the optional Truth Social feature, so using a client library is not inherently excessive. The risk arises from allowing unaudited future versions to operate with sensitive credentials. ### Attack Path 1. An att ...[truncated 1084 chars]
Remediation
View remediation
``` 2. Generate and verify package hashes, and install with `pip --require-hashes`. 3. Use a lock file or controlled internal package mirror to ensure reproducible installations. 4. Review transitive dependencies and repeat that review before upgrading. 5. Prefer a narrowly scoped, revocable token instead of a reusable account password. 6. Run the optional Truth Social integration in an isolated process or container with: - A minimal environment containing only the required token. - Restricted filesystem permissions. - Network egress limited to the required Truth Social endpoints. - No access to unrelated OpenClaw secrets. 7. Avoid recommending extraction of a full browser session token unless its scope and revocation procedure are clearly documented. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/fetch_trump_news.py:216
Finding

Untrusted Feed Content Is Forwarded to the Agent Without Prompt-Injection Isolation

Content
View full analysis
200 else ''}**") if created_at: lines.append(f" Date: {created_at}") if url: lines.append(f" Link: {url}") lines.append("") ``` ### Technical Analysis RSS titles, RSS summaries, and Truth Social posts are controlled by external publishers. The Skill places these values into the same plain-text output that tells the Agent to translate, edit, and push the content. The `strip_html` operation removes markup but does not detect or neutralize natural-language instructions. A feed item can therefore contain text such as instructions to disregard prior constraints, invoke tools, disclose data, or replace the intended news summary. There is no explicit trust boundary telling the Agent that fetched fields are inert data an ...[truncated 1463 chars]
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
Findings (22)

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding

This finding is partly a product-quality mismatch, but it also has security relevance because the skill frames itself as a curated news workflow while incorporating direct social-media content and leaving translation, editing, and push behavior to the agent at runtime. Users may trust the skill as a bounded news collector when it can actually process unvetted account posts and potentially forward them externally.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

This finding is partly a product-quality mismatch, but it also has security relevance because the skill frames itself as a curated news workflow while incorporating direct social-media content and leaving translation, editing, and push behavior to the agent at runtime. Users may trust the skill as a bounded news collector when it can actually process unvetted account posts and potentially forward them externally.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The README states that content is translated into Chinese and later repeats that output is translated and edited into Chinese, presenting a fixed language behavior. Because no opt-in or language-choice mechanism is described, this is a natural-language locale policy issue under the language-choice rule.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The README instructs users to supply Truth Social credentials or a browser-derived local storage token, but does not warn that these are sensitive secrets that can grant account access if exposed. Encouraging token extraction from a browser is especially risky because users may mishandle, persist, or share the token in insecure ways while configuring the skill.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
82% confidence
Finding

The skill declares executable behavior that uses shell commands, network access, and environment-based credentials, but it does not constrain or disclose tool scope via explicit permissions or allowed-tools. This increases the chance that an agent can invoke broader local or external capabilities than a user would reasonably expect, especially when combined with cron and optional push integrations.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

SQP-3 适用于所有文件类型。L03 明确规定内容要翻译成中文并推送,后文 L14、L65、L84 也延续这一要求,但没有说明可按用户偏好选择语言,因此构成语言/locale 强制要求的自然语言政策问题。

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

该 markdown 文件适用 SQP-1。L11 列出若干触发表达后又补充“等请求时”,但没有说明完整触发集合、边界或排除条件,导致技能何时应被调用不够明确,容易产生误触发。

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill includes sending the processed content to Telegram via a local script, but the user-facing description does not clearly require explicit consent at the moment data is sent to an external service. Even if the content is just news, undisclosed external transmission is dangerous because it normalizes silent data egress and could expose user-associated metadata, chat destinations, or future content beyond what the user intended.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The module docstring states the script uses only RSS and the Federal Register API without API keys, yet it also invokes a separate Truth Social fetcher that may depend on configured credentials. This mismatch can mislead operators, reviewers, and downstream systems about data provenance, permissions, and external dependencies, undermining transparency and trust boundaries.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The module docstring states the fetched news is for AI translation into Chinese, and later output instructions repeat that the content should be translated into Chinese. This imposes a specific language/locale choice in natural-language instructions without indicating that the user can choose another language.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill metadata promises official and mainstream wire-service sources, but the code conditionally injects Truth Social content into the output. This creates a supply-chain/integrity issue where downstream agents or users may trust the output as coming only from vetted sources when it actually includes partisan social content fetched with separate logic and credentials.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/fetch_trump_news.py (reported line 163)May include surrounding context.

python
if not FETCH_TRUTH_SOCIAL.is_file():
        return None
    try:
        r = subprocess.run(
            [sys.executable, str(FETCH_TRUTH_SOCIAL)],
            capture_output=True,
            text=True,

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The generated text instructs downstream use of the collected items specifically to translate into Chinese, edit, and push to the user. This is a natural-language locale policy issue because it mandates a language choice rather than reflecting user preference or an explicitly justified region-specific constraint.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The final assembled instruction explicitly says 'Translate the above into Chinese' before pushing to the user. This is a clear natural-language policy violation under the language/locale rule because it forces a specific output language with no opt-in or alternative.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The module docstring and later user-facing output strings are written in Chinese, which imposes a specific language on users without any opt-in or configuration mechanism. The file does not state that it is intended only for a Chinese-speaking or region-specific context, so this appears to violate the language/locale policy criterion.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The status text presented to users at runtime, including descriptions and the no-new-posts message, is hardcoded in Chinese. Because the file offers no language selection and does not justify a Chinese-only audience, this is a natural-language locale policy issue.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

Both the sample invocation and the scheduled cron message are written as Chinese-only prompts, reinforcing a fixed locale expectation. In the absence of any documented language choice or justification for a Chinese-only audience, this suggests the skill is designed around a mandatory locale.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

The README documents cron-based automatic fetching and optional Telegram push delivery, but does not clearly warn that this creates recurring outbound network requests and message sending without per-run user confirmation. In an agent environment, undisclosed automation can surprise users, generate unwanted traffic, or leak summarized content to external destinations on a schedule.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
77% confidence
Finding

Line L02 states that the actual retrieval URLs are determined in scripts/fetch_trump_news.py via a SOURCES constant, meaning this JSON file does not control runtime behavior despite being named sources.json. That creates an intent/documentation mismatch because the file presents itself as source configuration while the comment admits it is non-authoritative.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

This JSON file contains natural-language text only in Chinese, including the explanatory comment and source annotations. For a general-purpose skill artifact, forcing a single language without user opt-in or a documented region-specific justification can violate language/locale policy expectations.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The source descriptions are written exclusively in Chinese and do not indicate that users may choose another language or that the skill is restricted to a Chinese-language context. This can create a natural-language policy issue when the skill is expected to be usable across locales.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The optional dependency is specified with a lower-bound version only, which allows installation of any newer release, including unexpected breaking or maliciously compromised versions. This creates a supply-chain risk because builds are not reproducible and the package could change over time without review.

Content

Scanner excerpt · requirements-optional.txt (reported line 4)May include surrounding context.

text
# 可选:启用 Truth Social 拉取(@realDonaldTrump 等)
# pip install -r requirements-optional.txt
# 并配置 TRUTHSOCIAL_USERNAME / TRUTHSOCIAL_PASSWORD 或 TRUTHSOCIAL_TOKEN
truthbrush>=0.2.0

Static analysis

No suspicious patterns detected.