T08 · Insecure Dependencies
- Location
scripts/check.py:2- Finding
Unpinned Third-Party Runtime Dependencies
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a legitimate domain-checking skill with optional LLM brainstorming, but users should notice that brainstorming uses OpenRouter and may send their project description to that service.
Install only if you are comfortable with DNS/whois lookups for checked domains and with brainstorm mode sending your description to OpenRouter using OPENROUTER_API_KEY. Avoid putting confidential product details, customer data, or secrets in brainstorm prompts, and prefer a locked dependency workflow if running it directly.
scripts/check.py:2Unpinned Third-Party Runtime Dependencies
scripts/check.py:129User-Controlled Rich Markup Enables Deceptive Terminal Output
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
)
try:
resp = httpx.post(
"https://openrouter.ai/api/v1/chat/completions",
headers={"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"},
json={
The skill description claims 'No API key required,' but the documented brainstorming feature requires OPENROUTER_API_KEY and external network access, creating a misleading description-to-behavior mismatch. This is dangerous because users and agent frameworks may trust the manifest's lower-risk presentation while the skill actually performs additional remote interactions and may prompt for or consume sensitive credentials.
The skill invokes a Python script that inherently uses shell, network, and environment capabilities, yet the manifest does not declare any tool scope or permissions boundary. This is dangerous because an agent or reviewer cannot accurately understand or constrain what the skill may access, increasing the chance of unintended network calls, subprocess execution, or environment-variable exposure during use.
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
def dns_check(domain: str, timeout: int = 3) -> str:
"""Return 'available', 'taken', or 'unknown'. Uses dig subprocess for reliable timeout."""
try:
result = subprocess.run(
["dig", "+short", "+time=2", "+tries=1", domain, "A"],
capture_output=True, text=True, timeout=timeout + 1
)
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
def whois_check(domain: str) -> str | None:
"""Optional whois cross-check. Returns 'available', 'taken', or None if whois unavailable."""
try:
result = subprocess.run(
["whois", domain],
capture_output=True, text=True, timeout=8
)
The skill metadata claims no API key is required, but the brainstorm path reads OPENROUTER_API_KEY and sends prompts to an external LLM service. This is dangerous because users may invoke the skill under false assumptions about credential use and network disclosure, weakening informed consent and trust boundaries.
The brainstorm feature sends user-provided descriptions to an external LLM service without a clear warning in the skill description. That is dangerous because users may include confidential product ideas, customer data, or internal project details, assuming the tool only performs domain lookups.
The skill accesses an environment credential for functionality that is ancillary to the advertised purpose and not clearly disclosed in the description. In agent ecosystems, undeclared credential access is risky because users may grant or expose secrets to a tool they believe is only doing local/network domain checks.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
)
try:
resp = httpx.post(
"https://openrouter.ai/api/v1/chat/completions",
headers={"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"},
json={
The documentation is internally inconsistent: top-level text says no API key is required while the brainstorm code path depends on OpenRouter credentials. This inconsistency is a security-relevant transparency issue because it can mislead users about external dependencies and data handling.
No suspicious patterns detected.