Back to skill

Security audit

AI Trending Radar

Security checks for vulnerabilities and agentic risk

Overview

This skill gathers public AI project trend data and writes a local report, with no evidence of credential access, persistence, or hidden behavior.

Install only if you are comfortable with the skill making live requests to public trend sources and creating a local trending_report.json file. Treat generated links and paper metadata as research leads, especially arXiv entries, because one fetch path uses HTTP and should be verified before relying on it.

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 (1)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/fetch_trending.py:171
Finding

Plaintext HTTP Retrieval Allows Tampering with arXiv Report Content

Content
View full analysis

Vulnerability Details

File Location: scripts/fetch_trending.py, lines 171–176
Vulnerability Type: Plaintext transport of untrusted external content
Risk Level: Medium

Vulnerable Code

python
url = (
    "http://export.arxiv.org/api/query"
    f"?search_query={urllib.parse.quote(query)}"
    f"&sortBy=submittedDate&sortOrder=descending"
    f"&max_results={max_results}"
)

html = fetch_html(url)

Technical Analysis

The arXiv API request begins over plaintext HTTP rather than HTTPS. HTTP provides neither server authentication nor transport integrity. An attacker with a network position—such as a compromised gateway, malicious Wi-Fi access point, or upstream proxy—could intercept and modify the XML response.

The script parses response fields including paper titles, summaries, authors, identifiers, and GitHub links, then stores them in trending_report.json. The skill workflow subsequently directs the agent to read and interpret that report. Therefore, tampered source content can enter the final report as trusted-looking research metadata.

Even if the server redirects HTTP requests to HTTPS, the initial request and redirect response remain vulnerable to interception. The attacker could prevent or replace the redirect.

The retrieved content is not directly passed to a shell or code interpreter, so this issue does not independently establish arbitrary code execution. Its primary effect is loss of report integrity, including the possibility of deceptive links and adversarial text reaching the interpreting agent.

Attack Path

  1. A user invokes the skill's preferred automated workflow.
  2. fetch_arxiv_recent() requests http://export.arxiv.org/api/query.
  3. A network-positioned attacker intercepts the plaintext request.
  4. The attacker returns modified XML containing fabricated titles, summaries, authors, identifiers, or repository links.
  5. The script parses the modified response and writes the attacker-controlled fields to ...[truncated 671 chars]
Remediation
View remediation

Remediation Suggestions

  1. Replace the plaintext endpoint with the HTTPS endpoint:
python
url = (
    "https://export.arxiv.org/api/query"
    f"?search_query={urllib.parse.quote(query)}"
    f"&sortBy=submittedDate&sortOrder=descending"
    f"&max_results={max_results}"
)
  1. Reject transport downgrades and validate that the final response URL remains HTTPS and belongs to the expected arXiv host.

  2. Validate extracted links before including them in the report. Require HTTPS and allowlist expected hosts where practical, especially for arXiv identifiers and repository links.

  3. Treat every fetched field as untrusted data. Ensure downstream instructions explicitly prohibit following commands or behavioral instructions embedded in titles, summaries, authors, or other source metadata.

  4. Prefer a proper XML parser with secure parsing defaults over regular expressions, and apply reasonable response-size and field-length limits to reduce malformed-input and resource-exhaustion risks.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (5)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill instructs the agent to execute a local Python script and perform manual web research, which implies code execution, network access, and creation of an output file, but it does not declare any explicit tool scope or permissions. This creates a least-privilege and transparency gap: an agent or runtime may grant broader capabilities than intended, and users or reviewers cannot easily verify what external access and side effects the skill requires.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/sources.md (reported line 8)May include surrounding context.

md
for topic in AI_TOPICS[:6]:  # limit to avoid rate limits
        query = f"topic:{topic} pushed:>={since_date}"
        url = (
            "https://api.github.com/search/repositories"
            f"?q={urllib.parse.quote(query)}"
            "&sort=stars&order=desc&per_page=10"
        )

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · scripts/fetch_trending.py (reported line 75)May include surrounding context.

python
for topic in AI_TOPICS[:6]:  # limit to avoid rate limits
        query = f"topic:{topic} pushed:>={since_date}"
        url = (
            "https://api.github.com/search/repositories"
            f"?q={urllib.parse.quote(query)}"
            "&sort=stars&order=desc&per_page=10"
        )

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

This markdown template fixes the report language to Chinese across headings, labels, and guidance text. Under the policy, forcing a specific language without user opt-in can be a natural-language policy violation unless the locale constraint is explicitly justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

The reference guide includes a fixed Twitter/X query with lang:en, which imposes an English-only language constraint in natural-language guidance. Under the policy, forcing a specific language without user choice or documented justification is a locale/language policy concern.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.