Back to skill

Security audit

Broken Link Checker

Security checks for vulnerabilities and agentic risk

Overview

The skill is a simple broken-link checker, but it accepts arbitrary HTTP URLs and could be used to probe local or internal network services.

Review before installing if the skill may run on machines with access to private services, development servers, VPNs, or cloud metadata endpoints. It should ideally parse URLs and block loopback, private, link-local, reserved, and localhost destinations before use.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
index.js:4
Finding

Unrestricted URL Requests Enable Server-Side Request Forgery and Internal Network Probing

Content
View full analysis
{ const protocol = url.startsWith('https') ? https : http; const req = protocol.request(url, { method: 'HEAD', timeout: 5000 }, (res) => { resolve({ url, valid: res.statusCode >= 200 && res.statusCode < 400, status: res.statusCode }); }); req.on('error', (err) => { resolve({ url, valid: false, error: err.message }); }); req.on('timeout', () => { req.destroy(); resolve({ url, valid: false, error: 'timeout' }); }); req.end(); }); } async function main() { const args = process.argv.slice(2); const urls = args.filter(arg => arg.startsWith('http')); ``` ### Technical Analysis The Skill performs network requests to user-controlled URLs without enforcing its documented restriction to external HTTP or HTTPS resources. The only input check is whether the string begins with `http`, which does not prevent requests to loopback, private, link-local, reserved, or internal network destinations. Consequently, inputs such as the following may be requested from the execution host: ```text http://127.0.0.1:8080/ http://localhost:3000/ http://10.0.0.1/ http://169.254.169.254/ http://[::1]/ ``` The application returns the HTTP status code or connection error for each target. These results can disclose whether internal hosts, ports, and services are reachable. DNS names are also unrestricted, so an attacker-controlled hostname could resolve to an internal address or potentially use DNS rebinding techniques. Using the `HEAD` method reduces response-body disclosure but does not eliminate the vulnerability. Status codes, errors, and response timing still pr ...[truncated 1664 chars]
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep

Static analysis

No suspicious patterns detected.