T09 · Insecure Skill Coding Practices
- Location
SKILL.md:29- Finding
Network-Exposed Data API Without Documented Authentication
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 29 and 46–75
Vulnerability Type: Insecure network binding and missing access-control guidance
Risk Level: MediumVulnerable code snippet:
bash uvicorn app.main:app --host 0.0.0.0 --port 8000The following documented API operations do not include authentication credentials:
bash curl "http://127.0.0.1:8000/api/v1/sync_status" curl -X POST "http://127.0.0.1:8000/api/v1/trigger_sync" curl "http://127.0.0.1:8000/api/v1/topics?group_id=GROUP_ID&limit=50&offset=0" curl "http://127.0.0.1:8000/api/v1/groups/all" curl "http://127.0.0.1:8000/api/v1/documents?group_id=GROUP_ID&limit=50" curl "http://127.0.0.1:8000/api/v1/search_documents?q=KEYWORD&group_id=GROUP_ID"Technical Analysis
The documented startup command binds the API service to
0.0.0.0, causing it to listen on every available network interface rather than only the loopback interface. Although the example client requests use127.0.0.1, this does not restrict remote access to a server listening on all interfaces.The documented endpoints expose synchronization state, group metadata, stored topics, downloaded documents, and document-search functionality. They also include a state-changing endpoint that triggers synchronization. No authentication or authorization mechanism is shown in the audited Skill documentation.
If the underlying API lacks controls not visible in this repository, any network client capable of reaching port 8000 could invoke these endpoints. The repository contains only Skill documentation and agent metadata, so the server implementation could not be inspected to determine whether it independently enforces access controls.
Attack Path
- A user follows the documented command and starts Uvicorn with
--host 0.0.0.0. - Port 8000 becomes reachable through any host interface permitted by local firewall and network policy.
- A network-adjace ...[truncated 1234 chars]
- A user follows the documented command and starts Uvicorn with
- Remediation
View remediation
Remediation Suggestions
-
Change the default startup command to bind only to the loopback interface:
bash uvicorn app.main:app --host 127.0.0.1 --port 8000 -
Require strong authentication for every API endpoint. Use short-lived tokens or another established authentication mechanism rather than static credentials embedded in the Skill.
-
Enforce server-side authorization for each group and document operation. Do not rely on the client or agent to restrict requested group identifiers.
-
Apply stricter authorization, rate limiting, and audit logging to
POST /api/v1/trigger_sync. -
If remote access is required, place the API behind a secured reverse proxy with TLS, authentication, network allowlisting, and request-size and rate limits.
-
Configure host firewall rules so port 8000 is not reachable from untrusted networks.
-
Document the API's authentication requirements in every
curlexample and avoid presenting unauthenticated commands as a secure production configuration. -
Add automated tests confirming that anonymous requests to content and synchronization endpoints are rejected.
-
