T09 · Insecure Skill Coding Practices
- Location
SKILL.md:46- Finding
Plaintext Storage and Disclosure of Personal Communications
- Content
View full analysis
", "ts": datetime.datetime.utcnow().isoformat() + "Z", "chat_id": "", "chat_name": "", "chat_type": "direct", # or "group" "sender_name": "", "sender_phone": "", "body": "", "answered": False, "answered_at": None }) with open(INBOX, "w") as f: json.dump(data, f, indent=2) ``` The message-query functionality also prints message contents and identifiers: ```python for m in sorted(unanswered, key=lambda x: x["ts"]): ts = datetime.fromisoformat(m["ts"].replace("Z", "+00:00")).strftime("%d/%m %H:%M") print(f"📩 {m['sender_name']} | {m['chat_name']} | {ts}") print(f" > {m['body'][:100]}") print(f" Message ID: {m['id']}") ``` The heartbeat integration similarly emits message content: ```python if unanswered: # Alert Netanel or handle inline for m in unanswered: print(f"⚠️ לא ענינו ל-{m['sender_name']}: {m['body'][:80]}") ``` ### Technical Analysis The Skill instructs the agent to store sender names, telephone numbers, chat identifiers, message identifiers, and private message bodies in an unencrypted JSON file at a predictable, fixed filesystem path. It does not specify restrictive directory or file permissions, ownership verification, access-control checks, encryption, or output redaction. The query and heartbeat examples print private message excerpts. If standard output is collected by service logs, monitoring systems, terminal history, or heartbeat infrastructure, this creates an ...[truncated 1487 chars]- Remediation
View remediation
