Back to skill

Security audit

jev-desktop

Security checks for vulnerabilities and agentic risk

Overview

The skill is transparent about its desktop automation and remote screen-description service, but it can execute hard-to-undo desktop actions by default without mandatory local confirmation.

Review this carefully before installing. Use it only on applications and documents you are willing to expose to the configured decision endpoint, prefer --no-values for confidential screens, and use --confirm-destructive whenever actions could send messages, overwrite files, delete data, confirm warnings, or affect accounts. Pin and trust TYPESAFE_BASE_URL before use.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:78
Finding

Destructive desktop actions execute without mandatory user confirmation

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 78–83; corroborating behavior at lines 158–161
Vulnerability Type: Destructive action execution without a mandatory local confirmation gate
Risk Level: High

Vulnerable Snippet

markdown
**A step that is hard to undo is not taken quietly.** The same request asks how
hard the step would be to reverse. An ordinary step needs 0.70 confidence in its
target, one rated destructive needs 0.90, and below 0.55 nothing runs. When the
bar is not met the run stops and names the candidate it would have acted on, so
you decide instead of it. By default, a destructive step at target confidence
0.90 or higher runs. Pass `--confirm-destructive` to `run.mjs` or `act.mjs` to
stop for confirmation on every step rated destructive, regardless of confidence.

The documented risk policy further identifies relevant destructive actions:

markdown
- **Risk sets the bar.** The answer says what; confidence says whether to act.
  An ordinary action needs 0.70. One that Jev rates `destructive` at 0.50 or
  more needs 0.90 — writing a file, deleting, sending, confirming a warning.
  Below 0.55 nothing acts at all.

Technical Analysis

The Skill delegates desktop operation selection, target selection, confidence scoring, and destructive-risk assessment to a remote decision endpoint. Its default policy allows an action classified as destructive to execute automatically when the endpoint reports target confidence of at least 0.90.

The only documented unconditional confirmation mechanism, --confirm-destructive, is optional and is not enabled in the primary invocation examples. Confidence scoring is not an authorization control: it expresses the endpoint's assessment of its prediction but does not establish that the user approved a particular irreversible action.

Consequently, the same remote decision component that proposes an operation can provide the values that allow it to pass the execution thres ...[truncated 1784 chars]

Remediation
View remediation

Remediation Suggestions

  1. Make destructive-action confirmation mandatory by default in both run.mjs and executable act.mjs flows.
  2. Require a local, action-specific approval after displaying the exact application, operation, target, and expected consequence.
  3. Do not permit confidence or destructiveness values returned by the remote endpoint to bypass this approval.
  4. Issue a short-lived approval token bound to the exact operation, target, application window, and current screen state; reject execution if any value changes.
  5. Keep non-executing or dry-run behavior as the default for one-step resolution, and require an explicit execution flag in addition to destructive approval.
  6. Apply hard local prohibitions or additional confirmation for deletion, sending, file overwrite, warning acceptance, purchases, publication, and permission changes.
  7. Treat ambiguous risk classifications conservatively: if an operation may be destructive, require confirmation.
  8. Record the approved action and final delivery status in an audit log without storing sensitive screen or field contents unnecessarily.
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)

External Transmission

Medium
Category
Data Exfiltration
Confidence
94% confidence
Finding

This skill explicitly sends a structured description of the user's desktop UI to a remote decision service, and the documentation admits that accessible names, descriptions, window titles, recent actions, and up to sixty characters of field values may be transmitted. In a desktop automation context, that can expose sensitive document contents, form data, or internal application metadata to third-party infrastructure, making this a real data exfiltration risk even if it is disclosed and intentional.

Content

Scanner excerpt · SKILL.md (reported line 190)May include surrounding context.

md
## Deciding through OpenRouter

The decision endpoint is `TYPESAFE_BASE_URL`, defaulting to TypeSafe's native
`https://api.typesafe.ai/v1/systemone`. Point it at OpenRouter's Decisions
router to reuse an OpenRouter key instead of a TypeSafe one (live-tested
against `typesafe/jev-1.13`):