Back to skill

Security audit

snlib-cli

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed Seongnam Library CLI wrapper with expected login/session handling and guarded write actions.

Before installing, understand that the skill downloads and runs a pinned native binary, stores short-lived library session data locally, and can submit library requests only after you confirm the prepared payload. Keep login JSON files private and avoid shared logs because account outputs may contain personal data.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (6)

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 3)May include surrounding context.

md
---
name: snlib-cli
description: Run Seongnam Library (snlib.go.kr) tasks with the native MoonBit CLI: login, book search, account/loan/reservation status, interlibrary loans, hope-book requests, and basket queries. Prepare write requests first and submit only after explicit user confirmation.
metadata: { "openclaw": { "requires": { "bins": ["bash", "curl"] } } }
---

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 69)May include surrounding context.

md
- Inspect JSON `outcome` and `code`, not just the exit status. The native CLI
  currently exits successfully even for command-level errors.
- Write commands default to preparation only. Review `data.prepared_payload`
  and obtain explicit confirmation of the full request before setting
  `"submit":true`. Never infer SMS/contact consent from unchecked form defaults.
- Never automatically retry a POST after a network or persistence error. Check

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
80% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · scripts/snlib-cli.sh (reported line 66)May include surrounding context.

sh
"https://github.com/ruseel/snlib-cli/releases/download/$tag/$asset" \
    --output "$temporary" </dev/null
  [[ "$(hash_file "$temporary")" == "$expected" ]] || fail 'Downloaded binary checksum mismatch; refusing to execute.'
  chmod 700 "$temporary"
  mv -f "$temporary" "$binary"
  trap - EXIT
fi

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
80% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · scripts/snlib-cli.sh (reported line 72)May include surrounding context.

sh
"https://github.com/ruseel/snlib-cli/releases/download/$tag/$asset" \
    --output "$temporary" </dev/null
  [[ "$(hash_file "$temporary")" == "$expected" ]] || fail 'Downloaded binary checksum mismatch; refusing to execute.'
  chmod 700 "$temporary"
  mv -f "$temporary" "$binary"
  trap - EXIT
fi

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

This markdown file embeds human-readable library names entirely in Korean, with no indication that the locale is optional or that the skill is region-specific. Under the policy rule for natural-language locale constraints, forcing a specific language without opt-in can be a violation when no justification is provided.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

The comment says the local development override 'never downloads or builds in this mode,' which is true, but it omits the more important behavior that the script will directly exec any trusted-path executable provided via SNLIB_CLI_BINARY. This documentation frames the branch narrowly around download/build behavior while the actual effect is to hand off control to another binary, which is a meaningful intent difference for an auditor reading the comment.

Content

No source excerpt is available for this finding.