Back to skill

Security audit

Upstage Builder

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent Upstage app/API builder, but users should understand that examples send prompts/documents to Upstage and helper scripts can overwrite scaffold files or refresh mutable docs.

Install only if you intend to build with Upstage and are comfortable sending selected prompts, documents, and API requests to Upstage using UPSTAGE_API_KEY. Before running helper scripts, confirm the target project slug is new and review refreshed reference docs if you update them from upstream. For production, pin dependencies and avoid exposing model reasoning output in user-facing interfaces.

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

T08 · Insecure Dependencies

Warning
Location
requirements.txt:1
Finding

Unpinned Third-Party Dependencies Permit Unreviewed Package Updates

Content
View full analysis
=1.30.0 numpy>=1.26.0 requests>=2.31.0 ``` ### Technical Analysis All dependencies use lower-bound-only version constraints. Consequently, future installations may retrieve package versions that were not available or reviewed when the Skill was audited. There is no lock file, upper version boundary, or package hash verification. The package names correspond to legitimate dependencies, and no evidence of typosquatting or a currently malicious package was found. The weakness is that the effective installed code can change over time without any change to this repository. Python packages execute code with the privileges of the installing or running process. If an upstream release, package index account, or dependency chain is compromised, malicious package code could execute during installation or import. ### Attack Path 1. An upstream package account, release process, or transitive dependency is compromised. 2. A malicious version is published that still satisfies the declared lower-bound constraint. 3. A user runs `pip install -r requirements.txt` at a later date. 4. The package manager retrieves the compromised version. 5. Malicious installation or import-time code executes with the privileges of the Python environment. ### Impact Assessment Successful exploitation could provide arbitrary code execution under the account installing or running the Skill. Depending on that account's permissions, an attacker could access project files, environment variables such as `UPSTAGE_API_KEY`, network resources, and writable user data. The declarations themselves do not request elevated system privileges, and no automatic privilege escalation was identified. ]]>
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
scripts/refresh_references.py:54
Finding

Remote Reference Content Is Trusted and Overwrites Local Skill Documentation Without Integrity Verification

Content
View full analysis
str: req = Request(url) with urlopen(req, timeout=60) as resp: return resp.read().decode("utf-8") ``` ```python def main() -> None: REFERENCE_DIR.mkdir(parents=True, exist_ok=True) api_raw = fetch_text(API_DOCS_URL) for filename, content in build_api_reference_files(api_raw).items(): (REFERENCE_DIR / filename).write_text(content) print(f"updated {filename}") ``` ### Technical Analysis The documented refresh operation downloads mutable content from a remote endpoint and replaces seven local reference files. Although HTTPS is used and the endpoint is the declared official Upstage domain, the script does not verify a signature, expected checksum, immutable version identifier, response size, or reviewed manifest. The retrieved material is parsed as Markdown rather than directly executed as Python, so this is not a confirmed remote-code execution mechanism. Nevertheless, these files provide instructions and code examples that the Skill is expected to consult. A compromised upstream endpoint could therefore alter later code generation or recommended commands. The section-heading checks only verify that expected headings are present. They do not establish the authenticity or safety of the content inside those sections. ### Attack Path 1. The documentation endpoint, its publishing account, DNS path, or delivery infrastructure is compromised. 2. The attacker serves modified Markdown containing unsafe API destinations, malicious example commands, or deceptive development guidance while preserving expected section headings. 3. ...[truncated 993 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/init_webapp_project.py:40
Finding

Web Application Initializer Silently Overwrites Files in Existing Projects

