Back to skill

Security audit

unisk_video_notification_pro

Security checks for vulnerabilities and agentic risk

Overview

This skill does what it says by sending a local video notification through an IVVR service, but it disables TLS verification while transmitting video, phone numbers, and authentication headers.

Review before installing. Only use this with non-sensitive videos and phone numbers, a trusted IVVR endpoint, and credentials intended for this service. The skill should be changed to require HTTPS, restrict BASE_URL to approved hosts, and remove verify=False before production use.

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

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:94
Finding
TLS Certificate Verification Disabled for Sensitive IVVR Requests## Vulnerability Details **File Location**: `SKILL.md`, lines 94–100 and 131–137 **Vulnerability Type**: Improper TLS certificate validation **Risk Level**: High ### Vulnerable Code ```python upload_resp = requests.post( upload_url, headers=headers, files=files, timeout=60, verify=False ) ``` ```python send_resp = requests.post( send_url, headers=headers, json=payload, timeout=30, verify=False ) ``` ### Technical Analysis Both outbound requests explicitly set `verify=False`, disabling validation of the server's TLS certificate. The upload request transmits signed authentication headers and the selected local video. The notification request transmits authentication headers, the recipient's phone number, caller information, and the uploaded file identifier. An active network attacker can present an arbitrary certificate without causing the client to reject the connection. Additionally, `BASE_URL` is supplied through an environment variable without an enforced HTTPS scheme or destination allowlist. If it is accidentally or maliciously configured with an HTTP URL, all request data may be transmitted without encryption. The Base64 operation elsewhere in the file encodes an HMAC digest for use as an authentication signature. It does not encode the video, phone number, access secret, or another source-data payload and is not, by itself, evidence of a covert exfiltration channel. Uploading the selected video and sending the recipient number are consistent with the Skill's declared IVVR functionality, but performing those operations without authenticated transport exceeds safe minimum-privilege expectations for sensitive data. ### Attack Path 1. An attacker obtains a network interception position, manipulates DNS or routing, or influences the configured `BASE_URL`. 2. The attacker redirects the Skill to an attacker-controlled endpoint or intercepts its connection to ...[truncated 1535 chars]
Remediation
## Remediation Suggestions 1. Remove `verify=False` from both `requests.post` calls so that certificate verification remains enabled by default: ```python upload_resp = requests.post( upload_url, headers=headers, files=files, timeout=60 ) ``` ```python send_resp = requests.post( send_url, headers=headers, json=payload, timeout=30 ) ``` 2. Parse and validate `BASE_URL` before use. Require the `https` scheme, reject embedded credentials and unexpected ports, and reject malformed or non-network URLs. 3. Restrict outbound requests to an explicit allowlist of approved IVVR hostnames. Do not permit arbitrary destinations through an unrestricted environment variable. 4. If the service uses a private certificate authority, configure `verify` with the path to the trusted CA bundle rather than disabling verification. 5. Protect against DNS rebinding and internal-network targeting where the runtime threat model permits attacker influence over configuration. Resolve and validate destinations according to the deployment's egress policy. 6. Enforce server-side timestamp expiration, one-time nonces or request identifiers, and replay detection for signed requests. Avoid relying only on a millisecond timestamp. 7. Limit egress at the runtime or container level so the Skill can connect only to the approved IVVR service over TLS. 8. Avoid returning raw exception details to untrusted callers where those details could expose endpoint, filesystem, or networking information. Log detailed diagnostics securely and return a generic failure message.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (5)

Unsafe Defaults

Medium
Category
Tool Misuse
Content
headers=headers,
                  files=files,
                  timeout=60,
                  verify=False
              )

          if upload_resp.status_code != 200:
Confidence
99% confidence
Finding
Disabling TLS certificate verification for the file upload request allows man-in-the-middle interception or tampering of the uploaded video, authentication headers, and server response. Because this request carries sensitive content and authentication material, an attacker on the network path could exfiltrate data or impersonate the remote service.

External Transmission

Medium
Category
Data Exfiltration
Content
"callees": [phone_number]
          }

          send_resp = requests.post(
              send_url,
              headers=headers,
              json=payload,
Confidence
88% confidence
Finding
The skill transmits the recipient phone number and uploaded file reference to an external notification service, and earlier uploads the actual local video file to that same service. External transmission is expected for this skill's function, but it still creates real privacy and data-governance risk if users are not warned or if sensitive local files are selected.

Unsafe Defaults

Medium
Category
Tool Misuse
Content
headers=headers,
              json=payload,
              timeout=30,
              verify=False
          )

          if send_resp.status_code != 200:
Confidence
99% confidence
Finding
Disabling TLS certificate verification for the notification request permits interception or modification of the phone number, file identifier, and authentication headers in transit. An active attacker could redirect notifications, harvest credentials, or spoof successful responses, undermining both confidentiality and integrity.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill sends a local video file and a recipient phone number to an external IVVR platform, but the user-facing description and usage section do not clearly disclose that data leaves the local environment. This can mislead users into providing sensitive files or personal data without informed consent, increasing privacy and data-handling risk.

Natural-Language Policy Violations

Low
Confidence
84% confidence
Finding
The natural-language description forces a specific language/locale experience and does not indicate that users may choose another language or that the skill is intentionally limited to a Chinese-speaking context. Under the stated policy, fixed language behavior without opt-in can be a policy violation.

Static analysis

No suspicious patterns detected.