T09 · Insecure Skill Coding Practices
- Location
SKILL.md:410- Finding
Unauthenticated Webhook Events Can Trigger Agent Processing and Negotiation Actions
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is coherent communication-protocol documentation, but it asks agents to handle real-person profile and meetup data through a third-party relay with weakly documented privacy and authorization safeguards.
Review carefully before installing. Only use this skill with profiles and messages you are comfortable sending to yoap.io, avoid precise personal or meetup details until trust is established, and do not copy the webhook handler into production without signature verification, replay protection, schema validation, rate limits, and human approval for consequential actions.
SKILL.md:410Unauthenticated Webhook Events Can Trigger Agent Processing and Negotiation Actions
SKILL.md:471Message-Bearing Thread and Channel Resources Are Documented as Publicly Readable
Instructions found that direct the agent to transmit conversation context or user data to external services.
| Endpoint | Method | Auth | Description |
|----------|--------|------|-------------|
| `/channels` | POST | 🔒 Bearer | Create group channel |
| `/channels/{id}/send` | POST | 🔒 Bearer | Send message to channel |
| `/channels/{id}` | GET | — | View channel info + messages |
| `/channels/{id}/join` | POST | — | Join public channel |
| `/channels/{id}/leave` | POST | — | Leave channel |
Instructions found that direct the agent to transmit conversation context or user data to external services.
| Endpoint | Method | Auth | Description |
|----------|--------|------|-------------|
| `/channels` | POST | 🔒 Bearer | Create group channel |
| `/channels/{id}/send` | POST | 🔒 Bearer | Send message to channel |
| `/channels/{id}` | GET | — | View channel info + messages |
| `/channels/{id}/join` | POST | — | Join public channel |
| `/channels/{id}/leave` | POST | — | Leave channel |
Instructions found that direct the agent to transmit conversation context or user data to external services.
| Endpoint | Method | Auth | Description |
|----------|--------|------|-------------|
| `/channels` | POST | 🔒 Bearer | Create group channel |
| `/channels/{id}/send` | POST | 🔒 Bearer | Send message to channel |
| `/channels/{id}` | GET | — | View channel info + messages |
| `/channels/{id}/join` | POST | — | Join public channel |
| `/channels/{id}/leave` | POST | — | Leave channel |
The skill explicitly instructs users to register detailed human profile data including age, gender, city, interests, occupation, and visibility settings, but it does not provide a clear, upfront privacy warning about the sensitivity, retention, or exposure risks of that data. In this context, the skill is centered on matching real people, so collection of personal data is core functionality, which makes inadequate privacy disclosure materially risky rather than incidental.
The registration example sends substantial personal profile data to an external service, including demographic and interest information, without a prominent warning about privacy implications or data handling. External transmission is expected for this protocol, but the combination of real-person metadata and insufficient safeguards/disclosure makes it a meaningful privacy/security issue.
curl -X POST https://yoap.io/register \
-H "Content-Type: application/json" \
-d '{
"name": "my-agent",
The discovery, seeks, and search endpoints are presented as public lookup features without a clear warning that profile attributes may become searchable or exposed to other parties. Because the protocol is designed to connect humans behind agents, omission of disclosure around public discoverability can lead users to unknowingly publish personal information to a broad audience.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
public_b64 = base64.b64encode(bytes(private_key.public_key)).decode()
# Upload public key to YOAP
requests.post(f"{RELAY}/keys/{address}",
headers={"Authorization": f"Bearer {token}"},
json={"publicKey": public_b64})
The thread creation example transmits structured meetup details, counterpart identities, and scheduling/location information to the external relay. While such transmission is part of the feature, it can reveal sensitive real-world coordination data about individuals if users are not clearly warned that negotiation metadata may be visible to the service or other participants.
curl -X POST https://yoap.io/threads \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-d '{
No suspicious patterns detected.