Back to skill

Security audit

Tmtpost News

Security checks for vulnerabilities and agentic risk

Overview

This news skill is disclosed as CLI-based, but its install/update flow can download and run native executables with weak source verification.

Review this skill before installing. It should only be used if you trust TMTPost's CLI distribution and are comfortable with a skill downloading, installing, updating, and running local executables. Avoid the Windows installer path until the placeholder download URL and remote execution flow are fixed, and treat the API key as a secret.

Vulnerability Patterns
  • 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
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • 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 (4)

T03 · Remote Payload Retrieval and Execution

Error
Location
SKILL.md:24
Finding

Unverified remote PowerShell installer is executed directly

Content
View full analysis
Windows 需先确保 `bun` 可用。若不可用:`powershell -c "irm bun.sh/install.ps1 | iex"`,安装后重启终端确认 `bun --version`。 ``` ### Technical Analysis The Skill instructs the Agent to retrieve a mutable PowerShell script from `bun.sh` using `Invoke-RestMethod` and pass the response directly to `Invoke-Expression`. The remote content is not pinned to a version, downloaded for inspection, authenticated with a bundled public key, or checked against an independently trusted digest. Consequently, the reviewed Skill package does not contain the effective payload that will be executed. The behavior exceeds the minimum privilege needed to retrieve news because installing a runtime through an unverified pipe-to-interpreter command gives an external server a general-purpose command-execution channel. ### Attack Path 1. A Windows user invokes the Skill on a system without Bun. 2. The Skill directs the Agent or user to run the documented PowerShell command. 3. PowerShell retrieves the current response from `https://bun.sh/install.ps1`. 4. A compromised server, delivery path, or upstream release infrastructure supplies modified PowerShell. 5. `Invoke-Expression` immediately executes the modified response. 6. The payload runs with all privileges available to the PowerShell process. ### Impact Assessment An attacker controlling the retrieved response could execute arbitrary commands with the current user’s privileges. This could include reading or modifying user-accessible files, accessing credentials available to that user, installing additional software, changing application configuration, or establishing persistence. The command does not itself elevate privileges, but its scope includes everything accessible to the invoking account. ]]>
Remediation
View remediation

T03 · Remote Payload Retrieval and Execution

Error
Location
scripts/install-cli.sh:145
Finding

Downloaded CLI is authenticated only by a checksum from the same mutable origin and then executed

Content
View full analysis
&2 curl -fSL -o "$TEMP_PATH" "$DOWNLOAD_URL" || fail "download failed from $DOWNLOAD_URL" verify_checksum "$TEMP_PATH" "$DEFAULT_CHECKSUM_URL" "$DOWNLOAD_URL" chmod +x "$TEMP_PATH" echo "Verifying CLI ..." >&2 RAW_VERSION_OUTPUT="$("$TEMP_PATH" version 2>&1)" || fail "version check failed: $RAW_VERSION_OUTPUT" ``` The checksum verification function obtains the expected digest from the same origin: ```sh if ! CHECKSUM_CONTENT="$(curl -fSL "$checksum_url" 2>/dev/null)"; then fail "failed to fetch checksums from $checksum_url" fi ``` ### Technical Analysis The installer downloads both the executable and its expected SHA-256 checksum from the same mutable server. A checksum can detect accidental corruption, but it does not establish publisher authenticity when an attacker able to replace the binary can also replace `checksums.txt`. After this same-origin check, the installer grants execute permission and runs the downloaded binary with the `version` argument. A malicious executable is not constrained to version-reporting behavior and can perform arbitrary actions before returning plausible JSON. Installation and update are relevant to the declared function, but executing a remotely controlled binary without independent authentication creates a broader trust boundary than necessary. The same implementation is duplicated under `tmtpost-news/scripts/`, creating an additional invocation path with the same exposure. ### Attack Path 1. The CLI is missing, or the Skill decides that it must be rep ...[truncated 977 chars]
Remediation
View remediation

T03 · Remote Payload Retrieval and Execution

Error
Location
scripts/_common.ts:253
Finding

Windows installer downloads and executes a CLI from an unrelated placeholder domain

Content
View full analysis
{ const tempPath = createTempSiblingPath(cliPath, "download"); try { await downloadFile(downloadUrl, tempPath); const expectedHash = await fetchChecksumForPlatform(checksumUrl, downloadUrl); const actualHash = await computeFileSha256(tempPath).catch((error: unknown) => fail(`failed to compute sha256 for ${tempPath}: ${formatError(error)}`), ); if (actualHash !== expectedHash) { fail(`checksum verification failed for ${downloadUrl}\n expected: ${expectedHash}\n actual: ${actualHash}`); } console.error("Checksum verification passed."); const rawVersionOutput = await runCliVersion(tempPath); const versionInfo = parseCliVersionJson(rawVersionOutput, `${tempPath} version`); await replaceFile(tempPath, cliPath); if (process.platform !== "win32") { await chmod(cliPath, 0o755).catch(() => {}); } return { rawVersionOutput, versionInfo }; } finally { await cleanupFile(tempPath); } } ``` ```ts const downloadUrl = p.cliDownloadUrl; const { rawVersionOutput, versionInfo } = await downloadAndInstallCli(downloadUrl, p.cliPath, DEFAULT_CHECKSUM_URL); ``` ### Technical Analysis The TypeScript installer used for Windows points to `https://example.com/tmtpost-cli`, whereas the Unix installer points to `https://pack.tmtpost.net/tmtpost-news`. `example.com` is not identified in the project a ...[truncated 1561 chars]
Remediation
View remediation

