T08 · Insecure Dependencies
- Location
SKILL.md:42- Finding
Unpinned Third-Party Skill Installation Creates a Supply-Chain Risk
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is coherent for setting up a proposal-writing agent network, but it deserves Review because it installs unpinned helper skills and can route sensitive proposal content to external webhook and Slack integrations without enough scoping or user confirmation.
Review this skill before installing in a business environment. Pin and verify the dependent skills, use only hostname-safe prefixes, confirm the exact webhook and Slack destinations, avoid sending confidential proposal or pricing data unless approved, and remove ~/.pilot/setups/proposal-writer.json when the deployment is no longer needed.
SKILL.md:42Unpinned Third-Party Skill Installation Creates a Supply-Chain Risk
SKILL.md:39Unvalidated Deployment Prefix Can Be Interpreted as Shell Syntax
The README explicitly describes sending final proposal content to an external destination via webhook but does not warn users that sensitive proposal data, pricing, timelines, and client information may leave the private agent environment. In a proposal-writing workflow, this can lead to unintended disclosure of confidential business information if operators enable the bridge without understanding the external transmission boundary.
The trust model auto-approves communication once both sides exchange handshakes, with no manual verification step of identity or authorization described. In a multi-agent deployment that handles potentially sensitive proposal and pricing data, this lowers the barrier for misconfiguration or spoofed peer trust, which could expose internal data flows to unintended agents.
Agents are private by default. Each pair that communicates must exchange handshakes. When both sides send a handshake, trust is auto-approved -- no manual step needed.
# On drafter:
The documentation at L90 states that the reviewer 'receives the draft and submits,' and the earlier data flow at L29 describes final proposal submission to an external destination via webhook. However, the command at L91 uses pilotctl publish <your-prefix>-reviewer final-proposal ..., which targets the reviewer agent itself rather than an external submission path, contradicting the stated behavior.
The skill persists a setup manifest under ~/.pilot/setups/proposal-writer.json, creating durable local state that may include role, peer hostnames, communication topology, and workflow metadata. While this is not inherently malicious, undocumented persistence can expose operational details to other local processes or users and may outlive the user's expectations, especially in shared or managed environments.
pilotctl --json set-hostname -
**Step 4:** Write the setup manifest:
```bash
mkdir -p ~/.pilot/setups
cat > ~/.pilot/setups/proposal-writer.json << 'MANIFEST'
The skill explicitly configures pilot-webhook-bridge and pilot-slack-bridge, and documents reviewer-to-external submission over port 443, but it does not warn the user that proposal content, pricing, client details, or other sensitive business data may be transmitted to third-party services. In a proposal-writing workflow, those documents commonly contain confidential or regulated information, so omission of a clear disclosure and consent step can lead to unintended data exfiltration or policy violations.
No suspicious patterns detected.