T05 · Unauthorized Access and Privilege Escalation
- Location
scripts/search_client.py:116- Finding
Bundled Client Exposes Undeclared Search and Synthesis Capabilities Beyond URL Extraction
- Content
View full analysis
Vulnerability Details
File Location:
scripts/search_client.py, lines 116–153, 178–269, and 286–337
Vulnerability Type: Excessive functionality and external data transmission beyond the Skill's declared purpose
Risk Level: MediumThe Skill manifest declares only extraction of readable content from user-provided URLs through the Tavily extraction endpoint. However, the canonical runtime client also exposes web search, academic search, hybrid search, Tavily search, Sonar model queries, multi-source retrieval, and AI synthesis.
Relevant code includes:
python def cmd_web(args: argparse.Namespace) -> None: api_key = get_api_key() data = aisa_post(api_key, "/scholar/search/web", { "query": args.query, "max_num_results": args.count, }) print_results(data, "Web Search") def cmd_scholar(args: argparse.Namespace) -> None: api_key = get_api_key() body: dict[str, Any] = { "query": args.query, "max_num_results": args.count, } if args.year_from: body["as_ylo"] = args.year_from if args.year_to: body["as_yhi"] = args.year_to data = aisa_post(api_key, "/scholar/search/scholar", body) print_results(data, "Scholar Search") def cmd_smart(args: argparse.Namespace) -> None: api_key = get_api_key() data = aisa_post(api_key, "/scholar/search/smart", { "query": args.query, "max_num_results": args.count, }) print_results(data, "Smart Search") def cmd_tavily(args: argparse.Namespace) -> None: api_key = get_api_key() body: dict[str, Any] = { "query": args.query, "max_results": args.count, "search_depth": args.depth, } if args.topic: body["topic"] = args.topic if args.time_range: body["time_range"] = args.time_range if args.include_answer: body["include_answer"] = True data = ...[truncated 7050 chars]- Remediation
View remediation
Remediation Suggestions
- Replace the bundled client with an extraction-only implementation exposing only the
/tavily/extractoperation. - Remove the
web,scholar,smart,tavily,sonar, andveritycommand registrations from this Skill. - Package broader search and synthesis functionality as separate Skills with accurate names, descriptions, permissions, and privacy disclosures.
- Document all externally transmitted fields, including URLs, queries, retrieved results, and synthesis payloads.
- Require explicit user consent before sending query text or aggregated results to an external service.
- Where supported by the service, use API credentials restricted to the extraction endpoint rather than a credential capable of invoking every AISA operation.
- Add automated tests that assert the extraction Skill can contact only the fixed AISA origin and the
/tavily/extractpath. - Add input limits for URL count and response size to reduce accidental credit consumption and resource exhaustion.
- Preserve HTTPS certificate validation and avoid allowing runtime overrides of the API origin without an explicit security review.
- Replace the bundled client with an extraction-only implementation exposing only the