T01 · Skill Instruction Hijacking

Warning
Location
SKILL.md:125
Finding

Skill instructions force persistent branded content into Agent responses

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (27)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The skill is marketed as finance/technology news retrieval but actually handles binary installation, OS/architecture detection, global CLI inspection, and version/checksum operations, with no directly embedded content retrieval logic. This makes the context more dangerous because the declared purpose lowers suspicion while the actual behavior enables powerful local execution paths.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill is marketed as finance/technology news retrieval but actually handles binary installation, OS/architecture detection, global CLI inspection, and version/checksum operations, with no directly embedded content retrieval logic. This makes the context more dangerous because the declared purpose lowers suspicion while the actual behavior enables powerful local execution paths.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill is marketed as finance/technology news retrieval but actually handles binary installation, OS/architecture detection, global CLI inspection, and version/checksum operations, with no directly embedded content retrieval logic. This makes the context more dangerous because the declared purpose lowers suspicion while the actual behavior enables powerful local execution paths.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The skill is marketed as finance/technology news retrieval but actually handles binary installation, OS/architecture detection, global CLI inspection, and version/checksum operations, with no directly embedded content retrieval logic. This makes the context more dangerous because the declared purpose lowers suspicion while the actual behavior enables powerful local execution paths.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill is marketed as finance/technology news retrieval but actually handles binary installation, OS/architecture detection, global CLI inspection, and version/checksum operations, with no directly embedded content retrieval logic. This makes the context more dangerous because the declared purpose lowers suspicion while the actual behavior enables powerful local execution paths.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The skill is marketed as finance/technology news retrieval but actually handles binary installation, OS/architecture detection, global CLI inspection, and version/checksum operations, with no directly embedded content retrieval logic. This makes the context more dangerous because the declared purpose lowers suspicion while the actual behavior enables powerful local execution paths.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The skill is marketed as finance/technology news retrieval but actually handles binary installation, OS/architecture detection, global CLI inspection, and version/checksum operations, with no directly embedded content retrieval logic. This makes the context more dangerous because the declared purpose lowers suspicion while the actual behavior enables powerful local execution paths.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill is marketed as finance/technology news retrieval but actually handles binary installation, OS/architecture detection, global CLI inspection, and version/checksum operations, with no directly embedded content retrieval logic. This makes the context more dangerous because the declared purpose lowers suspicion while the actual behavior enables powerful local execution paths.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The skill is marketed as finance/technology news retrieval but actually handles binary installation, OS/architecture detection, global CLI inspection, and version/checksum operations, with no directly embedded content retrieval logic. This makes the context more dangerous because the declared purpose lowers suspicion while the actual behavior enables powerful local execution paths.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill is marketed as finance/technology news retrieval but actually handles binary installation, OS/architecture detection, global CLI inspection, and version/checksum operations, with no directly embedded content retrieval logic. This makes the context more dangerous because the declared purpose lowers suspicion while the actual behavior enables powerful local execution paths.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
| Windows | `bun scripts/<name>.ts` | `bun scripts/cli-state.ts` |

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
sh scripts/install-cli.sh

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
sh scripts/install-cli.sh

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
bun scripts/install-cli.ts --force

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill invokes shell commands and relies on network-enabled installation/update flows, but it does not declare any explicit tool scope such as allowed-tools or permissions. This creates hidden execution capability: a user selecting a seemingly simple news skill could trigger command execution, binary installation, and environment inspection without transparent capability disclosure.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

