Back to skill

Security audit

DeepRead Form Fill

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent DeepRead form-filling integration, but it handles highly sensitive documents and exposes them through under-scoped upload and output patterns that users should review first.

Install only if you are comfortable sending the PDF, form field data, and optional webhook destination to DeepRead's remote service. Avoid putting real SSNs, tax, financial, medical, or employment data on the command line, review DeepRead's retention and compliance terms, shorten signed URL expiry when possible, and keep generated download URLs out of logs and shared transcripts.

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 (2)

T09 · Insecure Skill Coding Practices

Warning
Location
form_fill.sh:8
Finding
Sensitive form data exposed through command-line arguments<![CDATA[ ## Vulnerability Details **File Location**: `form_fill.sh:8-36` **Vulnerability Type**: Sensitive data exposure through process arguments and shell history **Risk Level**: Medium ### Vulnerable Code ```bash # Usage: # ./form_fill.sh <pdf_path> <form_fields_json_string> # # Example: # ./form_fill.sh application.pdf '{"full_name": "Jane Doe", "dob": "1990-03-15"}' if [ $# -lt 2 ]; then echo "Usage: $0 <pdf_path> '<form_fields_json>'" >&2 echo "Example: $0 form.pdf '{\"name\": \"Jane Doe\"}'" >&2 exit 1 fi PDF_PATH="$1" FORM_FIELDS="$2" ``` ### Technical Analysis The shell interface requires all form values to be supplied as the second command-line argument. The Skill documentation demonstrates form data that can include names, dates of birth, addresses, Social Security numbers, income, insurance details, and other sensitive information. Command-line arguments are not an appropriate transport for such data because they may be: - Recorded in interactive shell-history files. - Visible to local process-inspection tools while the command is running. - Captured by process accounting, endpoint monitoring, audit systems, or terminal-session recording. - Retained in CI/CD logs or Agent execution transcripts. Quoting the JSON prevents shell expansion but does not prevent history or process-list exposure. The network upload is necessary for the declared cloud form-filling functionality, but placing sensitive values directly in process arguments exceeds the minimum local exposure necessary to perform that upload. ### Attack Path 1. A user follows the documented usage and invokes the script with PII embedded in the JSON command-line argument. 2. The shell records the complete command in its history, or a local monitoring facility captures the process arguments. 3. A local user, administrator, monitoring operator, compromised process, or later reader of archived logs accesses the recorded command. 4. The attacker extracts the form values without n ...[truncated 595 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace the JSON command-line argument with a path to a permission-restricted JSON file: ```bash ./form_fill.sh application.pdf form_fields.json ``` 2. Alternatively, read the data from standard input so it does not appear in the process argument list: ```bash ./form_fill.sh application.pdf < form_fields.json ``` 3. Validate that the input is a JSON object and reject unsupported input types. 4. Recommend restrictive permissions for files containing form data, such as mode `0600`. 5. Explicitly warn users not to put SSNs, financial data, medical data, credentials, or other sensitive values directly on the command line. 6. Avoid echoing the supplied JSON in normal or error output. 7. Document that local input is transmitted to the external DeepRead service and require informed user consent before submission. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
form_fill.py:176
Finding
Signed completed-document URL disclosed through standard output<![CDATA[ ## Vulnerability Details **File Location**: `form_fill.py:176-181`; equivalent behavior in `form_fill.sh:90-101` **Vulnerability Type**: Disclosure of a sensitive signed resource URL through logs and transcripts **Risk Level**: Medium ### Vulnerable Code ```python # Summary print() print(f"Status: {result['status']}") print(f"Fields: {result.get('fields_filled', 0)}/{result.get('fields_detected', 0)} filled, " f"{result.get('fields_verified', 0)} verified, " f"{result.get('fields_hil_flagged', 0)} need review") print(f"Time: {result.get('duration_seconds', 0):.1f}s") print(f"Download: {result.get('filled_form_url', 'N/A')}") ``` The shell implementation performs the same disclosure: ```bash FILLED_URL=$(echo "$RESULT" | jq -r '.filled_form_url // "N/A"') DETECTED=$(echo "$RESULT" | jq -r '.fields_detected // 0') FILLED=$(echo "$RESULT" | jq -r '.fields_filled // 0') VERIFIED=$(echo "$RESULT" | jq -r '.fields_verified // 0') HIL=$(echo "$RESULT" | jq -r '.fields_hil_flagged // 0') DURATION=$(echo "$RESULT" | jq -r '.duration_seconds // 0') echo "" echo "Status: completed" echo "Fields: ${FILLED}/${DETECTED} filled, ${VERIFIED} verified, ${HIL} need review" echo "Time: ${DURATION}s" echo "Download: ${FILLED_URL}" ``` ### Technical Analysis After processing completes, both implementations print `filled_form_url` directly to standard output. The Skill documentation identifies this value as a signed download URL and states that result URLs have a default expiration of 604800 seconds, or seven days. Signed URLs commonly function as bearer capabilities: possession of the complete URL may be sufficient to download the associated resource until expiration. Printing the full URL can propagate it into: - Agent conversation transcripts. - Terminal scrollback and session recordings. - CI/CD job output. - Centralized application or observability logs. - Support bundles and copied command output. The completed PDF may contain all submitted PII i ...[truncated 1520 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Do not print the complete signed URL by default. 2. Download the result directly to a user-selected local file with restrictive permissions, preferably mode `0600`. 3. If the URL must be displayed, require explicit confirmation and clearly label it as a sensitive access credential. 4. Redact query parameters when writing diagnostic output, for example by showing only the scheme, host, and path. 5. Request the shortest practical `url_expires_in` value rather than relying on the documented seven-day default. 6. Ensure CI systems, Agent runtimes, and terminal log collectors mask signed URL query parameters. 7. Never include the URL in exception telemetry or support logs. 8. Update `form_fill.sh` and documentation examples to follow the same protected-download behavior. 9. Document the service's storage, retention, deletion, signed-URL, and subprocessor policies so users can make an informed decision before uploading sensitive forms. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (18)

Lp3

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding
The skill documents use of environment variables, network access, and shell-based invocation examples, but the manifest does not declare explicit tool scope restrictions such as permissions or allowed-tools. This increases the chance that an agent runtime grants broader capabilities than necessary, violating least privilege and making any downstream misuse of sensitive files, API keys, or network access harder to constrain.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
The skill encourages uploading PDFs and JSON form data to a third-party API but does not prominently warn users that potentially sensitive document contents and PII will be transmitted off-platform for remote processing. Because the documented use cases include tax forms, loan applications, insurance claims, and government documents, omission of a clear privacy/data-handling warning materially increases the risk of unintended disclosure of highly sensitive personal or financial data.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# 1. Submit form + data
curl -X POST https://api.deepread.tech/v1/form-fill \
  -H "X-API-Key: $DEEPREAD_API_KEY" \
  -F "file=@application.pdf" \
  -F 'form_fields={"full_name": "Jane Doe", "date_of_birth": "03/15/1990", "address": "123 Main St, Portland OR 97201"}'
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# 1. Submit form + data
curl -X POST https://api.deepread.tech/v1/form-fill \
  -H "X-API-Key: $DEEPREAD_API_KEY" \
  -F "file=@application.pdf" \
  -F 'form_fields={"full_name": "Jane Doe", "date_of_birth": "03/15/1990", "address": "123 Main St, Portland OR 97201"}'
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# 1. Submit form + data
curl -X POST https://api.deepread.tech/v1/form-fill \
  -H "X-API-Key: $DEEPREAD_API_KEY" \
  -F "file=@application.pdf" \
  -F 'form_fields={"full_name": "Jane Doe", "date_of_birth": "03/15/1990", "address": "123 Main St, Portland OR 97201"}'
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# 1. Submit form + data
curl -X POST https://api.deepread.tech/v1/form-fill \
  -H "X-API-Key: $DEEPREAD_API_KEY" \
  -F "file=@application.pdf" \
  -F 'form_fields={"full_name": "Jane Doe", "date_of_birth": "03/15/1990", "address": "123 Main St, Portland OR 97201"}'
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# 1. Submit form + data
curl -X POST https://api.deepread.tech/v1/form-fill \
  -H "X-API-Key: $DEEPREAD_API_KEY" \
  -F "file=@application.pdf" \
  -F 'form_fields={"full_name": "Jane Doe", "date_of_birth": "03/15/1990", "address": "123 Main St, Portland OR 97201"}'
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# 1. Submit form + data
curl -X POST https://api.deepread.tech/v1/form-fill \
  -H "X-API-Key: $DEEPREAD_API_KEY" \
  -F "file=@application.pdf" \
  -F 'form_fields={"full_name": "Jane Doe", "date_of_birth": "03/15/1990", "address": "123 Main St, Portland OR 97201"}'
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# 1. Submit form + data
curl -X POST https://api.deepread.tech/v1/form-fill \
  -H "X-API-Key: $DEEPREAD_API_KEY" \
  -F "file=@application.pdf" \
  -F 'form_fields={"full_name": "Jane Doe", "date_of_birth": "03/15/1990", "address": "123 Main St, Portland OR 97201"}'
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# 1. Submit form + data
curl -X POST https://api.deepread.tech/v1/form-fill \
  -H "X-API-Key: $DEEPREAD_API_KEY" \
  -F "file=@application.pdf" \
  -F 'form_fields={"full_name": "Jane Doe", "date_of_birth": "03/15/1990", "address": "123 Main St, Portland OR 97201"}'
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# 1. Submit form + data
curl -X POST https://api.deepread.tech/v1/form-fill \
  -H "X-API-Key: $DEEPREAD_API_KEY" \
  -F "file=@application.pdf" \
  -F 'form_fields={"full_name": "Jane Doe", "date_of_birth": "03/15/1990", "address": "123 Main St, Portland OR 97201"}'
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# 1. Submit form + data
curl -X POST https://api.deepread.tech/v1/form-fill \
  -H "X-API-Key: $DEEPREAD_API_KEY" \
  -F "file=@application.pdf" \
  -F 'form_fields={"full_name": "Jane Doe", "date_of_birth": "03/15/1990", "address": "123 Main St, Portland OR 97201"}'
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# 1. Submit form + data
curl -X POST https://api.deepread.tech/v1/form-fill \
  -H "X-API-Key: $DEEPREAD_API_KEY" \
  -F "file=@application.pdf" \
  -F 'form_fields={"full_name": "Jane Doe", "date_of_birth": "03/15/1990", "address": "123 Main St, Portland OR 97201"}'
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# 1. Submit form + data
curl -X POST https://api.deepread.tech/v1/form-fill \
  -H "X-API-Key: $DEEPREAD_API_KEY" \
  -F "file=@application.pdf" \
  -F 'form_fields={"full_name": "Jane Doe", "date_of_birth": "03/15/1990", "address": "123 Main St, Portland OR 97201"}'
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# 1. Submit form + data
curl -X POST https://api.deepread.tech/v1/form-fill \
  -H "X-API-Key: $DEEPREAD_API_KEY" \
  -F "file=@application.pdf" \
  -F 'form_fields={"full_name": "Jane Doe", "date_of_birth": "03/15/1990", "address": "123 Main St, Portland OR 97201"}'
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
Confidence
98% confidence
Finding
The examples include realistic sensitive personal and financial data such as SSNs, dates of birth, addresses, tax details, and employment information without any caution against using real production PII. This normalizes unsafe handling and may cause operators to paste live regulated data into a third-party service during experimentation or copy these patterns into automated workflows without adequate safeguards.

External Transmission

Medium
Category
Data Exfiltration
Content
jobs = []
for i, applicant in enumerate(applicants):
    with open(FORM_TEMPLATE, "rb") as f:
        resp = requests.post(
            "https://api.deepread.tech/v1/form-fill",
            headers={"X-API-Key": API_KEY},
            files={"file": (FORM_TEMPLATE, f, "application/pdf")},
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The code reads the full PDF and submitted form data, then sends both to a third-party remote service. While this is consistent with the skill’s stated purpose, the CLI does not provide a strong runtime warning, consent prompt, or data-sensitivity notice before transmitting potentially sensitive documents and PII off-host, which creates a real privacy and data-governance risk.

Static analysis

No suspicious patterns detected.