Back to skill

Security audit

Lowyat Forum Research

Security checks across malware telemetry and agentic risk

Overview

This skill is a disclosed Lowyat forum search-and-scrape helper, with scoping and hardening gaps but no evidence of hidden, destructive, credential-stealing, or exfiltration behavior.

Install only if you want an agent to search and scrape public Lowyat forum threads. Use it only with forum.lowyat.net topic URLs, avoid bulk scraping, and consider the forum terms and privacy implications of storing public usernames, timestamps, and comments in Excel files.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (4)

Tainted flow: 'topic_url' from input (line 15, user input) → requests.get (network output)

Medium
Category
Data Flow
Content
print(f"Scraping topic: {topic_id}")

# Fetch first page to auto-detect total pages
r = requests.get(topic_url)
soup = BeautifulSoup(r.content, 'html5lib')
last_offsets = re.findall(r'/topic/' + topic_id + r'/\+(\d+)', str(soup))
if last_offsets:
Confidence
95% confidence
Finding
The script sends unvalidated user-controlled input directly into requests.get, so an operator can make it connect to arbitrary URLs rather than only Lowyat forum pages. In an agent or automated environment this creates an SSRF-style primitive that can be abused to reach internal services, cloud metadata endpoints, or unexpected hosts, and the skill context makes this more concerning because it is marketed as Lowyat-only research but does not enforce that restriction.

Tainted flow: 'url' from input (line 47, user input) → requests.get (network output)

Medium
Category
Data Flow
Content
for offset in tqdm(offsets, desc="Scraping", unit="page", dynamic_ncols=True):
    url = topic_url + '/+' + offset if offset else topic_url

    r = requests.get(url)
    soup = BeautifulSoup(r.content, 'html5lib')
    table = soup.find('div', attrs={'id': 'topic_content'})
Confidence
96% confidence
Finding
This second request path continues the same issue for every paginated fetch: derived URLs are built from tainted input and fetched without host or scheme restrictions. An attacker can supply a crafted base URL so the loop repeatedly contacts attacker-chosen destinations, amplifying SSRF behavior and increasing the chance of scanning or accessing unintended resources.

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill explicitly instructs use of WebSearch and a Python scraper to access forum.lowyat.net, which is network-capable behavior, yet no declared permissions are shown in the skill manifest. Missing permission declarations weaken review and runtime governance because users and platforms cannot accurately assess or constrain what the skill is allowed to access.

Vague Triggers

Medium
Confidence
88% confidence
Finding
The trigger text is broad enough to activate on generic Malaysian consumer research topics even when the user did not ask to use Lowyat or forum scraping. Overbroad activation can cause unintended browsing, scraping, and collection of forum content, which increases privacy, compliance, and user-consent risk for a tool that performs external data extraction.

VirusTotal

66/66 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.