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.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
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.

Content

Scanner excerpt · scripts/multi_ua_probe.py (reported line 358)May include surrounding context.

python
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,

Autonomous Decision Making

Medium
Category
Excessive Agency
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.

Content

Scanner excerpt · scripts/website_malware_check.py (reported line 222)May include surrounding context.

python
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)

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.

Content

No source excerpt is available for this finding.

Unsafe Defaults

Medium
Category
Tool Misuse
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.

Content

Scanner excerpt · scripts/multi_ua_probe.py (reported line 197)May include surrounding context.

python
# 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,

Unsafe Defaults

Medium
Category
Tool Misuse
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.

Content

Scanner excerpt · scripts/multi_ua_probe.py (reported line 362)May include surrounding context.

python
# 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)

Unsafe Defaults

Medium
Category
Tool Misuse
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.

Content

Scanner excerpt · scripts/website_malware_check.py (reported line 235)May include surrounding context.

python
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:

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