Back to skill

Security audit

YOLO26 OpenVINO for AI PCs

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent local OpenVINO/YOLO vision demo, but users should treat its camera use and unpinned Python dependencies cautiously.

Install in an isolated virtual environment without administrator privileges, review or pin the Python dependencies before use, and only run camera, people-counting, safety-zone, event-log, or output-video modes in settings where recording or monitoring is authorized.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Warning
Location
scripts/requirements.txt:1
Finding
Unpinned Third-Party Dependencies Permit Unreviewed Package Updates## Vulnerability Details **File Location**: `scripts/requirements.txt`, lines 1-7 **Vulnerability Type**: Unpinned and unhashed third-party dependencies **Risk Level**: Medium ### Vulnerable Code ```text numpy>=1.26 opencv-python>=4.10 openvino>=2025.0.0 nncf>=2.14.0 tqdm>=4.66 pyyaml>=6.0 ultralytics ``` The installation workflow is referenced in `SKILL.md`, lines 81-88: ```text - `setup_env.ps1`: create `.venv` and install Python dependencies. - `run_ultralytics_demo.ps1`: PowerShell wrapper for live, export, and benchmark modes. It exposes `-Model`, `-Precision`, `-Device`, OpenVINO performance hint, and async request controls. - `run_ultralytics_openvino_demo.py`: Ultralytics + OpenVINO implementation with runtime device and precision switching. - `run_downstream_demo.ps1`: PowerShell wrapper for person counting, object counting, and safety-zone alerts. - `run_downstream_demo.py`: downstream action layer on top of Ultralytics + OpenVINO detections. - `requirements.txt`: Python dependency list. - `demo_utils.py`: lightweight overlay helper. ``` ### Technical Analysis All declared dependencies allow versions that were not necessarily reviewed with this project. Six packages use open-ended minimum-version constraints, while `ultralytics` has no version constraint at all. The project also provides no lockfile or package hashes to authenticate the exact artifacts installed. Consequently, a fresh installation can resolve to dependency versions that differ from those used during development or audit. If an allowed upstream release or its distribution account is compromised, the resolver may install the compromised release without any change to this repository. Python package installation can execute package build hooks, and imported dependencies subsequently execute with the privileges of the user running the demonstration. No evidence indicates that the currently named packages are malicious. The vulnerability is the absence of controls ...[truncated 1523 chars]
Remediation
## Remediation Suggestions 1. Pin every direct dependency to an exact reviewed version, including `ultralytics`. 2. Generate a reproducible lockfile that includes all transitive dependencies. 3. Record cryptographic hashes for approved distribution artifacts and install with hash verification, such as `pip install --require-hashes`. 4. Resolve and build the lockfile from the official Python Package Index or another explicitly trusted internal mirror. 5. Prefer prebuilt wheels from trusted publishers and avoid source builds unless their build configuration has been reviewed. 6. Install dependencies inside an isolated virtual environment without administrative privileges. 7. Add automated dependency vulnerability and provenance scanning to the update process. 8. Review and test dependency updates before regenerating pins and hashes. 9. Where supported, verify package signatures or provenance attestations and retain a software bill of materials for released skill versions.
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (19)

Ae1

High
Category
analysis-evasion
Content
- `requirements.txt`: Python dependency list.
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill explicitly describes capabilities that require network access, environment setup, and local file creation/modification, but it declares no tool scope or permissions boundary in the manifest. This creates an authorization and transparency gap: an agent or user cannot easily determine what the skill is allowed to do before execution, increasing the risk of over-privileged or unexpected operations.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The skill instructs users to run live camera inference but does not clearly warn that it will access the device camera and process visual data from the surrounding environment. Even if inference is local, users or bystanders may be recorded or analyzed without informed consent, creating privacy and compliance risk.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The downstream safety-zone and counting demos are framed as operational features but do not clearly disclose that they may monitor people in video and trigger alerts based on presence or location. That omission can normalize human monitoring workflows without consent, leading to privacy, workplace surveillance, or misuse concerns.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
This code performs safety-relevant filesystem changes including copying model files, creating metadata, removing existing target directories with shutil.rmtree, and moving exported artifacts. While there are progress prints, they do not disclose the destructive behavior of deleting an existing target directory before replacement, so users are not clearly warned about potential data loss.

Unpinned Dependencies

Low
Category
Supply Chain
Content
numpy>=1.26
opencv-python>=4.10
openvino>=2025.0.0
nncf>=2.14.0
Confidence
83% confidence
Finding
Using 'numpy>=1.26' allows uncontrolled upgrades to future versions, making builds non-reproducible and potentially introducing vulnerable or incompatible releases. While this is not direct code execution by itself, it weakens supply-chain integrity and makes it harder to ensure users install a version that has been tested and is free of known issues.

