Back to skill

Security audit

clawphone

Security checks for vulnerabilities and agentic risk

Overview

This communication skill has a legitimate purpose, but its Direct messaging and local history behavior are under-scoped and under-disclosed for message privacy and authenticity.

Install only if you are comfortable with an early-stage messaging skill. Use ClawMesh for sensitive messages, avoid Direct P2P on untrusted networks, do not treat phone numbers as proof of identity, and assume sent message content may remain in the local phonebook database until manually removed.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (3)

T09 · Insecure Skill Coding Practices

Error
Location
adapter/direct.py:59
Finding

Unauthenticated and Unencrypted Direct Messaging Permits Sender Spoofing

Content
View full analysis
bool: """Synchronously send to the target address.""" if not address or ":" not in address: logger.warning(f"[{self.node_id}] Invalid address: {address}") return False host, port_str = address.split(":") port = int(port_str) try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(5.0) sock.connect((host, port)) data = json.dumps(payload, ensure_ascii=False).encode('utf-8') sock.sendall(data) sock.close() return True except Exception as e: logger.error(f"[{self.node_id}] Send failed to {address}: {e}") return False ``` A second DirectAdapter implementation also contains a potentially broader listener: ```python host = "0.0.0.0" self._server = await asyncio.start_server(self._handler, host, self.listen_port) actual_port = self._server.sockets[0].getsockname()[1] self._address = f"127.0.0.1:{actual_port}" ``` This appears at `adapter/clawphone.py:76-81`. Although the exported `start_direct_mode` currently imports the impl ...[truncated 2493 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
adapter/clawphone.py:330
Finding

Outgoing Message Contents Are Retained Indefinitely in a Plaintext SQLite Database

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
adapter/clawphone.py:178
Finding

Phone Identifiers Use a Non-Cryptographic PRNG Despite an Unpredictability Claim

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (21)

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The direct-mode API and docstring imply a localhost-only endpoint, but the actual listener in DirectAdapter.start binds to 0.0.0.0, exposing the service on all interfaces. Combined with unauthenticated JSON message handling, this can let other hosts on the network connect and inject messages unexpectedly, expanding the attack surface beyond what callers would reasonably expect.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The README instructs users to exchange addresses and use Direct P2P messaging, but the warning that Direct P2P transmits messages in plaintext appears later in a separate security section rather than adjacent to the usage flow. This can lead users to deploy or test the feature under the false assumption that message confidentiality is provided, exposing message contents and potentially peer addresses to interception on untrusted networks.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The skill explicitly describes instant messaging and local SQLite phonebook storage, but the documentation does not warn users that identifiers, contact mappings, metadata, and possibly message-related artifacts may be stored locally or exposed through network use. In a communications skill, missing privacy disclosures can lead users to deploy it in sensitive environments without understanding retention, visibility, or data-handling risks.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The top-level natural-language description is written entirely in Chinese and does not indicate that language is configurable or limited for a region-specific purpose. Under the policy, forcing a specific language without opt-in is a locale-policy concern.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The DirectAdapter send path opens a network connection and transmits JSON payloads, and the call flow includes user message content in that payload. While there is internal logging on failure, there is no confirmation prompt, user-facing notice, or explanatory comment/docstring warning that message data will be sent over the network.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The code comments state DirectAdapter.start/send are synchronous, but the in-file DirectAdapter implementation defines them as async. In start_direct_mode and call, these methods are invoked without awaiting, which can cause messages not to be sent, adapters not to start correctly, and security assumptions about connectivity or delivery to silently fail.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

The send method opens a TCP connection and transmits the provided payload to a target address, which is a network operation that may send user or system data. While errors are logged, there is no confirmation prompt, user-facing notice, or explanatory comment/docstring warning about this transmission behavior.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

User-facing strings, prompts, and the top-level description are all in Chinese, and the script provides no option to select another language. This creates a natural-language policy concern because the skill imposes a specific language without user opt-in or justification.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
82% confidence
Finding

This code collects a peer phone number and network address, then uses them to establish direct communication and later send message content. Although the script prints operational status, it does not warn users that their messages and addressing information will be transmitted over a direct peer-to-peer network connection.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The docstring and user-facing text are written entirely in Chinese, and the script presents itself as a general quick demo rather than a region-specific or compliance-constrained tool. There is no indication that language selection is optional or that Chinese is required, which can violate a language/locale policy requiring user choice or explicit justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The file contains Chinese-only natural-language strings in the module docstring, comments, and all user-facing print output, such as the title and status messages. Under the policy rule, forcing a specific language without user opt-in is a natural-language policy violation unless the locale restriction is explicitly documented and justified, which is not present here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

This markdown file contains natural-language release notes primarily in Chinese for multiple entries, while the surrounding boilerplate is in English. Under the stated policy, forcing a specific language without user opt-in or documented regional justification is a locale-policy issue.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
94% confidence
Finding

The natural-language content of the skill README is presented only in Chinese, which effectively forces a specific language for users reading the documentation. Under the stated policy, locale or language constraints should be offered as a choice or clearly justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

SQP-3 applies to all file types and covers language or locale policy violations. This skill file presents all user-facing instructions in Chinese and does not mention that Chinese is required, optional, or user-selectable, which can amount to forcing a specific language without opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The user-facing natural-language description in the module docstring is written only in Chinese and does not offer any language choice or explain a locale-specific constraint. Under the policy, forcing a specific language without opt-in can be a language/locale policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The module docstring and comments are written entirely in Chinese, which imposes a specific language for user-visible descriptive text without any opt-in or alternative locale. Under the stated policy, forcing a language without user choice can be a natural-language policy violation unless clearly justified as region-specific.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The manifest description is written entirely in Chinese, which can impose a language expectation on users without offering any language or locale choice. The policy specifically calls for flagging language or locale constraints when they are not opt-in or otherwise justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The module docstring is written entirely in Chinese, indicating a language-specific skill description without any visible user opt-in or explanation that the skill is intended only for a Chinese-speaking or region-specific context. This matches the language/locale policy category because it imposes a specific language by default in the skill's natural-language content.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The manifest and input descriptions are written in Chinese throughout, but there is no indication that the skill is region-specific or that users can opt into a preferred language. This can violate a language/locale policy when skills are expected to be accessible without forcing a specific language by default.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

This Python file contains user-facing natural-language strings exclusively in Chinese, including the module docstring and printed test output. The file does not offer any language or locale choice or document that the skill is intentionally limited to Chinese, which can violate a language-choice policy.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The module docstring and several user-facing log messages are written entirely in Chinese, which imposes a specific language on users or operators without any opt-in or indication that the skill is intentionally region-specific. This matches the policy category for language or locale constraints expressed in natural-language content.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.