Back to skill

Security audit

Domain Research Tool

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent domain-research tool, but its generated HTML reports can render untrusted domain data without escaping, and its network probing behavior needs clearer user control and disclosure.

Review before installing. Use this only for domains/IPs you are authorized to investigate, avoid sensitive unreleased/internal targets unless you accept disclosure to external DNS/RDAP/WHOIS/resolver services, and be careful opening generated HTML reports from attacker-controlled domains until output escaping is fixed. Install dependencies in an isolated environment with pinned versions from a trusted index.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/generate_report.py:260
Finding

Stored HTML and Script Injection in Generated Reports

Content
View full analysis
str: records = dns_data.get("records", {}) errors = dns_data.get("errors", []) if not records and errors: return "".join(f'
{e}
' for e in errors) rows = "" for rtype in ["A", "AAAA", "NS", "MX", "CNAME", "TXT", "SOA", "CAA", "SRV", "PTR"]: vals = records.get(rtype) if vals is None and rtype == "A": rows += f'{rtype}NXDOMAIN — domain does not exist' break if vals is None: continue if vals: display = vals[:3] extra = f" (+{len(vals) - 3} more)" if len(vals) > 3 else "" rows += f""" {rtype} {len(vals)} record(s) {", ".join(display)}{extra} """ else: rows += f""" {rtype} — No records """ return f""" {rows}
TypeCountValues
""" ``` The same unsafe interpolation pattern also appears in report fields at lines 50, 109, 193, 208, 304, 339, 352, and 435, including the domain, highlights, availability findings, RDAP entities, WHOIS er ...[truncated 2360 chars]
Remediation
View remediation
str: return escape(str(value), quote=True) ``` 2. Escape all DNS, RDAP, WHOIS, error, domain, subdomain, certificate, and summary values. Use `quote=True` for values placed in attributes. 3. Prefer a maintained template engine with automatic escaping enabled rather than manually constructing HTML with f-strings. 4. Validate imported JSON against a strict schema, including expected types, maximum string lengths, and permitted fields. 5. Add a restrictive Content Security Policy, for example by disallowing inline scripts and event handlers. Move the existing inline tab script into a separately generated static script if necessary. 6. Add regression tests covering payloads in text and attribute contexts, including: ```text " onmouseover="alert(1) ``` 7. Treat escaping as a defense required at the final HTML output boundary, even when upstream data has already been validated. ]]>

T08 · Insecure Dependencies

Warning
Location
SKILL.md:25
Finding

Unpinned Dependencies and Optional Use of a Third-Party Package Mirror

Content
View full analysis
Remediation
View remediation
python-whois== requests== cryptography== ``` 2. Generate and verify cryptographic hashes for every package and transitive dependency, then require them during installation: ```bash python -m pip install --require-hashes -r requirements.txt ``` 3. Prefer the official Python Package Index as the documented default. If a mirror is required, document its trust implications and ensure package hashes are independently verified. 4. Review and update locked versions on a controlled schedule using dependency vulnerability scanning. 5. Instruct users to install dependencies inside an isolated virtual environment rather than globally or with administrative privileges. 6. Consider publishing a software bill of materials and documenting the tested Python and dependency versions. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (11)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

整体上,这段代码的大部分功能与“域名研究工具”的声明高度一致:包含 RDAP、WHOIS、DNS 多记录类型查询、SSL 证书检查、可用性启发式判断、多解析器检测、子域名枚举和批处理,主用途没有偏离。但存在两处实质性不一致。第一,声明明确提到“交互式 HTML 可视化报告”,而代码中没有任何 HTML 生成、模板渲染、前端可视化或报告文件输出逻辑,只有 JSON/text 输出,因此这是明显的过度声明。第二,代码支持对 IP 进行 reverse DNS/PTR 查询(命令行示例和 --type reverse),这属于未声明的额外能力。按照评估标准,未声明能力和关键声明功能缺失都应判为 mismatch。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

声明描述的是一个完整的域名研究与查询工具,而这段代码的实际职责是消费现成 JSON 数据并渲染 HTML 报告。虽然生成的报告界面包含 RDAP、WHOIS、DNS、SSL、子域名、解析器等展示区域,但这些内容都来自输入数据,代码本身没有进行网络查询、域名分析或检测操作。因此其实际主功能仅覆盖声明中的“交互式 HTML 可视化报告”这一子能力,不能代表整个声明的全功能工具。就这段已提供代码而言,描述明显夸大了实现范围,属于描述与行为不匹配。

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding

The skill instructs execution of scripts that perform network access and write output files, but the manifest does not declare any tool scope or permissions boundaries. This creates an authorization ambiguity where the agent may be allowed to read files, write reports, and make external requests without an explicit user-visible capability declaration, increasing the chance of overbroad execution.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The trigger list includes broad phrases such as domain lookup, WHOIS, DNS查询, and 域名分析, which can match ordinary conversation and cause unintended invocation. In a network-enabled skill, accidental activation can leak user-provided domains, IPs, or investigative targets to external services and lead to unanticipated file/report generation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill repeatedly instructs RDAP/WHOIS/DNS/SSL queries against third-party infrastructure but does not clearly warn users that their queried domains, IPs, and investigation interests will be disclosed to external registries, resolvers, certificate endpoints, or bootstrap services. This creates a privacy and operational security risk, especially when researching internal, sensitive, or unreleased domains.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/domain_protocols.md (reported line 30)May include surrounding context.

md
### RDAP Bootstrap 流程

1. 解析域名的 TLD
2. 查询 IANA RDAP Bootstrap (https://data.iana.org/rdap/)
3. 获取该 TLD 的 RDAP 服务 URL
4. 向该 URL 发起 domain 查询
5. 解析 JSON 响应

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The subdomain enumeration routine performs concurrent external DNS probes against many common hostnames without any explicit user-facing warning, confirmation, throttling guidance, or scope restrictions. In an agent setting, this can turn a seemingly simple domain lookup into active reconnaissance against third-party infrastructure, creating abuse, privacy, and policy-compliance risk—especially because the skill context explicitly encourages broad domain research.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The script exposes reverse DNS/IP lookup behavior via the reverse mode and documents IP input in the CLI examples, but the skill metadata describes a domain-research tool focused on domains, DNS, WHOIS, RDAP, SSL, and subdomains. This capability expansion matters because it broadens the network-reconnaissance surface and can cause the agent to perform IP-based investigations users or platform policy may not expect from the declared skill scope.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The generated HTML hard-codes lang="zh-CN", which imposes a specific language/locale on all report output regardless of user preference. Under the policy, locale constraints should be user-selectable or clearly justified as region-specific, neither of which is present here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
98% confidence
Finding

This markdown file contains its substantive instructions and reference material in Chinese, but it does not indicate that the skill is China-region-specific or provide any user opt-in for language/locale. Under the policy for natural-language violations, forcing a specific language without user choice is reportable even in documentation files.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest advertises '交互式 HTML 可视化报告', suggesting HTML report generation as part of the skill's functionality. In this implementation, outputs are limited to JSON/text serialization and optional file writes, with no HTML generation or visualization logic present.

Content

No source excerpt is available for this finding.