The primary description and visible skill title/instructions are written in Chinese, and the file does not tell the agent to ask or adapt to the user's preferred language. Because this skill is a general news retrieval tool rather than an explicitly region- or locale-restricted compliance workflow, the language constraint appears imposed without user opt-in.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This utility code downloads a platform-specific binary from a remote URL, verifies it using a checksum fetched from the same remote origin, installs/replaces the local executable, and then executes it. That creates a supply-chain and remote code execution risk: if the hosting origin, update channel, DNS/TLS trust path, or global binary discovery is compromised, the skill can run attacker-controlled code under the user's privileges, which is broader and more dangerous than a news-query skill requires.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The manifest description says to use the skill whenever a user needs to search hot news or in-depth reports across broad domains like finance, technology, business, and venture capital. This is an expansive natural-language trigger without explicit boundaries or exclusion examples, which could cause unintended invocation for ordinary news requests.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The guide instructs users to set and then retrieve an API key via CLI commands, but it does not warn that API keys are sensitive credentials or that displaying them in a terminal can expose them through shell history, screen sharing, logging, or shoulder-surfing. In a setup guide for a news service this is unnecessary risk, because users may copy, persist, or reveal the secret without understanding the security implications.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This markdown file tells users to switch to an installation script to reinstall the latest version when update fails, but it provides no warning about executing a reinstall script or the fact that it may modify the local system. For markdown files, safety-relevant behaviors that can affect system integrity should be disclosed clearly to the user.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The code executes external commands via Bun.spawn and also discovers and trusts a global binary found through 'which/where', then validates it only by running its help command. That means any attacker-controlled or trojaned binary earlier in PATH can be executed, creating a path-hijacking/arbitrary code execution risk that is unnecessary for a news lookup skill.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This helper code downloads an executable from a remote URL, verifies it using a checksum fetched from the same remote trust domain, installs it locally, and then executes it. For a news-reading skill, introducing a self-updating binary supply chain materially expands the attack surface: compromise of the hosting endpoint, release pipeline, or discovered binary can lead to arbitrary code execution on the host.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
83% confidence
Finding

This code executes a globally discovered binary using help to validate it, which is a subprocess operation covered by the missing-warning rule for code files. Although the file has comments describing purpose, there is no user-facing prompt, log, or warning that the script will run an external executable from the user's environment.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The script invokes apikey-get and parses the returned API key value, which means it actively accesses secret material rather than only checking whether credentials exist. Even though it does not print the key directly, retrieving secrets into shell variables and processing CLI output increases exposure risk through logs, debugging, crashes, or malicious CLI behavior, especially since the CLI may be a global executable from PATH.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The function treats the Chinese phrase "未设置 API Key" as a built-in expected message alongside English, which embeds a language-specific assumption in the skill logic. There is no nearby indication that the skill is intentionally limited to Chinese/English locales or that users can choose locale behavior.

Content

No source excerpt is available for this finding.