T05 · Unauthorized Access and Privilege Escalation
- Location
SKILL.md:54- Finding
Generated agents receive an overprivileged full tool profile
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a mostly coherent project bootstrap workflow, but it asks agents to create repositories, change GitHub settings, post to Discord, and grant broad subagent tools without enough approval or scoping guidance.
Install only if you are comfortable with the agent making GitHub and Discord changes after your explicit review. Before using it, change generated agents to least-privilege tool allowlists, require confirmation before repo/ruleset/webhook/CI changes, use private Discord channels, minimize posted task and commit details, pin third-party GitHub Actions to reviewed commit SHAs, and require at least one human approval on protected branches.
SKILL.md:54Generated agents receive an overprivileged full tool profile
references/ci-cd-templates.md:83CI templates reference third-party GitHub Actions through mutable version tags
references/ci-cd-templates.md:135Recommended branch protection permits merges without independent approval
The description claims a broad project bootstrap skill covering new-project setup, agent-team design, GitHub repo setup, CI/CD pipeline creation, and Discord notifications. The supplied code does not perform those functions. Instead, it is a taskboard management CLI with pluggable backends: local JSON storage and GitHub Issues synchronization. Its GitHub use is limited to issue creation/updates/comments for tasks, not repository setup or pipeline provisioning. There is no code for creating repos, initializing source code structure, configuring CI/CD/TDD workflows, or sending Discord notifications. While task management is one component mentioned in the description, the overall declared purpose materially overstates and mischaracterizes the code’s actual primary behavior.
The skill instructs actions that can affect files, environment-backed credentials, networked services, and external systems, but it does not declare an explicit tool scope or permission boundary. In a project-bootstrap context, that omission is risky because the workflow includes repo creation, ruleset changes, webhook setup, and file generation, increasing the chance of overbroad execution without clear user-visible constraints.
The skill provides concrete instructions for creating repositories, applying branch protection, and configuring webhooks, but does not prominently warn that these actions modify external services and project state. In this context, that can lead to unintended repo creation, policy changes, or secret-bearing webhook setup by an agent acting without an explicit user approval checkpoint.
The Discord notification template transmits commit messages and author names to an external Discord webhook, which can leak internal development metadata to a third party. In a project-bootstrap skill, this is more dangerous because users may copy the template directly into new repositories without realizing that commit content and contributor identity are being exfiltrated outside GitHub.
The document instructs agents to send taskboard summaries and notifications to Discord, which is an external communication channel, without any guidance on data minimization, channel access control, or avoiding sensitive project details. In a multi-agent project bootstrap skill, task titles, notes, blockers, PR references, and architecture status can easily contain confidential roadmap, security, or operational information, so normalizing automatic posting increases the risk of unintended data exposure.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
print(f"⚠️ {config.get('token_env', 'GITHUB_TOKEN')} not set, GitHub sync disabled")
def _api(self, method: str, endpoint: str, data: dict = None) -> dict | list:
url = f"https://api.github.com/repos/{self.repo}/{endpoint}"
body = json.dumps(data).encode() if data else None
req = Request(url, data=body, method=method)
req.add_header("Authorization", f"token {self.token}")
No suspicious patterns detected.