Back to skill

Security audit

Naver Shopping Plus

Security checks for vulnerabilities and agentic risk

Overview

This is a disclosed Korean shopping-search helper with expected network/API use and no evidence of hidden persistence, local data harvesting, or destructive behavior.

Install this in a virtual environment, prefer pinned dependency versions, and avoid running pip with administrator privileges. Use dedicated Naver API credentials and assume product queries may be logged or rate-limited by Naver, Coupang, and 11st.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Warning
Location
README.md:14
Finding

Unpinned Third-Party Dependencies Create a Supply-Chain Risk

Content
View full analysis

Vulnerability Details

File Locations:

  • README.md:14-18
  • README.md:120-124
  • SKILL.md:59-63

Vulnerability Type: Unpinned and integrity-unverified Python dependencies
Risk Level: Medium

Complete Vulnerable Code Snippets:

README.md:14-18:

bash
### 1. 의존성 설치

```bash
pip install requests beautifulsoup4 lxml
text

`README.md:120-124`:

```bash
### "의존성 설치 필요" 에러

```bash
pip install requests beautifulsoup4 lxml
text

`SKILL.md:59-63`:

```bash
## 의존성

```bash
pip install requests beautifulsoup4 lxml
text

### Technical Analysis

The documented installation command retrieves `requests`, `beautifulsoup4`, `lxml`, and their transitive dependencies without pinned versions, cryptographic hashes, a lockfile, or an explicitly trusted package index. Dependency resolution therefore relies on mutable package-index state and the user's local pip configuration.

The listed package names are established packages and do not show evidence of typosquatting. No malicious dependency code is bundled in the audited project. Nevertheless, if a package release, transitive dependency, configured mirror, or package-index account becomes compromised, a user following these instructions could install attacker-controlled code.

Python packages may execute code during installation or when imported by `scripts/search.py`. Consequently, dependency compromise can produce local code execution with the permissions of the user running pip or the shopping script.

### Attack Path

1. An attacker compromises one of the named packages, one of its transitive dependencies, or a package source configured in the victim's pip environment.
2. The attacker publishes or serves a malicious release that satisfies pip's unconstrained dependency resolution.
3. A user follows the documented command:
   ```bash
   pip install requests beautifulsoup4 lxml
  1. pip resolves and installs the attacker-controlled package because no approved versions or hashes are enforced.

...[truncated 1014 chars]

Remediation
View remediation

Remediation Suggestions

  1. Create a dependency file containing reviewed, exact versions:

    text
    requests==<reviewed-version>
    beautifulsoup4==<reviewed-version>
    lxml==<reviewed-version>
    
  2. Lock transitive dependencies rather than pinning only direct dependencies. Use a reproducible dependency-management tool such as pip-tools:

    bash
    python -m pip install pip-tools
    pip-compile --generate-hashes requirements.in
    
  3. Require cryptographic hash verification during installation:

    bash
    python -m pip install --require-hashes -r requirements.txt
    
  4. Review dependency updates before regenerating the lockfile, including release provenance, security advisories, and transitive dependency changes.

  5. Recommend installation in an isolated virtual environment:

    bash
    python -m venv .venv
    . .venv/bin/activate
    python -m pip install --require-hashes -r requirements.txt
    
  6. Document the intended trusted package index and advise users not to install with administrator privileges:

    bash
    python -m pip install \
      --index-url https://pypi.org/simple \
      --require-hashes \
      -r requirements.txt
    
  7. Replace every unpinned installation command in README.md and SKILL.md with the hardened requirements-file command so troubleshooting instructions do not reintroduce the unsafe installation path.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (6)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill advertises and requires network access and environment-variable access, but the manifest does not declare any explicit tool scope or permissions. This creates a transparency and least-privilege problem: a host agent or reviewer cannot clearly constrain what the skill may access, increasing the chance of over-broad execution in environments that support code, network, and secret access.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The manifest description and main documentation are entirely in Korean and explicitly present the skill as a Korean-style shopping search tool, but they do not state that the locale/language restriction is optional or limited to a Korea-specific compliance/business need. Under the policy, forcing a specific language or locale without user opt-in is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The file-level description presents the skill as Korean-only, and the CLI help, errors, and output strings throughout the script are written exclusively in Korean. Under the policy rule, forcing a specific language without opt-in is a natural-language policy violation unless the locale restriction is explicitly justified, which is not stated here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The README is written entirely in Korean and presents the skill as a Korean shopping search tool without offering an alternate language or user opt-in. Under the language/locale policy, forcing a specific language without choice can be a natural-language policy violation unless the locale constraint is clearly documented and justified.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The README explicitly states that the skill performs web scraping against Coupang and 11st, but it does not clearly warn users that their search terms will be transmitted to third-party sites and may be logged or rate-limited. In an agent-skill context, users may assume local-only processing unless network behavior is disclosed, so the omission creates a transparency and privacy risk even though the behavior itself is not overtly malicious.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
97% confidence
Finding

The argument parser declares --sort choices ['price', 'review'], which tells users the tool can sort by review. However, format_output only performs sorting when sort_by == 'price', and there is no review data collected anywhere in the code, so selecting review does not implement the documented behavior.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.