T05 · Unauthorized Access and Privilege Escalation
- Location
scripts/rag-service.mjs:181- Finding
Unauthenticated Arbitrary-Directory Document Ingestion
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a coherent local RAG service, but it needs careful review because it exposes unauthenticated local HTTP endpoints that can index readable files and it tries to support persistent background execution.
Install only if you are comfortable running a local background service that can read and index any .txt or .md files reachable by the service account when requested. Keep it bound to 127.0.0.1, do not enable non-loopback hosting unless you add authentication and network controls, avoid pointing ingestion at broad or sensitive directories, and review or pin dependencies before bootstrap. The missing launchd template should be fixed before relying on the persistence workflow.
scripts/rag-service.mjs:181Unauthenticated Arbitrary-Directory Document Ingestion
scripts/rag-service.mjs:45Unbounded Request Bodies and Ingestion Work Permit Denial of Service
package.json:5Runtime Installation of an Unlocked Third-Party Dependency
Referenced artifact was not completely inspected
- `scripts/rag-service.mjs` → HTTP service implementation
Referenced artifact was not completely inspected
- `scripts/manage.sh` → bootstrap/start/stop/restart/health/ingest/search
Referenced artifact was not completely inspected
- `scripts/manage.sh` → bootstrap/start/stop/restart/health/ingest/search
Referenced artifact was not completely inspected
- `scripts/manage.sh` → bootstrap/start/stop/restart/health/ingest/search
Referenced artifact was not completely inspected
- `scripts/manage.sh` → bootstrap/start/stop/restart/health/ingest/search
Referenced artifact was not completely inspected
- `scripts/manage.sh` → bootstrap/start/stop/restart/health/ingest/search
Referenced artifact was not completely inspected
- `scripts/manage.sh` → bootstrap/start/stop/restart/health/ingest/search
Referenced artifact was not completely inspected
- `scripts/manage.sh` → bootstrap/start/stop/restart/health/ingest/search
Referenced artifact was not completely inspected
- `scripts/manage.sh` → bootstrap/start/stop/restart/health/ingest/search
Referenced artifact was not completely inspected
- `scripts/manage.sh` → bootstrap/start/stop/restart/health/ingest/search
Referenced artifact was not completely inspected
- `scripts/manage.sh` → bootstrap/start/stop/restart/health/ingest/search
Referenced artifact was not completely inspected
- `scripts/manage.sh` → bootstrap/start/stop/restart/health/ingest/search
Referenced artifact was not completely inspected
- `scripts/manage.sh` → bootstrap/start/stop/restart/health/ingest/search
Referenced artifact was not completely inspected
- `scripts/manage.sh` → bootstrap/start/stop/restart/health/ingest/search
Referenced artifact was not completely inspected
- `scripts/manage.sh` → bootstrap/start/stop/restart/health/ingest/search
Referenced artifact was not completely inspected
- `scripts/manage.sh` → bootstrap/start/stop/restart/health/ingest/search
Referenced artifact was not completely inspected
- `scripts/manage.sh` → bootstrap/start/stop/restart/health/ingest/search
Referenced artifact was not completely inspected
- `scripts/manage.sh` → bootstrap/start/stop/restart/health/ingest/search
Referenced artifact was not completely inspected
- `scripts/manage.sh` → bootstrap/start/stop/restart/health/ingest/search
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
}
stop_manual() {
if is_running; then kill "$(cat "$PID_FILE")"; rm -f "$PID_FILE"; echo "Stopped service"; else echo "Service is not running"; fi
}
write_plist() {
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
}
stop_manual() {
if is_running; then kill "$(cat "$PID_FILE")"; rm -f "$PID_FILE"; echo "Stopped service"; else echo "Service is not running"; fi
}
write_plist() {
The skill clearly instructs the user to run shell commands and manage a local service, but it does not declare any tool scope such as allowed shell usage. That mismatch weakens security boundaries because an agent or reviewer cannot tell from the manifest that the skill requires command execution and persistence-related operations.
The skill explicitly includes a launchd LaunchAgent template, which is a persistence mechanism that causes code to keep running across sessions. Even though this is aligned with the skill's purpose, persistence materially increases risk because a compromised or misconfigured service would survive reboots and continue exposing local HTTP functionality.
- `scripts/rag-service.mjs` → HTTP service implementation
- `scripts/manage.sh` → bootstrap/start/stop/restart/health/ingest/search
- `references/launchd.plist.template` → macOS LaunchAgent template
## Prerequisites
The quick-start instructions direct the user to install a launchd agent, which establishes persistent execution on macOS. Persistence is security-relevant because it extends the lifetime of the service and any associated exposure, making accidental or malicious misuse harder to notice and remove.
scripts/manage.sh bootstrap
scripts/manage.sh install-launchd # writes plist, inspect once
scripts/manage.sh start
scripts/manage.sh health
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.
# 3) verify health
scripts/manage.sh health
# 4) create tiny test corpus
mkdir -p ./docs
cat > ./docs/sample.md <<'EOF'
Zvec + Ollama enables local semantic search.