Back to skill

Security audit

Data Scraper

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent web scraper, but it needs Review because it can fetch arbitrary local or internal targets and automatically stores scrape metadata for workflow consumers.

Install only after reviewing the risks. Use this skill for public, non-sensitive pages; avoid private networks, local file URLs, cloud metadata addresses, and URLs containing tokens or signed query parameters. Do not pass real bearer tokens or session cookies on the command line, and inspect or delete generated workspace event files if scraped URLs or content may be sensitive.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (4)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
run.sh:14
Finding

Arbitrary URL Fetching Enables SSRF and Local Resource Access

Content
View full analysis
"$TMP_FILE"; then echo "❌ URL 접근 실패: $URL" rm -f "$TMP_FILE" exit 1 fi ``` ### Technical Analysis The caller controls the complete value passed to `curl`. The script does not validate the URI scheme, destination hostname, resolved IP address, port, or redirect target. The `-L` option follows redirects without independently validating each destination. Depending on the protocols enabled in the installed `curl` build, the input may also use non-HTTP schemes such as `file://`. Consequently, the scraper can be used as a confused deputy to access resources available to the process but unavailable to the remote or untrusted caller. The legitimate scraping function requires outbound access to selected public HTTP or HTTPS pages. Access to local files, loopback services, private networks, link-local addresses, cloud metadata services, and arbitrary protocols exceeds that minimum privilege. ### Attack Path 1. An attacker or untrusted request causes the Agent to invoke the Skill with a crafted URL. 2. The URL directly identifies a local file, loopback service, private network endpoint, link-local metadata service, or a public page that redirects to one. 3. `curl -L` retrieves the resource without destination restrictions. 4. The response is read from the temporary file and emitted to standard output. 5. The attacker obtains information accessible with the Skill process's network position or operating-system account. Example destination classes include: ```text file:///path/to/readable/file http://127.0.0.1:PORT/intern ...[truncated 890 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
run.sh:38
Finding

Sensitive URLs Are Logged and Event Data Is Written Without JSON Escaping

Content
View full analysis
"$EVENT_FILE" <
Remediation
View remediation
"$EVENT_FILE" ``` 2. Restrict `FORMAT` to an explicit allowlist such as `text` and `html`; reject every other value. 3. Remove URL usernames, passwords, fragments, and sensitive query parameters before logging or persistence. 4. Prefer storing only the normalized hostname and path when the complete URL is not required. 5. Set `umask 077` and create event directories and files with restrictive permissions. 6. Define and enforce a strict schema in every event consumer. 7. Reject malformed events and unexpected properties rather than treating them as trusted instructions. 8. Establish retention and secure-deletion policies for event files. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:105
Finding

Authentication Examples Expose Bearer Tokens and Session Cookies Through Command-Line Arguments

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
GUIDE.md:151
Finding

Implementation Guide Uses Predictable Shared Temporary Files

Content
View full analysis
/tmp/page.html ``` ### 2. 텍스트 추출 ```bash # lynx 사용 (설치 필요: brew install lynx) lynx -dump -nolist "$URL" > /tmp/page.txt # 또는 간단한 sed 필터링 sed 's/<[^>]*>//g' /tmp/page.html > /tmp/page.txt ``` ``` ### Technical Analysis The implementation guide uses fixed filenames in the shared `/tmp` directory. An attacker with access to the same system can create those paths before the documented command runs, including as symbolic links to another file writable by the Skill's user. Shell output redirection follows symbolic links. As a result, the `curl` or `lynx` command may truncate and overwrite the symlink target. Concurrent scraper executions also use the same names, allowing one invocation to read or overwrite another invocation's temporary data. The actual `run.sh` uses `mktemp`, which is safer. Nevertheless, the guide is operational documentation intended to direct implementation or Agent behavior and therefore introduces an unsafe alternative. ### Attack Path 1. A local attacker predicts the documented temporary filename, such as `/tmp/page.html` or `/tmp/page.txt`. 2. The attacker creates that path as a symbolic link to a file writable by the victim account. 3. A user or Agent follows the implementation guide. 4. Shell redirection opens the symlink target and truncates or replaces its contents with downloaded or parsed data. 5. The overwritten file may disrupt the user's configuration, application state, or other writable resources. For a collision attack, two scraper processes can write the same temporary files simultaneously, causing one process to consume content supplied or modified by the other. ### Impact Assessment The vulnerability can permit: - Overwriting or corrupting files writable by the Skill's operatin ...[truncated 315 chars]
Remediation
View remediation
"$PAGE_HTML" sed 's/<[^>]*>//g' "$PAGE_HTML" > "$PAGE_TEXT" ``` 2. Quote every temporary pathname. 3. Install cleanup traps immediately after creating temporary resources. 4. Use restrictive permissions so other local users cannot read scraped content. 5. Avoid reopening predictable names in shared directories. 6. Update the guide to use the same safe temporary-file pattern already present in `run.sh`. 7. Consider response-size limits to prevent temporary-storage exhaustion. ]]>
Vulnerability Patterns
  • 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
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (9)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The guide describes writing outputs to persistent locations under memory/ and events/ but does not clearly warn that use of the skill creates stored artifacts. This can surprise users, retain potentially sensitive scraped content or URLs longer than expected, and create secondary exposure through logs or later workflows that consume those files.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The trigger phrases are generic terms such as '스크래핑', '데이터 수집', and 'scrape', which can easily match ordinary user requests and cause this skill to activate outside the user's clear intent. In a skill that performs network access and persistent file writes, overbroad activation increases the chance of unintended scraping, unwanted outbound requests, and accidental data retention.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding

The skill advertises shell-based scraping behavior but does not declare any explicit tool scope such as allowed-tools or permissions. In an agent environment, this creates ambiguity about what execution capabilities the skill expects and can lead to overbroad shell access being granted implicitly, increasing the risk of misuse, unsafe network access, or command execution beyond the user's expectations.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill states that monitored page snapshots are stored locally with timestamps, but it does not warn users that scraped content may persist on disk. This can expose sensitive or proprietary page contents, authenticated views, or personal data captured during scraping, especially when headers, cookies, or authenticated sessions are used elsewhere in the skill.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The script performs a network request and writes persistent metadata without meaningful warning, consent, or retention controls. This is dangerous because users may pass sensitive URLs, internal endpoints, or authenticated targets, and the resulting metadata remains in the workspace where other tools or users may read it.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill’s stated purpose is web scraping and text extraction, but it also persists scrape metadata into a shared workspace event file for downstream consumers. This creates an undisclosed data-flow side effect: visited URLs and scrape activity become available to other components, which can leak sensitive targets, internal URLs, or user intent beyond the immediate command output.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The script implements workflow/event publication behavior unrelated to basic scraping, effectively turning a simple fetch/extract tool into a producer for broader automation. In an agent ecosystem, this expands the attack surface because untrusted or sensitive scrape metadata can trigger or inform downstream processes without the user clearly consenting to that propagation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

All user-facing instructions, triggers, examples, and warnings are presented in Korean, and the document does not indicate that Korean is optional or required for a justified regional use case. This can violate a language-choice policy when a skill implicitly forces a single language without user opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
97% confidence
Finding

Comments and runtime messages such as usage, errors, and status output are written in Korean only. This imposes a specific language on users without offering a locale choice or documenting that the skill is intentionally Korean-only.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.