T09 · Insecure Skill Coding Practices
- Location
SKILL.md:42- Finding
Plaintext Communication Archives Created Without Enforced Access Controls
- Content
View full analysis
> "$INDEX_FILE" ``` ```bash ARCHIVE_DIR="$HOME/.pilot/archive" FILE_INDEX="$ARCHIVE_DIR/file-index.jsonl" pilotctl --json received | jq -c '.received[] | {timestamp, from, filename, size, port, indexed_at: (now | todate)}' >> "$FILE_INDEX" ``` The workflow example repeats the same behavior: ```bash ARCHIVE_DIR="$HOME/.pilot/archive" MSG_INDEX="$ARCHIVE_DIR/message-index.jsonl" FILE_INDEX="$ARCHIVE_DIR/file-index.jsonl" mkdir -p "$ARCHIVE_DIR" # Index messages (get all, filter client-side) pilotctl --json inbox | jq -c '.messages[] | {timestamp, from, to, type, content, indexed_at: (now | todate)}' | tail -100 >> "$MSG_INDEX" # Index files (get all, filter client-side) pilotctl --json received | jq -c '.received[] | {timestamp, from, filename, size, port, indexed_at: (now | todate)}' | tail -100 >> "$FILE_INDEX" ``` ### Technical Analysis The skill archives complete message content and file-transfer metadata in unencrypted JSONL files under `~/.pilot/archive`. It creates the directory with `mkdir -p` and creates archive files through shell redirection, but it does not enforce owner-only permissions. The resulting permissions depend on the invoking process's `umask`. On a system with a permissive `umask`, the archive directory or files may be readable by other local accounts or processes. The stored information includes: - Complete message contents - Sender and recipient identifiers - Message timestamps and types - Transferred filenames and sizes - Transfer port metadata - Communication relationsh ...[truncated 1652 chars]- Remediation
View remediation
