Back to skill

Security audit

kiaaccess

Security checks for vulnerabilities and agentic risk

Overview

The skill is a real, purpose-aligned Kia vehicle integration, but it asks users to run mutable npm code with vehicle-account credentials and enables persistent access to sensitive vehicle functions.

Review before installing. Prefer read-only mode unless you need commands, avoid storing real Kia credentials in project files, pin and review the MCP package version before running it, and treat exported refresh tokens as equivalent to account access because they bypass MFA on that machine.

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

T08 · Insecure Dependencies

Error
Location
SKILL.md:15
Finding
Unpinned Third-Party Package Is Automatically Downloaded and Executed## Vulnerability Details **File Location**: `SKILL.md`, lines 15-27 **Vulnerability Type**: Unpinned and automatically executed npm dependency **Risk Level**: High **Vulnerable Code:** ```json Add to `.mcp.json` in your project or `~/.claude/mcp.json`: { "mcpServers": { "kiaaccess": { "command": "npx", "args": ["-y", "kiaaccess-mcp"], "env": { "KIA_USERNAME": "you@example.com", "KIA_PASSWORD": "your-password", "KIA_WRITE_MODE": "comfort" } } } } ``` ### Technical Analysis The documented configuration invokes `npx` with `-y` and a package name that has no exact version or integrity constraint. Consequently, npm can retrieve and execute whichever package release the registry currently resolves as the latest version. The `-y` option suppresses the interactive installation prompt, reducing the opportunity for users to notice an unexpected package or version. The audited project contains only `SKILL.md`; it does not include the MCP server source, a lockfile, an integrity hash, or other material that would allow the downloaded executable to be verified against the reviewed Skill. The code that ultimately executes can therefore change after this Skill has been audited. This behavior is particularly sensitive because the child process receives the user's Kia username and password through its environment. It also provides functionality involving vehicle location and remote vehicle commands. Although using the external package is necessary to provide the declared integration, automatically executing an unpinned release exceeds the minimum safe dependency privileges. ### Attack Path 1. An attacker compromises the npm publisher account, package release process, registry resolution, or another component of the package supply chain. 2. The attacker publishes a malicious release under the `kiaaccess-mcp` package name. 3. A user starts the configured MCP s ...[truncated 1126 chars]
Remediation
## Remediation Suggestions - Pin the MCP package to a reviewed exact version, such as `kiaaccess-mcp@X.Y.Z`, rather than relying on the current registry release. - Remove `-y` where practical so installation or version changes are not silently accepted. - Install dependencies through a committed lockfile and verify npm integrity metadata. - Review the source and release artifacts for the pinned version before deployment. - Prefer a locally installed, verified executable over downloading code during every launch. - Run the MCP server in a sandbox or container with narrowly scoped filesystem and network access. - Restrict the process environment to only the secrets and variables it requires. - Establish an explicit, reviewed update procedure instead of automatically consuming new releases.

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:15
Finding
Kia Account Credentials Are Stored in Plaintext MCP Configuration## Vulnerability Details **File Location**: `SKILL.md`, lines 15-28 **Vulnerability Type**: Plaintext storage of sensitive account credentials **Risk Level**: High **Vulnerable Code:** ```json Add to `.mcp.json` in your project or `~/.claude/mcp.json`: { "mcpServers": { "kiaaccess": { "command": "npx", "args": ["-y", "kiaaccess-mcp"], "env": { "KIA_USERNAME": "you@example.com", "KIA_PASSWORD": "your-password", "KIA_WRITE_MODE": "comfort" } } } } ``` `KIA_WRITE_MODE` decides which command tools are registered at all: `none` (reads only), `comfort` (climate + charging, the default), `all` (also door lock/unlock). An unrecognised value fails closed to `none`. ``` ### Technical Analysis The setup instructions direct users to place their Kia username and password directly in either a project-level `.mcp.json` file or the user-level `~/.claude/mcp.json` file. These are long-lived plaintext configuration files rather than dedicated secret stores. A project-level file may be accidentally committed to source control, included in an archive, copied into support material, synchronized to shared storage, or exposed to collaborators. A user-level file may be accessible to local processes running under the same account and may also be included in unencrypted backups. The instructions do not require restrictive permissions, secret-manager integration, repository exclusions, or credential rotation after accidental exposure. The sensitivity is higher than that of an ordinary read-only integration. The account can expose vehicle details and location, and the documented server supports climate, charging, and—when configured with `KIA_WRITE_MODE=all`—door lock and unlock commands. The default `comfort` setting also enables write capabilities when a read-only default would provide lower privilege for status-only requests. ### Attack Path 1. A user replaces the ...[truncated 1481 chars]
Remediation
## Remediation Suggestions - Do not place real account passwords directly in project or user MCP configuration files. - Retrieve credentials at runtime from an operating-system keychain, encrypted secret manager, or narrowly scoped credential broker. - Provide a redacted configuration template containing variable references rather than literal secret values. - Explicitly add `.mcp.json` to repository ignore rules and secret-scanning policies when it may contain sensitive values. - Enforce restrictive filesystem permissions on all credential and session-storage files. - Prefer scoped, revocable tokens over long-lived account passwords where the upstream service supports them. - Encrypt remember-me tokens at rest and provide clear revocation and rotation procedures. - Default `KIA_WRITE_MODE` to `none`; require explicit opt-in for `comfort` and especially `all`. - Separate read-only deployments from command-capable deployments and expose only the tools needed for the user's intended tasks. - Rotate the Kia password and invalidate sessions immediately if a configuration file containing credentials is committed, shared, or otherwise exposed.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (1)

MCP Config Access

High
Category
Agent Snooping
Content
## Setup

Add to `.mcp.json` in your project or `~/.claude/mcp.json`:

```json
{
Confidence
95% confidence
Finding
The skill instructs users to place Kia account credentials directly into `.mcp.json` or `~/.claude/mcp.json`, which are local config files that may be readable by other tools, accidentally committed, or exposed through support/debug workflows. Because these secrets grant access to real vehicle telemetry and remote commands, compromise could expose location data or enable actions like climate control, charging changes, and door lock/unlock depending on write mode.

Static analysis

No suspicious patterns detected.