T09 · Insecure Skill Coding Practices
- Location
SKILL.md:116- Finding
Duplicate Authenticated POST Request in TV Season Example
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 116–122
Vulnerability Type: Duplicate state-changing API request caused by an extra URL operand
Risk Level: Mediumsh curl -s -X POST \ -H "X-Api-Key: $OVERSEERR_API_KEY" \ -H "Content-Type: application/json" \ "$OVERSEERR_URL/api/v1/request" \ "$OVERSEERR_URL/api/v1/request" \ -d '{"mediaType":"tv","mediaId":71912,"seasons":[2]}'Technical Analysis
The
curlcommand supplies the same request endpoint twice.curlprocesses multiple URL operands as separate transfers, while thePOSTmethod, authentication header, content type, and request body apply to both transfers. Following this documented example can therefore send two identical authenticated, state-changing requests to Overseerr.This behavior contradicts the skill's duplicate-prevention workflow. Although Overseerr may reject the second request, the command cannot safely rely on server-side deduplication. The use of
-salso suppresses progress and error details, potentially making the duplicate operation less apparent to the user or agent.Attack Path
- A user asks the skill to request a specific television season.
- The agent follows the documented TV season example.
curlprocesses both identical URL operands.- Two authenticated
POST /api/v1/requestoperations are sent with the same media and season data. - If the server or downstream integrations do not enforce atomic deduplication, both operations may trigger request processing or related side effects.
Impact Assessment
The issue does not grant an attacker additional privileges beyond those already associated with
OVERSEERR_API_KEY. Its scope is limited to the configured Overseerr instance and connected media-management workflows.Potential consequences include duplicate media requests, repeated notifications, duplicate downstream Sonarr or Radarr actions, unnecessary API usage, rate-limit c ...[truncated 149 chars]
- Remediation
View remediation
Remediation Suggestions
Remove the duplicate URL operand so the command performs exactly one state-changing request:
sh curl --fail-with-body -sS -X POST \ -H "X-Api-Key: $OVERSEERR_API_KEY" \ -H "Content-Type: application/json" \ "$OVERSEERR_URL/api/v1/request" \ -d '{"mediaType":"tv","mediaId":71912,"seasons":[2]}'Additionally:
- Check the media's availability and request status before submitting the request.
- Validate the HTTP status and response body rather than assuming the operation succeeded.
- Handle duplicate-request responses explicitly and report them as already requested.
- Use an idempotency mechanism if supported by the API.
- Add automated documentation or command tests that verify each mutation example contains exactly one endpoint operand.
