T05 · Unauthorized Access and Privilege Escalation
- Location
SKILL.md:4- Finding
Excessive Filesystem Permissions Violate Least Privilege
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill’s XCrawl API behavior is mostly disclosed and purpose-aligned, but it requests broad local file read/write/search tools that are not needed for URL mapping.
Review this skill before installing. Use it only for domains you are authorized to send to XCrawl, and be aware that the URL mapping request and API credential are sent to XCrawl’s service. The main concern is its overbroad local file permissions; a safer version would remove Write, Edit, and broad Grep access and narrowly read only ~/.xcrawl/config.json.
SKILL.md:4Excessive Filesystem Permissions Violate Least Privilege
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
---
name: xcrawl-map
description: Use this skill for XCrawl map tasks, including site URL discovery, regex filtering, scope estimation, and crawl planning before full-site crawling.
allowed-tools: Bash(curl:*) Bash(node:*) Read Write Edit Grep
metadata: {"version":"1.0.2","openclaw":{"skillKey":"xcrawl-map","homepage":"https://www.xcrawl.com/","requires":{"localFiles":["~/.xcrawl/config.json"],"anyBins":["curl","node"]},"apiKeySource":"local_config"}}
---
The skill instructs users to send site URLs and a bearer API credential to an external XCrawl service but does not clearly warn that user-provided targets and authentication data will leave the local environment. This creates a transparency and consent problem: users may unknowingly transmit sensitive internal URLs or reconnaissance targets to a third party.
The cURL example sends data to an external service using a bearer token loaded from local config, transmitting the mapping target to XCrawl. While expected for this integration, it is still a real data egress path that can expose sensitive URLs, internal scope details, and account-linked usage if users are not clearly informed.
API_KEY="$(node -e "const fs=require('fs');const p=process.env.HOME+'/.xcrawl/config.json';const k=JSON.parse(fs.readFileSync(p,'utf8')).XCRAWL_API_KEY||'';process.stdout.write(k)")"
curl -sS -X POST "https://run.xcrawl.com/v1/map" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${API_KEY}" \
-d '{"url":"https://example.com","filter":"/docs/.*","limit":2000,"include_subdomains":true,"ignore_query_parameters":false}'
This code performs an outbound HTTPS request to a third-party API and includes both the user-supplied URL and the API key in the request context. In a mapping/recon skill, that means potentially sensitive targets, internal hostnames, or confidential discovery scope can be disclosed externally if used without clear user consent and scope controls.
const fs=require("fs");
const apiKey=JSON.parse(fs.readFileSync(process.env.HOME+"/.xcrawl/config.json","utf8")).XCRAWL_API_KEY;
const body={url:"https://example.com",filter:"/docs/.*",limit:3000,include_subdomains:true,ignore_query_parameters:false};
fetch("https://run.xcrawl.com/v1/map",{
method:"POST",
headers:{"Content-Type":"application/json",Authorization:`Bearer ${apiKey}`},
body:JSON.stringify(body)
No suspicious patterns detected.