Unverifiable Dependency: numpy has 16 known advisory(ies) (CVE-2014-1859 (Numpy arbitrary file write via symlink attack); CVE-2021-41495 (NumPy NULL Pointer Dereference); CVE-2021-33430 (NumPy Buffer Overflow (Disputed)) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
81% confidence
Finding
The manifest does not pin numpy, so it is impossible to determine whether installed environments will receive a release affected by one of its known advisories. This uncertainty is itself a supply-chain security weakness because consumers cannot reliably reproduce or audit the dependency set used by the skill.

Unpinned Dependencies

Low
Category
Supply Chain
Content
numpy>=1.26
opencv-python>=4.10
openvino>=2025.0.0
nncf>=2.14.0
tqdm>=4.66
Confidence
83% confidence
Finding
Using 'opencv-python>=4.10' permits installation of any newer release, including versions not validated by the skill author and potentially affected by future or existing vulnerabilities. Because this skill processes camera/video data on end-user machines, dependency compromise or unsafe native-code library updates could have meaningful local security impact.

Unverifiable Dependency: opencv-python has 16 known advisory(ies) (CVE-2017-12864 (Integer Overflow or Wraparound in OpenCV); CVE-2017-12598 (Out-of-bounds Read in OpenCV ); CVE-2019-14493 (NULL Pointer Dereference in OpenCV.) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
81% confidence
Finding
Because opencv-python is not pinned, users may install a version with known vulnerabilities and there is no way to verify safety from this manifest alone. Given that OpenCV includes native code and handles untrusted image/video inputs, unverifiable version selection is more concerning than for a pure utility package.

Unpinned Dependencies

Low
Category
Supply Chain
Content
numpy>=1.26
opencv-python>=4.10
openvino>=2025.0.0
nncf>=2.14.0
tqdm>=4.66
pyyaml>=6.0
Confidence
74% confidence
Finding
Using 'openvino>=2025.0.0' leaves the installed version open-ended, reducing reproducibility and making it difficult to verify that downstream users are not exposed to newly introduced flaws. In a hardware-accelerated inference workflow, this can also cause unsafe drift across CPU/GPU/NPU backends and broaden the attack surface through native components.

Unpinned Dependencies

Low
Category
Supply Chain
Content
numpy>=1.26
opencv-python>=4.10
openvino>=2025.0.0
nncf>=2.14.0
tqdm>=4.66
pyyaml>=6.0
ultralytics
Confidence
78% confidence
Finding
Using 'nncf>=2.14.0' without an upper bound or exact pin allows unreviewed versions into the environment, which undermines reproducibility and supply-chain assurance. Although there is no specific malicious advisory cited here, this still creates avoidable risk in a model optimization pipeline that may be deployed on user workstations.

Unpinned Dependencies

Low
Category
Supply Chain
Content
opencv-python>=4.10
openvino>=2025.0.0
nncf>=2.14.0
tqdm>=4.66
pyyaml>=6.0
ultralytics
Confidence
84% confidence
Finding
Using 'tqdm>=4.66' allows future or vulnerable versions to be installed, and tqdm has known security advisories including argument injection and prior code-execution concerns. Even though tqdm is often seen as low risk, unpinned dependencies can still become an attack path when users install the skill in fresh environments.

Unverifiable Dependency: tqdm has 4 known advisory(ies) (CVE-2024-34062 (tqdm CLI arguments injection attack); CVE-2016-10075 (TDQM Arbitrary Code Execution); CVE-2016-10075 (The tqdm._version module in tqdm versions 4.4.1 and 4.10 allows local users to e) +1 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
79% confidence
Finding
The unpinned tqdm dependency means the environment could resolve to versions affected by known advisories, and the manifest provides no assurance otherwise. While tqdm is not the core functionality of the skill, allowing unverifiable installation of known-affected versions is still a preventable security weakness.

Unpinned Dependencies

Low
Category
Supply Chain
Content
openvino>=2025.0.0
nncf>=2.14.0
tqdm>=4.66
pyyaml>=6.0
ultralytics
Confidence
86% confidence
Finding
Using 'pyyaml>=6.0' without a fixed version leaves room for vulnerable or incompatible releases to be installed. PyYAML has a history of unsafe deserialization issues, so leaving it unpinned increases the risk that deployments unknowingly consume a problematic version.

Unverifiable Dependency: pyyaml has 8 known advisory(ies) (CVE-2019-20477 (Deserialization of Untrusted Data in PyYAML); CVE-2020-1747 (Improper Input Validation in PyYAML); CVE-2020-14343 (Improper Input Validation in PyYAML) +5 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
85% confidence
Finding
The manifest leaves pyyaml unpinned despite known advisories involving unsafe deserialization, so consumers cannot tell whether a vulnerable release will be installed. In tooling ecosystems, configuration parsing libraries are common attack surfaces, making version uncertainty a meaningful risk.

Unpinned Dependencies

Low
Category
Supply Chain
Content
nncf>=2.14.0
tqdm>=4.66
pyyaml>=6.0
ultralytics
Confidence
96% confidence
Finding
The dependency 'ultralytics' is completely unpinned, so installation may resolve to any current release. This is especially dangerous here because ultralytics has a documented malicious-package advisory involving crypto miner software; in an AI/vision skill that users are likely to install and run locally, this creates a real supply-chain compromise risk.

Unverifiable Dependency: ultralytics has 1 known advisory(ies) (PYSEC-2024-154 (A number of releases of ultralytics contained malicious crypto miner software.)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
98% confidence
Finding
The manifest does not pin ultralytics even though it has a specific advisory for malicious crypto miner software in some releases. In the context of an AI PC skill that instructs users to install and run this package locally, failing to constrain the version substantially increases the chance of supply-chain compromise on developer or user machines.

Missing User Warnings

Low
Confidence
86% confidence
Finding
The skill appends timestamped event data to a CSV file via `append_event`, and the default path is configured through `--event-log`. In this file there is no confirmation prompt, warning comment, or user-facing disclosure near the write operation that alerts users that activity summaries will be persisted to disk.

Missing User Warnings

Low
Confidence
88% confidence
Finding
When `--output-video` is provided, the script creates directories and writes an MP4 recording of processed frames. The code does not display a confirmation prompt or explicit runtime warning indicating that camera/video content will be saved to disk, which is relevant to user data and privacy.

Static analysis

No suspicious patterns detected.