Lp3
Medium
- Category
- MCP Least Privilege
- Confidence
- 70% confidence
- Finding
- Without declared permissions the skill's intent is opaque and cannot be validated.
Security audit
Security checks across malware telemetry and agentic risk
This skill gives an agent powerful Telegram account control, but the artifacts clearly disclose that access, its risks, and the expected safeguards.
Install only if you intend to let an agent operate a real Telegram user account. Keep the service on localhost or behind TLS, set TELETHON_AUTH_KEY before exposing it, use read-only or dry-run mode when testing, do not enable TELETHON_POST_TO_URL unless the endpoint is trusted, and require exact confirmation before any delete, admin, join, leave, or bulk action.
shift
[[ $# -gt 0 ]] || die "send: text required"
body=$(jq -n --arg chat "$chat" --arg text "$*" '{chat:$chat, text:$text}')
curl -fsS -X POST "${auth[@]}" -H 'Content-Type: application/json' \
-d "$body" "$URL/api/messages"
;;
sendfile)caption="$*"
body=$(jq -n --arg chat "$chat" --arg url "$url" --arg cap "$caption" \
'{chat:$chat, file_url:$url} + (if $cap == "" then {} else {text:$cap} end)')
curl -fsS -X POST "${auth[@]}" -H 'Content-Type: application/json' \
-d "$body" "$URL/api/messages"
;;
delete)[[ $# -gt 0 ]] || die "delete: at least one message id required"
ids=$(printf '%s\n' "$@" | jq -R 'tonumber' | jq -s '.')
body=$(jq -n --arg chat "$chat" --argjson ids "$ids" '{chat:$chat, message_ids:$ids}')
curl -fsS -X DELETE "${auth[@]}" -H 'Content-Type: application/json' \
-d "$body" "$URL/api/messages"
;;
*)- **Declared capabilities** (see `permissions:` in the frontmatter): `shell` (setup-only), `network` (runtime HTTP), and full Telegram account access. **Setup-only shell vs. runtime API is a hard line** — `docker run` / `docker compose` / `curl` in [references/setup.md](references/setup.md) are one-time operator commands to stand up the container; every runtime call this skill makes afterward is a plain HTTP request (`curl` as an HTTP client, or MCP), never a new shell/docker invocation against the host. - **Outbound HTTP** — every API call is a `curl`/HTTP request to the `telethon-plus` server (`$TELETHON_PLUS_URL`), and the server itself makes outbound calls to Telegram's MTProto servers and, when `file_url` is used, to whatever URL is given (see the SSRF note below). - **Drives a full-access Telegram user account** — read AND write AND admin, not a sandboxed bot. Any call this skill makes acts as the account owner (see "Authorized / responsible use" below for the account-level rules). - **Destructive / admin operations require explicit user confirmation** naming the exact target (chat, message IDs, user) before running — see the per-endpoint warnings in the API tables below (`DELETE /api/chats`, ban/kick/promote, bulk `DELETE /api/messages`). - **Deployment:** bind the server to `localhost`/loopback or put it behind TLS on a reverse proxy, set `TELETHON_AUTH_KEY` (empty = no auth, wide open), and never expose `/mcp/` or `/api/` to untrusted agents/networks — either surface hands out full account control. See [references/setup.md](references/setup.md) for the full deployment + auth guidance. ## Authorized / responsible use
- **Declared capabilities** (see `permissions:` in the frontmatter): `shell` (setup-only), `network` (runtime HTTP), and full Telegram account access. **Setup-only shell vs. runtime API is a hard line** — `docker run` / `docker compose` / `curl` in [references/setup.md](references/setup.md) are one-time operator commands to stand up the container; every runtime call this skill makes afterward is a plain HTTP request (`curl` as an HTTP client, or MCP), never a new shell/docker invocation against the host. - **Outbound HTTP** — every API call is a `curl`/HTTP request to the `telethon-plus` server (`$TELETHON_PLUS_URL`), and the server itself makes outbound calls to Telegram's MTProto servers and, when `file_url` is used, to whatever URL is given (see the SSRF note below). - **Drives a full-access Telegram user account** — read AND write AND admin, not a sandboxed bot. Any call this skill makes acts as the account owner (see "Authorized / responsible use" below for the account-level rules). - **Destructive / admin operations require explicit user confirmation** naming the exact target (chat, message IDs, user) before running — see the per-endpoint warnings in the API tables below (`DELETE /api/chats`, ban/kick/promote, bulk `DELETE /api/messages`). - **Deployment:** bind the server to `localhost`/loopback or put it behind TLS on a reverse proxy, set `TELETHON_AUTH_KEY` (empty = no auth, wide open), and never expose `/mcp/` or `/api/` to untrusted agents/networks — either surface hands out full account control. See [references/setup.md](references/setup.md) for the full deployment + auth guidance. ## Authorized / responsible use
- Only ever point this skill at an instance **the user runs and owns**, driving **the user's own account** (or an account they are explicitly authorized to operate). - **Do not** send spam, mass-DM strangers, scrape at volume, auto-join channels en masse, or run any automation that violates [Telegram's Terms of Service](https://telegram.org/tos) — that gets the account **banned** (the throttle layer reduces flood risk, it does not make abuse safe). - **Never** provision, escalate, or log in a new account from here. This skill is **consumer-only**: it talks to an already-running, already-authorized instance. First-time login is an operator-side step (see setup) and is out of scope for the agent. - Writes are destructive and act as the user. `DELETE /api/chats` is irreversible; deleting / editing messages and banning users are visible actions others see. Confirm intent before running writes on shared chats. - Never print, log, or echo the session string, `TELETHON_API_HASH`, `TELETHON_AUTH_KEY`, phone numbers, or message contents beyond what the task needs. ## When To Use
| Method + path | Body / params | What it does |
|---|---|---|
| `POST /api/messages/{id}/reactions` | `chat`, `emoji`, `big?` | React to a message |
| `DELETE /api/messages/{id}/reactions` | `chat` | Remove your reaction |
| `POST /api/messages/{id}/pin` | `chat`, `silent?`, `pm_oneside?` | Pin |
| `POST /api/messages/{id}/unpin` | `chat` | Unpin || Method + path | Body / params | What it does | |---|---|---| | `POST /api/chats` | `title`, `megagroup?` (default `true`) | Create a supergroup (`true`) or broadcast channel (`false`) | | `DELETE /api/chats` | `chat` | Delete a supergroup/channel you own — **irreversible** | | `POST /api/chats/join` | `chat` | Join a public channel/group | | `POST /api/chats/invite` | `invite` | Join a private chat via a `t.me/+hash` link | | `POST /api/chats/leave` | `chat` | Leave a channel/group |
64/64 vendors flagged this skill as clean.
No suspicious patterns detected.