T09 · Insecure Skill Coding Practices
- Location
scripts/influencer_report.py:200- Finding
Analysis Results Retrieved Through an Undocumented Unauthenticated Endpoint
- Content
View full analysis
Optional[dict]: """Poll webhook results endpoint for task completion.""" webhook_url = f"https://demo.memories-ai.org/webhooks/memories/result/{task_id}" print(f"[Poll] Waiting for task {task_id}...") for attempt in range(int(POLL_TIMEOUT / POLL_INTERVAL)): time.sleep(POLL_INTERVAL) try: resp = requests.get(webhook_url, timeout=15) ``` ### Technical Analysis The Skill submits videos to authenticated Memories.ai API endpoints but retrieves the resulting transcript and visual analysis from a separate `demo.memories-ai.org` endpoint. The polling request does not include an authorization credential or other proof that the requesting user owns the task. Consequently, access control appears to depend on possession and confidentiality of `task_id`. Task identifiers are embedded in URL paths and printed to standard output elsewhere in the workflow. URL paths and console output may be captured by browser history, reverse proxies, observability systems, terminal logs, CI logs, or support diagnostics. The separate result-service domain is also not disclosed in `SKILL.md`, which only documents the Memories.ai V1 and V2 API endpoints. This creates an unexpected trust boundary for transcript and visual-analysis data. ### Attack Path 1. A user submits a video for MAI transcript analysis. 2. The API returns a task identifier, which the script prints to its output. 3. The script constructs the result URL as: `https://demo.memories-ai.org/webhooks/memories/result/{task_id}`. 4. The task identifier is exposed through shared console output, application logs, proxy logs, monitoring data, or another disclosure channel. 5. A party possessing the identifier se ...[truncated 892 chars]- Remediation
View remediation
