Back to skill

Security audit

chinese technology news

Security checks for vulnerabilities and agentic risk

Overview

This skill is a straightforward Chinese tech-news RSS fetcher with some hardening gaps but no evidence of hidden, persistent, destructive, or credential-seeking behavior.

Install only if you want a Chinese-language RSS news helper and are comfortable with it making outbound HTTPS requests to the listed media feeds. The publisher should ideally add response size limits, request timeouts, redirect allowlisting, and output sanitization, but the reviewed artifacts do not show malicious or hidden behavior.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (3)

T09 · Insecure Skill Coding Practices

Warning
Location
fetch.js:12
Finding

Unbounded buffering of remote RSS responses

Content
View full analysis
{ let data = ''; res2.on('data', chunk => data += chunk); res2.on('end', () => resolve(data)); }).on('error', reject); return; } let data = ''; res.on('data', chunk => data += chunk); res.on('end', () => resolve(data)); ``` ### Technical Analysis The `fetchUrl` function accumulates the complete body of both direct and redirected HTTP responses in an in-memory string. It does not impose a maximum response size, configure a request timeout, or abort a response that continuously streams data. Because the response originates from an external service, the process cannot assume that its size or completion time is safe. A malicious, compromised, or malfunctioning feed server could return an extremely large response or maintain an indefinite chunked response. Repeated string concatenation can also increase memory and CPU consumption. ### Attack Path 1. An attacker compromises or gains control over one of the configured RSS endpoints, or its redirect destination. 2. The endpoint returns an extremely large response or continuously sends chunks without ending the response. 3. `fetchUrl` appends every chunk to the `data` string without enforcing a limit. 4. The Node.js process consumes increasing amounts of memory and CPU. 5. The process eventually becomes unresponsive, is terminated for exceeding its memory limit, or affects other workloads on the same host. ### Impact Assessment Successful exploitation can cause denial of service within the Node.js process. In resource-constrained or shared execution environments, excessive memory use may also degrade colocated workloads. This issue does not directly grant filesystem access, code execution, or additional operating-system priv ...[truncated 13 chars]
Remediation
View remediation
{ received += chunk.length; if (received > MAX_RESPONSE_BYTES) { res.destroy(new Error('RSS response exceeds the permitted size')); return; } chunks.push(chunk); }); res.on('end', () => { resolve(Buffer.concat(chunks).toString('utf8')); }); ``` ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
fetch.js:8
Finding

Redirect destination is followed without validation

Content
View full analysis
{ if (res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) { https.get(res.headers.location, { headers: { 'User-Agent': 'Mozilla/5.0' } }, (res2) => { let data = ''; res2.on('data', chunk => data += chunk); res2.on('end', () => resolve(data)); }).on('error', reject); return; } ``` ### Technical Analysis Although the initial feed URLs are hard-coded, the destination of the second request is controlled by the remote server through its `Location` response header. The code does not validate the redirected hostname, port, or resolved IP address before issuing the request. A compromised feed endpoint could therefore redirect the process to an arbitrary HTTPS service reachable from the runtime environment, including loopback, private-network, or link-local destinations. The implementation also does not safely resolve relative redirect references against the original URL. The request does not attach application credentials, which limits direct disclosure. Nevertheless, it can reach services that are inaccessible to an external attacker and can trigger HTTP GET side effects. If an internal endpoint returns RSS-shaped XML, parsed titles and links may also be exposed in program output. ### Attack Path 1. An attacker compromises a configured feed endpoint or otherwise controls its redirect response. 2. The endpoint returns a `3xx` response with a `Location` value targeting an internal HTTPS service. 3. The skill passes that location directly to `https.get`. 4. The request originates from the host running the skill and reaches the internal destination. 5. The request may trigger a state-changing GET ...[truncated 525 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
fetch.js:70
Finding

Untrusted RSS fields are printed without terminal control-character sanitization

Content
View full analysis
]+>/g, '').trim() : ''; const url = linkMatch ? (linkMatch[1] || linkMatch[2] || linkMatch[3] || '').replace(//g, '').trim() : ''; if (title && url && !url.startsWith('http://pic')) { articles.push({ title, url, source: sourceName }); } ``` ```javascript top20.forEach((a, i) => { console.log(`${i+1}. [${a.source}] ${a.title}`); console.log(` ${a.url}\n`); }); ``` ### Technical Analysis Article titles and links originate from externally controlled RSS documents. Removing XML or HTML-like tags does not remove ASCII control characters, C1 control characters, or ANSI escape sequences. These values are subsequently written directly to the terminal. A malicious or compromised feed can embed escape sequences that alter terminal colors, move the cursor, erase prior output, forge status messages, or create misleading clickable links through terminal hyperlink sequences. The fields also lack length limits and URL-scheme validation. Typical modern terminals do not execute arbitrary operating-system commands merely because an escape sequence is printed, so this issue should not be treated as direct code execution. Its primary effects are output-integrity loss, operator deception, and possible contamination of downstream systems that consume console output. ### Attack Path 1. An attacker obtains control over content returned by a configured RSS source. 2. The attacker places ANSI escape sequences or other control characters in an article title or link. 3. `parseRSS` retains those characters because its replacements only remove markup patterns. 4. The resulting title or URL is passed to `console.log`. 5. A compatible terminal interprets the embedded sequences, allowi ...[truncated 434 chars]
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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
Findings (1)

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This JavaScript file contains natural-language comments and console output exclusively in Chinese, including the stated purpose at L01 and runtime messaging at L43. Under the policy rule for language/locale, this is a violation because the skill does not offer a language option or explain that it is intentionally region-specific.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.