Back to skill

Security audit

Hi Lite

Security checks for vulnerabilities and agentic risk

Overview

Hi-Lite is mostly a coherent local Kindle-highlight manager, but its Amazon fetch feature has under-scoped browser/session handling and an unsafe custom-domain path that users should review before installing.

Install only if you are comfortable with a skill that can read and rewrite your local Kindle-highlight library and, if you use fetch, opens a browser to Amazon and stores a reusable local login profile. Prefer explicit /hi-lite commands, avoid custom Amazon domains unless the skill is updated with an allowlist, and delete ~/.openclaw/workspace/hi-lite/.browser-data/ when you no longer want the saved session.

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

Warning
Location
SKILL.md:263
Finding

Unpinned Third-Party Package and Browser Installation

Content
View full analysis
=1.40.0" playwright install chromium ``` ``` The same installation instructions appear in `README.md:70-76`: ```markdown ### First-Time Setup ```bash pip install "playwright>=1.40.0" playwright install chromium ``` ``` ### Technical Analysis The package requirement uses an open-ended lower bound rather than an exact, reviewed version. Consequently, the command may install any future Playwright release accepted by the package resolver. The subsequent `playwright install chromium` command also downloads a browser artifact without a project-specified version lock or integrity digest. Python package installation can execute package build or installation logic with the invoking user's permissions. Browser binaries are also executable components. The effective code installed by these commands can therefore change after the skill itself has been audited. There is no evidence that the named Playwright package or its current browser artifact is malicious. The vulnerability is the mutable supply-chain trust model and absence of reproducible dependency verification. ### Attack Path 1. The user invokes the Amazon highlight-fetching feature. 2. The skill detects that Playwright is unavailable and presents the documented installation commands. 3. The user or agent runs `pip install "playwright>=1.40.0"`. 4. The package resolver selects a release that was not fixed or reviewed by this project. 5. `playwright install chromium` downloads an additional executable browser artifact. 6. If the package source, a future release, the user's pack ...[truncated 762 chars]
Remediation
View remediation
" ``` 2. Publish a lockfile or requirements file containing cryptographic hashes, and install with hash enforcement: ```bash python3 -m pip install --require-hashes -r requirements.txt ``` 3. Run installation inside a dedicated virtual environment rather than the system Python environment. 4. Document the expected package index and advise users to review custom `pip` index configuration that could enable dependency substitution. 5. Pin and document the expected Playwright-managed Chromium revision. Where supported, verify downloaded artifacts against vendor-provided checksums or signatures. 6. Periodically review and deliberately update the pinned versions rather than accepting arbitrary future releases automatically. 7. Explicitly warn users not to run the installation commands with `sudo` or another privileged account. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:272
Finding

Unvalidated Amazon Domain Used in Shell-Oriented Instructions and Browser Navigation

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (10)

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The README makes an absolute privacy claim that 'nothing is sent to any server,' but the documented auto-fetch workflow explicitly launches a browser to Amazon, transmits user data to Amazon, and stores a reusable session locally. This is a deceptive or inaccurate security/privacy representation that can mislead users into trusting the skill with credentials and personal reading data under false assumptions.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

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

md
When the user first invokes Hi-Lite or says "set up hi-lite":

1. Check if `~/.openclaw/workspace/hi-lite/` exists.
2. If not, create the directory structure:
   - `~/.openclaw/workspace/hi-lite/raw/`
   - `~/.openclaw/workspace/hi-lite/highlights/books/`
   - `~/.openclaw/workspace/hi-lite/collections/`

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

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

md
2. Detect the format of each file and parse highlights from it.
3. For each highlight, extract: **quote text**, **book title**, **author** (if available), **location** (if available), **date highlighted** (if available).
4. Group highlights by book.
5. For each book, create or update a markdown file at `~/.openclaw/workspace/hi-lite/highlights/books/<slug>.md`.
6. Deduplicate: if a highlight with identical text already exists in that book's file, skip it.
7. Update `~/.openclaw/workspace/hi-lite/highlights/_index.md` with current totals.
8. Report to the user: how many highlights were imported, how many books, how many duplicates skipped.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The search trigger accepts broad natural-language requests such as generic conversational queries, which can cause the skill to activate outside clearly scoped /hi-lite commands. That can lead to unintended access to locally stored highlights and accidental disclosure of personal reading data in response to ordinary chat prompts.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

Browse triggers include very generic phrases like 'show me all books' and 'list my highlights' without requiring explicit skill scope. In a multi-skill or ambient assistant environment, this increases the chance of accidental invocation and exposure of the user's local highlight library without deliberate intent.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The random-quote trigger includes everyday phrases like 'surprise me' and 'give me a random quote', which are highly ambiguous and may overlap with harmless general requests. This can cause unintentional retrieval of stored reading highlights, creating a privacy leak even if the data is only local.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

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

md
## 6. Collections

**Trigger**: `/hi-lite collection <name>` or "make a collection about courage", "create a [theme] collection"

### Steps

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The fetch workflow persists Amazon session cookies under a local browser profile, but the skill text does not prominently warn users about that persistent authentication state. Users may not understand that future runs can reuse their logged-in session, increasing the risk of unauthorized access by other local users or processes with workspace access.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
88% confidence
Finding

The skill instructs the agent to automatically run the import flow after a fetch completes, chaining actions without a separate user confirmation. While convenient, this increases the blast radius of a single invocation and removes an opportunity for the user to inspect fetched data before it is parsed and persisted.

Content

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

md
3. The script opens a visible Chromium window. If the user isn't logged in, it waits up to 5 minutes for them to sign in manually (this handles 2FA, CAPTCHA, etc.). Session cookies are saved at `~/.openclaw/workspace/hi-lite/.browser-data/` so future fetches skip login.
4. The script iterates through all annotated books in the sidebar, extracts highlights, and saves a JSON file to `~/.openclaw/workspace/hi-lite/raw/kindle-fetch-{timestamp}.json`.
5. After the script finishes, delete the script file (`fetch_highlights.py`) from `raw/` so it doesn't get parsed as an import.
6. Then automatically run the standard import flow (Section 2) on the fetched JSON file.

**The script to write:**

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

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

md
### Re-Fetch

Re-fetching is safe. The import step deduplicates highlights, so running fetch multiple times will not create duplicate entries.

### Non-US Amazon Domains

Static analysis

No suspicious patterns detected.