Back to skill

Security audit

ClawRTC

Security checks across malware telemetry and agentic risk

Overview

This appears to be a real RTC mining tool, but it under-discloses telemetry and device identifiers and contradicts its own TLS/security claims.

Install only if you are comfortable with a crypto miner that fingerprints your machine, sends stable device identifiers to RustChain infrastructure, performs some undisclosed telemetry, and stores wallet keys locally. Avoid using BCOS admin credentials with this version, treat exported wallet files as private keys, and prefer a reviewed/fixed release with accurate disclosure and normal TLS verification.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (22)

subprocess module call

Medium
Category
Dangerous Code Execution
Content
def run_cmd(cmd, check=True, capture=False):
    """Run a shell command."""
    try:
        result = subprocess.run(
            cmd, shell=True, check=check,
            capture_output=capture, text=True
        )
Confidence
98% confidence
Finding
result = subprocess.run( cmd, shell=True, check=check, capture_output=capture, text=True )

Tainted flow: 'export_path' from open (line 751, file read) → open (file write)

Medium
Category
Data Flow
Content
else:
        export_data = wallet

    with open(export_path, "w") as f:
        json.dump(export_data, f, indent=2)

    print(f"\n  {GREEN}Wallet exported to:{NC} {export_path}")
Confidence
86% confidence
Finding
with open(export_path, "w") as f:

Tainted flow: 'req' from os.environ.get (line 941, credential/environment) → urllib.request.urlopen (network output)

Critical
Category
Data Flow
Content
ctx.verify_mode = ssl.CERT_NONE

        req = urllib.request.Request(url)
        with urllib.request.urlopen(req, context=ctx, timeout=15) as resp:
            data = json.loads(resp.read().decode())

        if not data.get("ok"):
Confidence
99% confidence
Finding
with urllib.request.urlopen(req, context=ctx, timeout=15) as resp:

Tainted flow: 'req' from os.environ.get (line 941, credential/environment) → urllib.request.urlopen (network output)

Critical
Category
Data Flow
Content
},
            method="POST",
        )
        with urllib.request.urlopen(req, context=ctx, timeout=30) as resp:
            data = json.loads(resp.read().decode())

        if data.get("ok"):
Confidence
100% confidence
Finding
with urllib.request.urlopen(req, context=ctx, timeout=30) as resp:

Tainted flow: 'req' from os.environ.get (line 941, credential/environment) → urllib.request.urlopen (network output)

Critical
Category
Data Flow
Content
ctx.check_hostname = False
        ctx.verify_mode = ssl.CERT_NONE

        with urllib.request.urlopen(req, context=ctx, timeout=30) as resp:
            pdf_data = resp.read()

        out_path = os.path.join(path, f"{cert_id}.pdf")
Confidence
97% confidence
Finding
with urllib.request.urlopen(req, context=ctx, timeout=30) as resp:

Tainted flow: 'req' from os.environ.get (line 941, credential/environment) → urllib.request.urlopen (network output)

Critical
Category
Data Flow
Content
data=payload,
                    headers={"Content-Type": "application/json"}
                )
                urllib.request.urlopen(req, timeout=5)
            except Exception:
                pass
        threading.Thread(target=_ping, daemon=True).start()
Confidence
88% confidence
Finding
urllib.request.urlopen(req, timeout=5)

Intent-Code Divergence

High
Confidence
98% confidence
Finding
The CLI advertises security and verification assurances, but BCOS network operations later disable TLS certificate validation entirely. This contradiction is dangerous because it can mislead users into trusting network-derived certification or verification results that are trivially spoofable by an active attacker.

Intent-Code Divergence

High
Confidence
99% confidence
Finding
The disclosure claims data is sent only to the RustChain node and no third party, but installation asynchronously posts telemetry to bottube.ai. Misleading privacy/security disclosures materially increase risk because users cannot give informed consent and may run the tool in sensitive environments under false assumptions.

Context-Inappropriate Capability

Medium
Confidence
79% confidence
Finding
The file presents itself primarily as a miner installer, but also includes repository scanning, certification, wallet management, and spend-side transaction features. This scope expansion increases attack surface and makes review harder, which is especially concerning in a package that already performs installation, persistence, networking, and credential handling.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
The anti-emulation routine performs unsolicited HTTP requests to the link-local cloud metadata service at `169.254.169.254`, which expands the skill's capabilities from local fingerprinting into active network probing. In cloud environments, metadata services can expose highly sensitive instance information and, depending on platform configuration, may facilitate credential discovery or signal execution context without user knowledge.

