T09 · Insecure Skill Coding Practices
Warning
- Location
- scripts/read_messages.py:14
- Finding
- Unauthenticated Participant Identity Enables Message Disclosure, Spoofing, and Suppression## Vulnerability Details **File Location**: `scripts/read_messages.py:14-30, 34-35`; `scripts/send_message.py:11-31, 35-39` **Vulnerability Type**: Missing authentication and authorization **Risk Level**: Medium ### Vulnerable Code `scripts/read_messages.py:14-30`: ```python def read_messages(my_name, mark_read=True): if not os.path.exists(CHAT_FILE): print("📭 No messages yet") return [] with open(CHAT_FILE, "r") as f: chat = json.load(f) # Update last check time chat["lastCheck"] = datetime.now().isoformat() # Filter unread messages for me my_messages = [] for msg in chat["messages"]: if msg["to"] == my_name and not msg["read"]: my_messages.append(msg) if mark_read: msg["read"] = True # Save read status with open(CHAT_FILE, "w") as f: json.dump(chat, f, indent=2) return my_messages ``` `scripts/read_messages.py:34-35`: ```python my_name = sys.argv[1] messages = read_messages(my_name) ``` `scripts/send_message.py:11-31`: ```python def send_message(from_name, to_name, message): # Load or create chat file if os.path.exists(CHAT_FILE): with open(CHAT_FILE, "r") as f: chat = json.load(f) else: chat = {"messages": [], "lastCheck": datetime.now().isoformat()} # Add new message msg_id = len(chat["messages"]) + 1 chat["messages"].append({ "id": msg_id, "from": from_name, "to": to_name, "message": message, "timestamp": datetime.now().isoformat(), "read": False }) # Save os.makedirs(os.path.dirname(CHAT_FILE), exist_ok=True) with open(CHAT_FILE, "w") as f: json.dump(chat, f, indent=2) ``` `scripts/send_message.py:35-39`: ```python from_name = sys.argv[1] to_n ...[truncated 2382 chars]
- Remediation
- ## Remediation Suggestions 1. Replace caller-provided display names as identity credentials with authenticated participant identities. 2. Issue each participant a protected credential or use operating-system-backed identity and access controls. 3. Authorize every read operation against the authenticated recipient rather than an arbitrary `my_name` argument. 4. Cryptographically sign messages or protect the store with authenticated IPC so recipients can verify sender identity and message integrity. 5. Separate participant mailboxes and apply restrictive permissions where participants do not fully trust one another. 6. Create the workspace directory and chat file with owner-only permissions, such as directory mode `0700` and file mode `0600`, where compatible with the intended sharing model. 7. Avoid marking messages as read until the authenticated recipient has successfully processed them. Consider explicit acknowledgement identifiers. 8. Document that, without participant isolation, all processes with access to the shared file belong to the same trust boundary.
