Back to skill

Security audit

Trump Truth Social Tracker

Security checks for vulnerabilities and agentic risk

Overview

This skill fetches public Truth Social archive data and stores it locally as described, with no evidence of deception, credential access, background persistence, or destructive behavior.

Install only if you want a Chinese-language tracker that fetches CNN's Truth Social archive and writes a local database. Use --write-report only when you want durable markdown alert files, treat report excerpts as untrusted public content, and avoid custom --json-url sources unless you trust the source.

Vulnerability Patterns
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

T02 · Agent Memory Poisoning

Warning
Location
scripts/sync_truth_social.py:141
Finding

Untrusted Remote Content Persisted in the Agent Workspace

Content
View full analysis
list: """获取 JSON 数据""" print(f"正在获取: {url}") try: with urlopen(url, timeout=60) as response: data = json.loads(response.read().decode("utf-8")) print(f"获取到 {len(data)} 条记录") return data except (URLError, HTTPError) as e: print(f"错误: 无法获取数据 - {e}") sys.exit(1) ``` The remote post content is interpolated directly into an alert message. It is truncated to 300 characters but is not sanitized, isolated, or marked as untrusted data: ```python def format_alert_message(post: dict, alerts: list) -> str: """格式化预警消息""" created_at = post.get("created_at", "") content = post.get("content", "") url = post.get("url", "") # 解析时间 try: dt = datetime.fromisoformat(created_at.replace("Z", "+00:00")) time_str = dt.strftime("%Y-%m-%d %H:%M UTC") except: time_str = created_at # 关键词摘要 keywords = [a["category"] for a in alerts] keyword_str = ", ".join(set(keywords)) # 内容截取 content_preview = content[:300] if len(content) > 300 else content msg = f"""🚨 **金融市场预警 - Trump Truth Social** **时间**: {time_str} **触发关键词**: {keyword_str} **帖子内容**: {content_preview} **原文链接**: {url} """ return msg ``` The generated message is then appended to a persistent Markdown file inside the OpenClaw workspace: ```python def write_alert_to_report(alerts: list) -> None: """将预警信息追加到报告文件""" report_dir = Path.home() / ".openclaw" / "workspace" / "repo ...[truncated 4816 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (11)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The declared purpose focuses on tracking and analyzing Truth Social posts, but the documented behavior extends to financial-market-impact alerting and writing persistent report files that are not clearly reflected in the top-level description. Such description/behavior mismatch undermines user consent and review, because a skill that appears to be a simple data sync tool also performs additional analysis and persistence actions.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill documents network access to CNN and local file/database writes, but it does not declare an explicit tool scope such as permissions or allowed-tools. This creates a governance gap: an agent may invoke network and filesystem capabilities without clear least-privilege boundaries or user-visible authorization, increasing the risk of unintended data retrieval or local modification.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The trigger condition includes broad keyword matching such as mentions of 'Truth Social' or '特朗普推文', which can cause the skill to activate in contexts where the user did not request network retrieval or local persistence. Over-broad activation increases the chance of unnecessary external requests and filesystem changes, especially for users asking general questions rather than requesting synchronization.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
88% confidence
Finding

The skill stores fetched content persistently in a local SQLite database under the workspace temp directory, creating session persistence beyond the immediate interaction. Persistent storage can be risky because retained content, metadata, and derived reports may later be accessed, correlated, or reused without the user's awareness, especially when the agent auto-syncs or appends over time.

Content

Scanner excerpt · SKILL.md (reported line 26)May include surrounding context.

表结构

sql
CREATE TABLE truth_posts (
    id TEXT PRIMARY KEY,
    created_at TEXT,
    content TEXT NOT NULL,

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

Natural-language strings in the module docstring, CLI help text, and runtime messages are presented only in Chinese. The policy requires avoiding forced language or locale constraints unless the skill offers a language choice or clearly documents and justifies the locale restriction.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The top-level documentation says '将预警信息写入 memory 文件' and shows a --write-memory usage example. In the actual implementation, the parser defines --write-report and the code writes to ~/.openclaw/workspace/reports/trump_truth_social_alerts.md, so the documentation actively misstates the side effect and interface.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest describes a tracker that fetches CNN archive data into SQLite and supports query/statistical analysis of Trump Truth Social posts. This file additionally defines a dedicated financial-market impact detection feature and later writes alert reports, which is a materially different operational purpose than generic post tracking and analytics.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The manifest emphasizes synchronizing archived post data into a local SQLite database and supporting queries/statistics/analysis. This function appends derived alert content into a Markdown report under ~/.openclaw/workspace/reports, introducing an additional persistence/output channel not reflected in the manifest description.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

The skill description says it fetches data from the CNN archive API, but it does not explicitly disclose that using the skill makes outbound network requests. For markdown skill descriptions, network behavior that may affect privacy or system integrity should be clearly warned about.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The markdown states that the skill syncs data into a local SQLite database and can append alerts to a report file, but it does not explicitly warn users that running the sync modifies files under the workspace. For markdown files, file-affecting behavior should be disclosed clearly so users understand the persistence and side effects.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

The script persists fetched post content into a human-readable report file without an explicit warning that content will be stored separately on disk. While the content appears to be public social posts, creating an additional durable artifact can increase data retention, discoverability, and unintended downstream exposure in shared workspaces or backups.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.