Content
View full analysis
`. 2. The initializer is invoked using a value that normalizes to that same slug. 3. `mkdir(..., exist_ok=True)` accepts the existing directory. 4. Each `write_text()` call truncates and replaces the corresponding existing file. 5. Existing documentation, deployment instructions, and environment-variable templates are lost. A malicious collaborator could exploit normalization collisions by suggesting a project name that resolves to the slug of an existing pro ...[truncated 515 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (140)

Tainted flow: 'api_key' from os.environ.get (line 19, credential/environment) → requests.post (network output)

Critical
Category
Data Flow
Confidence
90% confidence
Finding

Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.

Content

Scanner excerpt · examples/document-example.py (reported line 32)May include surrounding context.

python
# --- Step 1: Parse document to Markdown ---
with document_path.open("rb") as f:
    parse_response = requests.post(
        "https://api.upstage.ai/v1/document-digitization",
        headers={"Authorization": f"Bearer {api_key}"},
        files={"document": f},

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The skill is presented as an app-builder for Upstage-based projects, but it also instructs the agent to refresh references from an upstream URL and generate local documentation files. This behavior mismatch can hide unexpected network and file-write activity from users, making data-flow and security review harder and enabling unintended remote content ingestion into the workspace.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The documentation explicitly states that enabling reasoning returns message.reasoning showing the model's internal chain-of-thought and provides an example exposing it. Surfacing internal reasoning can leak hidden instructions, sensitive prompt context, policy logic, or intermediate analysis, which is especially dangerous in agent and RAG systems handling proprietary or user data.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill describes behaviors that imply access to environment variables, filesystem, and network, but it does not declare an explicit tool/permission scope. That creates an over-broad execution surface where a caller or runtime may grant more capability than users expect, increasing the chance of unintended file access, secret use, or outbound requests.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The manifest description says to use the skill when 'building, scaffolding, or deploying anything with Upstage' and includes broad examples like 'create an Upstage-based app'. While Upstage is domain-specific, the activation guidance does not clearly bound when this builder should be used versus other adjacent skills beyond a single exclusion for one-shot API calls, which can lead to over-invocation for many general Upstage requests.

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 · SKILL.md (reported line 47)May include surrounding context.

md
client = OpenAI(
    api_key=api_key,
    base_url="https://api.upstage.ai/v1",
)

# Simple chat

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 · SKILL.md (reported line 174)May include surrounding context.

md
client = OpenAI(
    api_key=api_key,
    base_url="https://api.upstage.ai/v1",
)

# Simple chat

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 · SKILL.md (reported line 194)May include surrounding context.

md
client = OpenAI(
    api_key=api_key,
    base_url="https://api.upstage.ai/v1",
)

# Simple chat

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 · SKILL.md (reported line 195)May include surrounding context.

md
client = OpenAI(
    api_key=api_key,
    base_url="https://api.upstage.ai/v1",
)

# Simple chat

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 · SKILL.md (reported line 196)May include surrounding context.

md
client = OpenAI(
    api_key=api_key,
    base_url="https://api.upstage.ai/v1",
)

# Simple chat

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 · SKILL.md (reported line 197)May include surrounding context.

md
client = OpenAI(
    api_key=api_key,
    base_url="https://api.upstage.ai/v1",
)

# Simple chat

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 · examples/chat-example.py (reported line 16)May include surrounding context.

python
client = OpenAI(
    api_key=api_key,
    base_url="https://api.upstage.ai/v1",
)

# Simple chat

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 · examples/document-example.py (reported line 33)May include surrounding context.

python
client = OpenAI(
    api_key=api_key,
    base_url="https://api.upstage.ai/v1",
)

# Simple chat

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 · examples/document-example.py (reported line 51)May include surrounding context.

python
client = OpenAI(
    api_key=api_key,
    base_url="https://api.upstage.ai/v1",
)

# Simple chat

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 · examples/rag-example.py (reported line 17)May include surrounding context.

python
client = OpenAI(
    api_key=api_key,
    base_url="https://api.upstage.ai/v1",
)

# Simple chat

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/agent-api.md (reported line 10)May include surrounding context.

md
client = OpenAI(
    api_key=api_key,
    base_url="https://api.upstage.ai/v1",
)

# Simple chat

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/agent-api.md (reported line 21)May include surrounding context.

md
client = OpenAI(
    api_key=api_key,
    base_url="https://api.upstage.ai/v1",
)

# Simple chat

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/agent-api.md (reported line 34)May include surrounding context.

md
client = OpenAI(
    api_key=api_key,
    base_url="https://api.upstage.ai/v1",
)

# Simple chat

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/agent-api.md (reported line 47)May include surrounding context.

md
client = OpenAI(
    api_key=api_key,
    base_url="https://api.upstage.ai/v1",
)

# Simple chat

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/agent-api.md (reported line 76)May include surrounding context.

md
client = OpenAI(
    api_key=api_key,
    base_url="https://api.upstage.ai/v1",
)

# Simple chat

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/agent-api.md (reported line 82)May include surrounding context.

md
client = OpenAI(
    api_key=api_key,
    base_url="https://api.upstage.ai/v1",
)

# Simple chat

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/agent-api.md (reported line 88)May include surrounding context.

md
client = OpenAI(
    api_key=api_key,
    base_url="https://api.upstage.ai/v1",
)

# Simple chat

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/agent-api.md (reported line 98)May include surrounding context.

md
client = OpenAI(
    api_key=api_key,
    base_url="https://api.upstage.ai/v1",
)

# Simple chat

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/agent-api.md (reported line 130)May include surrounding context.

md
client = OpenAI(
    api_key=api_key,
    base_url="https://api.upstage.ai/v1",
)

# Simple chat

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/agent-api.md (reported line 159)May include surrounding context.

md
client = OpenAI(
    api_key=api_key,
    base_url="https://api.upstage.ai/v1",
)

# Simple chat