Back to skill

Security audit

alibabacloud-website-malware-check

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent read-only website malware scanner, but it needs review because it uses configured Alibaba Cloud credentials and has unsafe scan defaults around TLS and HTTP dependencies.

Install only if you are comfortable with the skill using your configured Alibaba Cloud CLI credentials for read-only identity, Security Center, and WAF queries. Run it from a clean environment without ambient HTTP credentials, update the pinned HTTP dependency, and treat any result marked as TLS verification downgraded as untrusted until rechecked with valid certificates.

Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (8)

Tp4

High
Category
MCP Tool Poisoning
Confidence
84% confidence
Finding
The skill claims best-effort cloud corroboration and read-only website investigation, but the documented behavior expands into identity discovery via STS, broader probing, header collection, and deep source inspection, while the finding indicates the claimed SAS/WAF corroboration may not actually be implemented. This mismatch is dangerous because operators may rely on the description for trust and approval decisions, yet the real behavior touches cloud identity context and performs broader reconnaissance than advertised.

Context-Inappropriate Capability

Medium
Confidence
84% confidence
Finding
The file adds cloud caller-identity and role-session inspection capabilities that are not necessary for a website-malware investigation skill. In an agent/skill environment, unrelated identity-enumeration logic expands access scope and can expose account metadata or enable unintended cloud reconnaissance beyond the user’s stated task.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
resp = requests.get(url, headers=headers_req, timeout=timeout,
                            allow_redirects=True, verify=True)
    except requests.exceptions.SSLError:
        # Misconfigured certificates: retry once without verification and
        # flag the downgrade (same policy as probe_fetch).
        try:
            resp = requests.get(url, headers=headers_req, timeout=timeout,
Confidence
95% confidence
Finding
On TLS verification failure, the tool autonomously retries the request with certificate verification disabled. That permits a man-in-the-middle attacker to spoof the target site and feed arbitrary response headers/body data to the probe, undermining integrity of the investigation and potentially masking or fabricating cloaking indicators. In this diagnostic context the risk is from false conclusions and trust of attacker-controlled content rather than direct system compromise.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
Certificate verification is enabled by default. Only when the TLS
    handshake itself fails (common on misconfigured customer sites) is the
    request retried once without verification, so the scan can still proceed;
    the downgrade is flagged via `tls_verify_downgraded` on the response.
    """
    headers = dict(BROWSER_HEADERS)
Confidence
92% confidence
Finding
The fetch logic autonomously retries HTTPS requests with TLS verification disabled after an `SSLError`. That allows a man-in-the-middle or hostile network appliance to tamper with page content returned to the scanner, producing false malware findings, hiding real indicators, or causing the tool to trust unauthenticated content.

Known Vulnerable Dependency: requests==2.32.3 — 4 advisory(ies): CVE-2024-47081 (Requests vulnerable to .netrc credentials leak via malicious URLs); CVE-2026-25645 (Requests has Insecure Temp File Reuse in its extract_zipped_paths() utility func); CVE-2024-47081 (Requests vulnerable to .netrc credentials leak via malicious URLs) +1 more

Medium
Category
Supply Chain
Confidence
92% confidence
Finding
The requirements file pins requests to 2.32.3, and the static analysis indicates this version is affected by published advisories, including a .netrc credential leak via malicious URLs. In a security investigation skill that performs outbound HTTP requests against potentially attacker-controlled websites, using a vulnerable HTTP client is more dangerous because crafted targets could trigger credential leakage or other unsafe library behavior during analysis.

Unsafe Defaults

Medium
Category
Tool Misuse
Content
# verification so the comparison can still run; flag the downgrade.
        try:
            resp = requests.get(url, headers=headers, timeout=timeout,
                                allow_redirects=True, verify=False)
            tls_downgraded = True
        except requests.exceptions.RequestException as exc:
            return {"ua": ua_name, "referer": referer_name, "ok": False,
Confidence
98% confidence
Finding
This code explicitly performs an HTTPS GET with verify=False after an SSLError, disabling certificate validation. An active network attacker can intercept or alter responses, causing the malware/cloaking detector to compare forged content and produce inaccurate results; because the tool follows redirects, the attacker can also influence the apparent final URL and observed redirect behavior. The skill's read-only purpose reduces impact to integrity/confidentiality of the scan, but does not eliminate the security weakness.

Unsafe Defaults

Medium
Category
Tool Misuse
Content
# flag the downgrade (same policy as probe_fetch).
        try:
            resp = requests.get(url, headers=headers_req, timeout=timeout,
                                allow_redirects=True, verify=False)
            tls_downgraded = True
        except requests.exceptions.RequestException as exc:
            print(f"Error: failed to fetch {url}: {exc}", file=sys.stderr)
Confidence
98% confidence
Finding
The headers subcommand also retries with verify=False, so any returned headers and final URL may come from an attacker presenting an invalid certificate. That can mislead defenders during incident investigation, especially if they rely on response headers or redirect chains to assess compromise or WAF behavior. The surrounding SSRF protections do not mitigate this transport-layer trust downgrade.

Unsafe Defaults

Medium
Category
Tool Misuse
Content
except requests.exceptions.SSLError:
        try:
            resp = requests.get(url, headers=headers, timeout=timeout,
                                allow_redirects=True, verify=False)
            resp.tls_verify_downgraded = True
            return resp
        except requests.exceptions.RequestException as exc:
Confidence
97% confidence
Finding
Using `verify=False` disables server certificate validation, so the tool may retrieve attacker-controlled content while believing it is inspecting the target site. In a malware-investigation skill, that is especially risky because conclusions are based entirely on fetched HTML/JS; unauthenticated content can skew detection, leak trust to malicious redirects, and corrupt forensic results.

Static analysis

Detected: suspicious.dynamic_code_execution, suspicious.insecure_tls_verification

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
scripts/website_malware_check.py:103

HTTPS certificate verification is disabled.

Warn
Code
suspicious.insecure_tls_verification
Location
scripts/multi_ua_probe.py:197

HTTPS certificate verification is disabled.

Warn
Code
suspicious.insecure_tls_verification
Location
scripts/website_malware_check.py:235