Intent-Code Divergence

High
Confidence
98% confidence
Finding
The signing logic is broken because it references `attestation["nonce"]`, but `nonce` exists only under `attestation["report"]`. When signing helpers are unavailable, this raises an exception and silently falls back to unsigned or legacy weak signing, undermining the claimed cryptographic binding of wallet/miner identity and making spoofing or hijack easier, especially since the server URL is plain HTTP.

Intent-Code Divergence

Medium
Confidence
98% confidence
Finding
The docstring says the keystore is 'encrypted with machine-id', but the implementation only XOR-obscures the private key with deterministic machine-derived bytes. This can create a false sense of security and leaves the private key recoverable by anyone who can access the file and derive or read the same machine identifier, undermining key confidentiality.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The README states that the agent performs hardware fingerprinting and periodic network attestation automatically, but it does not clearly disclose what device-identifying data is collected, what is transmitted, where it is sent, or how long it is retained. Because this is framed as a simple install/start workflow for an AI agent, users may enable persistent background telemetry without informed consent, creating privacy and tracking risk.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The export command writes a private-key-bearing wallet file immediately, without an interactive warning or confirmation at the moment of export. In automated or agent-driven contexts, this can lead to accidental secret disclosure into insecure directories, logs, or shared workspaces.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
BCOS certify automatically reads an admin key from the environment or a file and transmits it in a request header without any disclosure in that flow. Hidden credential use is risky because users may not realize a command will consume privileged secrets and send them off-host.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The code makes hidden HTTP requests to the cloud metadata endpoint without warning, consent, or clear necessity for the stated hardware fingerprint purpose. This covert network access can surprise users, leak execution context, and interact with sensitive cloud infrastructure services that are commonly protected precisely because software should not query them casually.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The skill inspects environment variables associated with containers and cloud providers without any notice, which is sensitive environment fingerprinting beyond simple hardware validation. While reading env vars is common, targeting cloud/container markers can expose deployment context and facilitate policy evasion or discriminatory behavior against hosted environments.

Missing User Warnings

High
Confidence
95% confidence
Finding
The miner collects MAC addresses and hostnames and later transmits them for attestation without any meaningful user-facing notice or informed consent. These are persistent hardware identifiers that enable device tracking and fingerprinting, and in this context they are sent to a remote mining server as part of an opaque attestation workflow.

Missing User Warnings

High
Confidence
99% confidence
Finding
The attestation routine transmits a detailed device fingerprint, hostname, MAC addresses, CPU/architecture details, entropy-derived telemetry, and optional fingerprint-check data to a remote server with no visible consent flow. In a cryptocurrency miner context, this materially increases risk because the code is designed to tie earnings and behavior to a unique machine identity, creating strong tracking and privacy-invasive surveillance potential.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill scans all running processes to identify mining software without any user-facing notice or consent gate. In an agent context, this can silently inventory local software usage and expose sensitive operational details about the host, which is especially concerning because the feature is designed to detect cryptocurrency miners specifically.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The code probes multiple localhost ports and sends RPC requests to local services without explicit disclosure to the user. Even though traffic stays on localhost, it can fingerprint installed nodes, gather system activity details, and interact with services the user did not intend the skill to contact.

Missing User Warnings

High
Confidence
98% confidence
Finding
This logic transmits the user's mining address to third-party pool APIs, which creates an external privacy leak and links the local user to specific mining activity. In this skill's context, that is more dangerous because the code is explicitly built to correlate local miner detection with external wallet/account verification, enabling deanonymization and tracking.

VirusTotal

4/65 vendors flagged this skill as malicious, and 61/65 flagged it as clean.

View on VirusTotal

Static analysis

Detected: malicious.crypto_mining, suspicious.dynamic_code_execution, suspicious.exposed_secret_literal (+1 more)

Possible crypto mining behavior detected.

Critical
Code
malicious.crypto_mining
Location
clawrtc/data/miner.py:86

Possible crypto mining behavior detected.

Critical
Code
malicious.crypto_mining
Location
clawrtc/data/pow_miners.py:24

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
clawrtc/cli.py:815

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
clawrtc/cli.py:649

HTTPS certificate verification is disabled.

Warn
Code
suspicious.insecure_tls_verification
Location
clawrtc/cli.py:502