Back to skill

Security audit

ds160-autofill

Security checks for vulnerabilities and agentic risk

Overview

This skill has a clear DS-160 autofill purpose, but it handles visa application secrets and personal data in ways users should review before installing.

Install only if you are comfortable with an agent handling DS-160 data and browser automation. Before using real data, require explicit confirmation before any external LLM/image call, avoid automatic captcha outsourcing if that conflicts with site rules or your privacy needs, replace hardcoded security answers with private user-provided answers, do not log or persist recovery secrets in plaintext, and confirm manually before any final or irreversible submission.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (3)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/ds160-filler.js:326
Finding

CSV Values Are Interpolated into Dynamically Evaluated Browser JavaScript

Content
View full analysis
o.text === '${valueToFill}' || o.value === '${valueToFill}'); if (!option) { option = options.find(o => o.text.includes('${valueToFill}') || o.value.includes('${valueToFill}')); } if (option) { el.value = option.value; el.dispatchEvent(new Event('change', { bubbles: true })); true; } else { false; } } else { false; } `; break; case 'checkbox': fillScript = ` const el = ${locator}; if (el) { const shouldBeChecked = '${valueToFill}'.toLowerCase() === 'true' || '${valueToFill}'.toLowerCase() === 'yes'; if (el.checked !== shouldBeChecked) { el.click(); } true; } else { false; } `; break; ``` ### Technical Analysis `valueToFill` originates from CSV user data and is inserted directly into JavaScript source code. It is not escaped or passed as a separate argument before the resulting string is supplied to `page.evaluate`. A CSV val ...[truncated 2197 chars]
Remediation
View remediation
{ const el = document.getElementById(elementId); if (!el) { return false; } el.value = value; el.dispatchEvent(new Event('input', { bubbles: true })); el.dispatchEvent(new Event('change', { bubbles: true })); return true; }, { elementId, value: valueToFill } ); ``` - Use browser automation APIs such as `fill`, `type`, `selectOption`, `check`, and `click` instead of evaluated source whenever available. - Pass selectors and identifiers as callback arguments rather than embedding them in executable strings. - Validate each CSV field against its expected data type, maximum length, format, and allowed values. - For select fields, require an exact match against the configured option set rather than using unrestricted substring matching. - Add regression tests containing quotes, backslashes, line breaks, template-literal characters, and representative JavaScript payload strings. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/ds160-filler.js:140
Finding

Application Recovery Information Is Stored in Plaintext and Written to Logs

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/ds160-filler.js:519
Finding

Security Questions Use a Small Set of Publicly Hardcoded Answers

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (12)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 23)May include surrounding context.

md
3. **Initialize session**: Load and execute `scripts/ds160-filler.js` to parse mappings and CSV

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 460)May include surrounding context.

md
3. **Initialize session**: Load and execute `scripts/ds160-filler.js` to parse mappings and CSV

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill directs the agent to send DS-160 field context, page content, and user-provided values to an LLM for translation and element-location help. DS-160 data is highly sensitive personal, travel, family, and identity information, and disclosing it to an external model without explicit informed consent, minimization, or masking creates a serious privacy and data-handling risk.

Content

No source excerpt is available for this finding.

Unbounded Output

Medium
Category
Output Handling
Confidence
80% confidence
Finding

Output size or generation rate is not bounded. Unbounded output enables denial-of-service through resource exhaustion, log flooding, or context-window stuffing.

Content

Scanner excerpt · SKILL.md (reported line 87)May include surrounding context.

  1. Load mappings from references/ds160-elements.yaml

  2. Execute fill logic using browser act with evaluate:

    javascript
    // Load ds160-filler.js
    // Call fillPage(page, currentUrl, userData, yamlData)
    

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill instructs the agent to capture captcha screenshots and send them to an image/LLM tool without a clear disclosure or consent step. Even if the image is focused on the captcha, screenshots can include session-specific page elements or identifiers, and outsourcing this data creates avoidable privacy and compliance concerns.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The progress-reporting instructions tell the agent to repeatedly echo sensitive recovery details such as the Application ID and security question/answer. Re-exposing these secrets increases the chance of leakage through logs, transcripts, shared screens, or misdirected outputs and weakens the security of the stored session.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill states 'NEVER submit the final form' but elsewhere instructs the agent to submit after captcha handling, creating contradictory operational guidance. In an automation context for a government visa workflow, ambiguous submit behavior can cause unintended transmission of sensitive application data or irreversible workflow actions.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
99% confidence
Finding

The example progress report includes the full Application ID, security question, and security answer, normalizing disclosure of account-recovery secrets in ordinary status messages. In practice, these details could be captured in chat logs or monitoring systems and later used to resume or manipulate the application workflow.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

This file defines a complete automation map for collecting and submitting extremely sensitive personal data, including passport numbers, national ID numbers, family details, travel history, social media identifiers, security questions, and answers to criminal and health background questions. In the context of an agent skill, the combination of broad PII collection, automated form submission instructions, and no embedded privacy warning, consent boundary, or data-handling constraints materially increases the risk of misuse, over-collection, unauthorized submission, or secondary disclosure.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The script persists DS-160 session data to a predictable local file under the workspace, including application ID, security question, and security answer. In the visa context these values are sensitive account-recovery and tracking data; storing them unencrypted and without explicit user warning increases the chance of local disclosure through other tools, shared workspaces, backups, or multi-user hosts.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This function writes raw CSV visa-form data to disk in a fixed workspace path without any consent prompt, classification, protection, or lifecycle controls. DS-160 inputs can contain highly sensitive personal, travel, employment, and contact information, so plaintext persistence materially increases exposure if the machine, workspace, logs, backups, or collaborating agents are accessible.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The manifest header and many labels/comments are in Chinese, which effectively constrains the skill to a specific language experience. There is no accompanying note indicating that the skill is intentionally region-specific or that users can opt into another language/locale.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.