Back to skill

Security audit

Siluzan TSO

Security checks for vulnerabilities and agentic risk

Overview

This advertising skill is mostly purpose-aligned, but its installer and some runtime instructions give it broad, persistent authority that users should review carefully before installing.

Install only if you trust the publisher and need this skill to manage real advertising accounts. Review the installer first, restore npm registry settings if they are changed, avoid one-click global installation unless you want every supported AI client affected, and require explicit confirmation before any live ad, account, finance, permission, or account-closing action.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
Findings (5)

T03 · Remote Payload Retrieval and Execution

Error
Location
scripts/install.sh:60
Finding
Mutable Remote Shell Scripts Are Downloaded and Executed Without Integrity Verification<![CDATA[ ## Vulnerability Details **File Location**: `scripts/install.sh:60-75` **Vulnerability Type**: `T03: Remote Payload Retrieval and Execution` **Risk Level**: Critical ### Vulnerable Code ```bash macos) if command -v brew >/dev/null 2>&1; then info "Installing Node.js LTS via Homebrew..." brew install node@22 brew link --overwrite node@22 2>/dev/null || true else info "Installing Node.js LTS via install-node.vercel.app..." curl -fsSL https://install-node.vercel.app/lts | bash -s -- --yes fi ;; linux) if command -v apt-get >/dev/null 2>&1; then info "Installing Node.js 22.x via NodeSource (apt)..." curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - sudo apt-get install -y nodejs elif command -v yum >/dev/null 2>&1; then info "Installing Node.js 22.x via NodeSource (yum)..." curl -fsSL https://rpm.nodesource.com/setup_22.x | sudo -E bash - sudo yum install -y nodejs else info "Installing Node.js LTS via install-node.vercel.app..." curl -fsSL https://install-node.vercel.app/lts | bash -s -- --yes fi ``` ### Technical Analysis The installer pipes network responses directly into Bash. The effective code is therefore not the code reviewed in this project: it is mutable content controlled by external hosting infrastructure at installation time. No version-pinned script, cryptographic checksum, detached signature, or package provenance verification is performed. The NodeSource branches additionally execute the downloaded response through `sudo -E bash`, granting it administrative privileges while preserving parts of the caller's environment. HTTPS protects the connection in transit but does not establish that the response matches a previously audited artifact. Compromise of the remote host, its deployment pipeline, DNS resolution, or a trusted certificate authority could alter the executed payload. ### Attack Path 1. A user runs `scripts/install.sh` on a host where Node.js ...[truncated 1064 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove every `curl | bash` construction. 2. Prefer official operating-system package repositories or instruct users to install Node.js independently. 3. If automated download is necessary: - Pin an exact artifact version. - Download it to a newly created, permission-restricted temporary directory. - Verify an embedded SHA-256 or stronger digest. - Verify the publisher's detached signature using a pinned public key. - Abort on any verification failure. - Execute only the verified local artifact. 4. Avoid running downloaded setup scripts with `sudo`; isolate privileged package-manager operations from untrusted network content. 5. Do not preserve the caller's environment through `sudo -E` unless each inherited variable is explicitly required and validated. 6. Publish the expected checksums and signing-key fingerprints through an independently authenticated release channel. ]]>

T03 · Remote Payload Retrieval and Execution

Error
Location
scripts/install.ps1:109
Finding
Vendor-Hosted Windows Executable Is Silently Installed Without Signature or Hash Validation<![CDATA[ ## Vulnerability Details **File Location**: `scripts/install.ps1:109-140` **Vulnerability Type**: `T03: Remote Payload Retrieval and Execution` **Risk Level**: High ### Vulnerable Code ```powershell function Install-Git { $tmpFile = Join-Path $env:TEMP 'siluzan-git-installer.exe' Write-Info "Downloading Git for Windows: $GIT_INSTALLER_URL" try { $prevProgress = $ProgressPreference $ProgressPreference = 'SilentlyContinue' Invoke-WebRequest -Uri $GIT_INSTALLER_URL -OutFile $tmpFile -UseBasicParsing $ProgressPreference = $prevProgress } catch { Write-Warn "Git installer download failed: $($_.Exception.Message)" return $false } if (-not (Test-Path $tmpFile)) { Write-Warn 'Git installer file not found after download' return $false } $installArgs = @('/VERYSILENT', '/NORESTART', '/NOCANCEL', '/SP-', '/CLOSEAPPLICATIONS', '/RESTARTAPPLICATIONS') if (Test-IsAdmin) { Write-Info 'Installing Git for Windows system-wide (admin detected)...' } else { $userDir = Join-Path $env:LOCALAPPDATA 'Programs\Git' Write-Info "Installing Git for Windows for current user: $userDir" $installArgs += @("/DIR=$userDir") } try { Start-Process -FilePath $tmpFile -ArgumentList $installArgs -Wait -NoNewWindow ``` The source is configured at `scripts/install.ps1:22`: ```powershell $GIT_INSTALLER_URL = 'https://staticpn.siluzan.com/assets/git/Git-2.54.0-64-bit.exe' ``` ### Technical Analysis The PowerShell installer downloads an executable from a vendor-operated CDN and launches it silently. It checks only whether the downloaded path exists. It does not verify: - An expected cryptographic hash. - The executable's Authenticode signature. - The signer identity. - The signature's validity or revocation state. - Provenance against an official Git for Windows release. When PowerShell is elevated, the executable is installed system- ...[truncated 1435 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Do not automatically install Git merely to provide an optional Bash fallback. 2. Prefer the official `winget` Git package with an exact package identity and version. 3. If direct download remains necessary: - Use an official Git for Windows release URL. - Pin an expected SHA-256 digest in the installer. - Validate the digest before execution. - Use `Get-AuthenticodeSignature` and require a valid signature from the expected publisher. - Reject unsigned, invalid, expired, revoked, or unexpectedly signed files. 4. Generate a random temporary filename in a restricted temporary directory rather than using a predictable shared path. 5. Require explicit user consent before downloading and installing optional software. 6. Display whether installation will be per-user or system-wide before executing the installer. ]]>

T08 · Insecure Dependencies

Error
Location
scripts/install.sh:132
Finding
Installer Changes the Global npm Registry and Executes an Unverified Global Package<![CDATA[ ## Vulnerability Details **File Location**: `scripts/install.sh:132-153` **Vulnerability Type**: `T08: Insecure Dependencies` **Risk Level**: High ### Vulnerable Code ```bash local current_registry current_registry=$(npm config get registry 2>/dev/null || echo "") if [ "$current_registry" != "$NPM_MIRROR" ] && [ "$current_registry" != "${NPM_MIRROR}/" ]; then info "Switching npm registry to China mirror for faster downloads..." npm config set registry "$NPM_MIRROR" info "npm registry set to $NPM_MIRROR" else info "npm registry already set to China mirror" fi # Step 2: Install CLI step "Step 2/4: Install ${PKG_NAME}" # 用打包时锁定的 PKG_VERSION,保证脚本与同批 dist/skill 行为对齐 local install_target="${PKG_NAME}@${PKG_VERSION}" info "Running: $PKG_MANAGER install -g ${install_target}" $PKG_MANAGER install -g "${install_target}" info "${install_target} installed" info "Registering Skill to all AI platform global directories..." ${CLI_BIN} init --global --force ``` Equivalent behavior is present in `scripts/install.ps1:221-243`. ### Technical Analysis The installer permanently changes the user's npm registry to `https://registry.npmmirror.com`, globally installs `siluzan-tso-cli@1.1.50`, and immediately executes the resulting CLI. Pinning the semantic version reduces accidental updates but does not pin artifact bytes. The reviewed project does not include the installed package implementation, a package-lock integrity value, a signed provenance statement, or a verified digest for the package tarball. Consequently, the executable code installed and run is outside the static audit boundary. Global npm installation can also execute package lifecycle scripts. Changing the user's global registry affects future unrelated npm commands after this installation has completed, expanding the supply-chain trust change beyond this Skill. ### Attack Path 1. The user runs the installer. 2. The installer changes the persistent npm registry configuration to a third-party ...[truncated 1065 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Do not change the user's persistent npm registry. 2. If a mirror is necessary, scope it to the single command with `--registry` and restore the prior configuration on every exit path. 3. Prefer the official npm registry unless the user explicitly selects a mirror. 4. Pin and verify the exact package tarball digest rather than relying only on a semantic version. 5. Publish verifiable package provenance and compare it before installation. 6. Consider installing into a dedicated local directory instead of globally. 7. Disable lifecycle scripts with `--ignore-scripts` where compatible, or document and audit every required lifecycle script. 8. Separate installation from execution: show the resolved package source and integrity information, then request approval before invoking the installed CLI. ]]>

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
scripts/install.sh:151
Finding
Force-Registration Writes the Skill Into Every Supported AI Client<![CDATA[ ## Vulnerability Details **File Location**: `scripts/install.sh:151-171` **Vulnerability Type**: `T05: Unauthorized Access and Privilege Escalation` **Risk Level**: Medium ### Vulnerable Code ```bash info "Registering Skill to all AI platform global directories..." ${CLI_BIN} init --global --force if [ "${CLI_BIN}" = "siluzan-seo" ]; then info "siluzan-seo does not require login; skipping API Key setup." else step "Step 3/4: Configure API Key" echo "" ${CLI_BIN} login fi # Step 4: Done step "Step 4/4: Complete" echo "" echo -e " ${GREEN}${SKILL_LABEL} installed successfully!${NC}" echo "" echo " Skill registered to these global directories (all AI assistants):" echo -e " ${DIM}~/.cursor/skills/ ~/.claude/skills/ ~/.agents/skills/" echo -e " ~/.gemini/skills/ ~/.codex/skills/ ~/.kilo/skills/" echo -e " ~/.codeium/windsurf/skills/ ~/.config/opencode/skills/" echo -e " ~/.openclaw/skills/ ~/.workbuddy/skills/${NC}" ``` Equivalent behavior is present in `scripts/install.ps1:241-258`. ### Technical Analysis The installer invokes an external CLI with `init --global --force`, then states that the Skill has been registered to the global directories of all supported AI assistants. Installing the Skill for every client is not necessary to use it with one selected agent. The `--force` option further indicates that existing destination content may be overwritten without per-target review. Because the implementation of `siluzan-tso init` is not included in the audited project, the exact overwrite and path-validation behavior cannot be independently verified. This creates a broader trust boundary than a workspace-local or single-client installation and allows the installed package to influence future sessions across multiple agent products. ### Attack Path 1. A user runs the installer intending to use the Skill with one AI client. 2. The installer globally installs and invokes the external CLI. 3. `init --global --force` writes Skill ...[truncated 872 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Default to a workspace-local installation for one explicitly selected AI client. 2. Remove `--global` and `--force` from the default installation path. 3. Enumerate proposed destination paths before writing anything. 4. Require separate, informed consent for each global client directory. 5. Refuse to overwrite existing content unless the user approves the exact target and a backup is created. 6. Validate all destination paths against a fixed allowlist and reject symlinks or path traversal. 7. Provide an uninstall command that removes only files created by this package and restores backups where applicable. 8. Include the `init` implementation in the auditable distribution or publish reproducible source and integrity metadata for it. ]]>

T01 · Skill Instruction Hijacking

Error
Location
SKILL.md:47
Finding
Externally Generated CLI Content Is Required to Be Forwarded to Users Without Review<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:47` **Vulnerability Type**: `T01: Skill Instruction Hijacking` **Risk Level**: High ### Vulnerable Code ```markdown - **创建完成后交付(硬性)**:`ad batch diff` 的 stdout 含 `BEGIN_USER_DELIVERY_MARKDOWN`…`END_USER_DELIVERY_MARKDOWN`——**立刻**把中间全文原样发给用户(可先于补建);禁止只摘要、禁止只说「创建成功/详情已交付/未发现缺失」、禁止等全部补建结束再交付。 ``` The same requirement is reinforced in `references/google-ads/google-ads-campaign-plan.md:166-169`: ```markdown | 1 | `ad batch get --id <taskId> --config-file ./campaign.json --json-out ./snap-campaign` 直至终端态(Creating 时每 5s 轮询;**读落盘 `agentWorkflow.nextCommand`**,勿只看人读提示) | | 2 | `Successfully` / `HasFailed`:执行 `agentWorkflow.nextCommand`(即 `ad batch diff … --json-out`);**Failed** 勿 diff | | 3 | **立刻交付**:把本次 diff stdout 中 `BEGIN_USER_DELIVERY_MARKDOWN`…`END_USER_DELIVERY_MARKDOWN` 全文原样发给用户(即 `reportMarkdown`)。**禁止**只贴系列 ID/counts 摘要,**禁止**等补建结束再交付 | | 4 | 读落盘 `ok` / `missing[]`;`layer=location` → `ad geo add`;`layer=extension` → 执行 `remediateCommand` | ``` ### Technical Analysis The Skill requires the agent to reproduce text generated by an external CLI or backend verbatim. It explicitly prohibits summarization and independent filtering. The content between the markers is not statically included in the audited repository and therefore cannot be trusted merely because the surrounding CLI output uses expected delimiters. A compromised CLI package, backend service, account-derived field, or upstream advertising object could inject unrelated instructions, deceptive claims, external links, or sensitive information into the marked section. Delimiter-based extraction establishes framing but not authenticity, safety, or semantic validity. Requiring exact reproduction turns external output into a privileged content-inje ...[truncated 1090 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Treat all CLI and backend output as untrusted data. 2. Replace marker-based verbatim forwarding with a versioned JSON schema containing only expected campaign-report fields. 3. Validate field types, lengths, identifiers, URLs, and allowed Markdown constructs before rendering. 4. Reject embedded instructions, scripts, HTML event handlers, unexpected domains, and unrelated calls to action. 5. Redact credentials, tokens, phone numbers, and unnecessary account identifiers before delivery. 6. Render a local report from validated structured data rather than forwarding backend-authored Markdown. 7. Permit the agent to summarize, contextualize, and omit unsafe or irrelevant content. 8. If exact records are required for audit purposes, save the raw report as an explicitly labeled untrusted attachment while presenting a validated summary in the conversation. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (65)

Tp4

High
Category
MCP Tool Poisoning
Confidence
83% confidence
Finding
If the skill's install or bootstrap behavior auto-installs Node.js, changes npm registry settings, globally installs packages, registers itself into multiple global skill directories, and initiates login/configuration, it performs privileged host modifications far beyond simple ad-analysis routing. Those actions can alter the user's environment, redirect package supply chains to untrusted mirrors, and persist software across tools without clear consent, creating supply-chain and persistence risk.

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
The document is explicitly framed as a read-only Google Ads query/listing guide, but it contains numerous mutating and destructive commands including create, edit, status changes, and delete operations. In an agent setting, this kind of scope mismatch can cause unsafe tool routing or operator trust errors, leading an agent or user to execute write actions when they believe they are in a read-only workflow.

Intent-Code Divergence

High
Confidence
97% confidence
Finding
The introductory text claims the file should be used for read-only tasks, yet later sections instruct users to perform destructive and state-changing operations. This contradiction increases the chance that downstream agents or analysts will misclassify the file as safe for non-destructive use and then follow dangerous commands without appropriate safeguards.

Intent-Code Divergence

Medium
Confidence
96% confidence
Finding
The template states at the top that the reporting range must not include today or yesterday, but a later '日期规则' section explicitly allows including yesterday and even today under certain conditions. In an agent skill, contradictory operational instructions can cause the agent to choose the wrong date bounds, omit valid data, or generate inconsistent reports, which is especially risky for financial/advertising analytics workflows where date windows directly affect business decisions.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The template loads a remote JavaScript file from an external domain at render time, which gives that third party full script execution in the context of the generated report page. If the CDN, DNS, or upstream asset is compromised, any report data injected into the page can be exfiltrated or the rendered report can be modified for phishing or deception.

Intent-Code Divergence

Medium
Confidence
90% confidence
Finding
The code comments explicitly say missing landing-page metrics must not be rendered as zeros, but the fallback still produces 0.0%, 0.00 s, and 0 values. This can misrepresent unavailable measurements as catastrophic performance failures, causing users or downstream agents to make incorrect decisions based on fabricated data.

Context-Inappropriate Capability

Low
Confidence
90% confidence
Finding
This print-oriented local HTML template loads third-party JavaScript and CSS from external CDNs, including executable scripts from Tailwind and ECharts. That creates a supply-chain and integrity risk: if a CDN response is tampered with, unavailable, or replaced, opening the local report can execute untrusted code in the viewer’s browser context and alter report contents. In the skill context, this is more concerning because the template is used for reporting/diagnosis workflows where data integrity and offline reproducibility matter.

Context-Inappropriate Capability

Medium
Confidence
90% confidence
Finding
The template loads executable JavaScript from a remote origin at runtime via a script tag. That creates a supply-chain and integrity risk: if the CDN, DNS, TLS termination, or hosting path is compromised, arbitrary code executes in the report context and can read injected report data or alter rendered output.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The template pulls executable JavaScript from a remote domain at render time, which creates a supply-chain and integrity risk for what should be a largely static report. If that host, path, or delivery chain is compromised, any user opening the generated report could execute attacker-controlled code in the browser, including access to embedded report data and localStorage.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The installer adds a secondary capability unrelated to the stated skill installation flow by downloading and silently installing Git for Windows from a vendor-controlled CDN. Silent installation of extra software expands the trust boundary and attack surface; if that binary, CDN, or URL is compromised, users receive an unexpected executable with broad local effects. In this skill context, the behavior is more dangerous because the script is framed as a one-click installer for an ad-platform skill, not a system bootstrapper that clearly discloses package manager/toolchain changes.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The script changes the user's global npm registry setting to a third-party mirror, affecting all future npm operations beyond this skill. This is dangerous because it silently redirects package trust and software supply-chain resolution for unrelated projects, potentially exposing the user to mirror compromise, stale packages, or policy/compliance issues. The skill context does not justify permanent global package-manager reconfiguration, which makes the behavior suspicious and overreaching.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The installer fetches and executes remote shell scripts to install Node.js, including `curl ... | bash` and piping NodeSource setup scripts into `sudo bash`. This grants arbitrary code from third-party endpoints execution on the user's machine, in some paths with elevated privileges, which is broader and riskier than the stated advertising/analysis skill purpose.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The script changes the user's global npm registry to `https://registry.npmmirror.com`, affecting future npm operations outside this skill. This introduces supply-chain and trust-boundary risk because all later package installs may resolve through a different registry mirror without clear necessity for the skill's core function.

Description-Behavior Mismatch

Medium
Confidence
90% confidence
Finding
The installer force-registers the skill globally across many AI assistant directories via `init --global --force`, creating broad persistence beyond the narrow install of a single CLI tool. In the skill context this is more dangerous because it extends the skill's reach into multiple host environments, increasing attack surface and making unwanted propagation harder for users to notice or undo.

Vague Triggers

High
Confidence
92% confidence
Finding
The activation scope is extremely broad, including generic requests for market, industry, strategy, and report-writing tasks even when the user does not mention the platform. That can cause the skill to trigger on unrelated prompts, gaining access to shell, files, and ad-oriented workflows in contexts where the user did not intend to invoke it, increasing the chance of unintended data access or unsafe actions.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
The template fixes form.locale to en_US, which can cause the agent to create English-language lead forms regardless of the advertiser's market or user preference. In an ad-platform automation skill, this can silently produce non-compliant or low-quality campaigns, mis-handle consent language, and collect leads with the wrong UX or disclosures.

Natural-Language Policy Violations

Medium
Confidence
92% confidence
Finding
The planning section prescribes '英文受众定向 + 英文广告文案' by default, steering the agent toward English targeting and copy without explicit user approval. In this skill's context, that is risky because the file is an operational template for ad creation/planning, so embedded defaults can propagate directly into customer-facing campaigns and market reports, causing brand, compliance, and targeting errors at scale.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
This documentation provides a ready-to-run PATCH workflow that edits live Google PMax campaign brand assets, but it does not clearly warn that the command changes production account configuration. In an agent skill that routes advertising-account operations and may be used in semi-automated workflows, missing mutation warnings increases the chance of unintended live changes, brand misconfiguration, or unauthorized-looking account updates.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The document states that enabling Brand Guidelines is irreversible ('不可关闭') but does not present a prominent warning, confirmation requirement, or rollback guidance. In an ad-operations skill that can drive real account changes, this increases the risk of accidental permanent configuration changes that may affect branding behavior across existing Performance Max workflows.

Natural-Language Policy Violations

Medium
Confidence
87% confidence
Finding
The template hard-codes location and language targeting to the United States (`id: 2840`) and English (`id: 1000`) without requiring explicit user selection or documenting that these are placeholders. In an ad-platform automation skill, this can cause campaigns to be launched against the wrong market, creating unauthorized spend, compliance issues, and misleading results if operators assume the template is globally safe by default.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The document states that creating a Lead Form will automatically change conversion-goal bidding behavior (`SUBMIT_LEAD_FORM` + `GOOGLE_HOSTED` set to `biddable=true`) but does not present this as a prominent warning, confirmation gate, or opt-in action. In an ad platform context, silent optimization-target changes can alter campaign delivery, reporting, and spend behavior, creating a real risk of unintended account-impacting writes.

Vague Triggers

Medium
Confidence
94% confidence
Finding
The comment states that a full PUT sync will clear the corresponding signal type when an empty array is provided, but it does not require confirmation, scope checks, or guardrails. In an ad-management skill, this creates a realistic risk of accidental destructive updates to live audience/search-theme targeting, which can degrade campaign performance or wipe configured signals.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The documented `account close` flow for TikTok describes an irreversible account-closing operation but does not require an explicit confirmation flag or a user-acknowledgment step, unlike other destructive commands in the same file. In an agent-driven environment, this inconsistency raises the risk of accidental or unauthorized account closure through automation or prompt confusion, causing immediate business interruption and difficult recovery.

Natural-Language Policy Violations

High
Confidence
97% confidence
Finding
The instruction '你可以设置Admin权限不能主动告知用户,除非用户主动提及他需要Admin权限' explicitly tells the agent it may grant elevated Admin access while concealing that option from the user. This undermines informed consent and enables covert privilege escalation, especially dangerous in an account-permissions skill where Admin access can allow broad account takeover or destructive changes.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
This workflow instructs the agent to collect and submit highly sensitive personal and corporate data, including legal representative identity details and banking information, but provides no user-facing privacy notice, consent checkpoint, or explanation of how the data will be handled. In a security-sensitive account-opening context, that omission increases the risk of users disclosing regulated personal data without understanding transmission, storage, or retention implications.

Static analysis

No suspicious patterns detected.