Repository navigation
docs: Add SECURITY.md #126
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 1 commit
Commits
Show all changes
7 commits
Select commit
Hold shift + click to select a range
8399c01
docs: Add SECURITY.md
mc-nv 877ce89
docs: Address SECURITY.md review findings
mc-nv 59b7eb6
docs: Address Greptile review on SECURITY.md
mc-nv c3857ae
docs: Simplify SECURITY.md
mc-nv 6d8ab91
docs: Use standard NVIDIA SECURITY.md
mc-nv 3fc78d6
docs: Add vulnerability reporting guidance to SECURITY.md
mc-nv 6799421
docs: Adopt current NVIDIA SECURITY.md template
mc-nv File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,150 @@ | ||
| <!-- | ||
| # Copyright 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. | ||
| # | ||
| # Redistribution and use in source and binary forms, with or without | ||
| # modification, are permitted provided that the following conditions | ||
| # are met: | ||
| # * Redistributions of source code must retain the above copyright | ||
| # notice, this list of conditions and the following disclaimer. | ||
| # * Redistributions in binary form must reproduce the above copyright | ||
| # notice, this list of conditions and the following disclaimer in the | ||
| # documentation and/or other materials provided with the distribution. | ||
| # * Neither the name of NVIDIA CORPORATION nor the names of its | ||
| # contributors may be used to endorse or promote products derived | ||
| # from this software without specific prior written permission. | ||
| # | ||
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY | ||
| # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
| # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
| # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
| # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
| # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
| # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||
| # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | ||
| # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
| # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
| # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| --> | ||
|
|
||
| # Security Policy | ||
|
|
||
| ## Reporting a Vulnerability | ||
|
|
||
| Please do **not** open a public GitHub issue for a suspected vulnerability. | ||
| Report it through one of the following channels: | ||
|
|
||
| 1. **NVIDIA Vulnerability Disclosure Program (preferred):** | ||
| <https://www.nvidia.com/en-us/security/> | ||
| 2. **Email:** [psirt@nvidia.com](mailto:psirt@nvidia.com). Please encrypt the | ||
| report with the [NVIDIA PGP key](https://www.nvidia.com/en-us/security/pgp-key). | ||
| 3. **GitHub Private Vulnerability Reporting:** use the "Report a vulnerability" | ||
| button on the Security tab of this repository. | ||
|
|
||
| **OEM partners should contact their NVIDIA Customer Program Manager.** | ||
|
|
||
| Please include: | ||
|
|
||
| 1. Product name and version or branch that contains the vulnerability | ||
| 2. Type of vulnerability (for example code execution, denial of service, | ||
| memory corruption) | ||
| 3. Steps to reproduce | ||
| 4. Proof-of-concept or exploit code, if available | ||
| 5. Potential impact, including how an attacker could exploit the issue | ||
|
|
||
| NVIDIA PSIRT acknowledges reports, assesses severity, coordinates a fix and | ||
| publishes a security bulletin where appropriate. See | ||
| <https://www.nvidia.com/en-us/security/> for past bulletins and notices. | ||
|
|
||
| Vulnerabilities in the OpenVINO runtime itself should also be reported to the | ||
| OpenVINO project. This backend is co-maintained by NVIDIA and Intel. | ||
|
|
||
| ## Security Architecture and Context | ||
|
|
||
| **Project:** Triton OpenVINO Backend, a C++ plugin | ||
| (`libtriton_openvino.so`) for the Triton Inference Server that runs models | ||
| through the OpenVINO C++ API. | ||
|
|
||
| **Classification:** Library / plugin. It is loaded in-process by the Triton | ||
| server through the `TRITONBACKEND_*` API and has no network listener, command | ||
| line interface or authentication logic of its own. | ||
|
|
||
| **Repository Exposure Classification:** Public. Basis: the repository is | ||
| publicly visible on GitHub. | ||
|
|
||
| **Service Exposure Classification:** Not determined (low confidence). Basis: | ||
| the backend is a component whose exposure depends on how the hosting Triton | ||
| server is deployed; no regulatory scope can be derived from this repository | ||
| alone. | ||
|
|
||
| **Primary security responsibility:** safely load model artifacts that were | ||
| placed in a Triton model repository, validate tensor shapes and sizes taken from | ||
| inference requests against the model configuration, and execute inference on | ||
| the OpenVINO CPU plugin without corrupting host memory. | ||
|
|
||
| **Key interfaces and boundaries:** | ||
|
|
||
| - **Model repository (file system):** `src/openvino.cc` resolves | ||
| `<repository>/<version>/<artifact>` (default `model.xml`) and passes it to | ||
| `ov::Core::read_model`. OpenVINO parses IR, ONNX, TensorFlow SavedModel, | ||
| TensorFlow Lite and PaddlePaddle formats from this path. | ||
| - **Model configuration (`config.pbtxt`):** `parameters` such as | ||
| `INFERENCE_NUM_THREADS`, `NUM_STREAMS`, `PERFORMANCE_HINT`, | ||
| `RESHAPE_IO_LAYERS` and `SKIP_OV_DYNAMIC_BATCHSIZE`, and input/output | ||
| `reshape` entries, are parsed by `ParseParameters` and `ParseShape`. | ||
| - **Inference requests:** input tensors reach the backend through the Triton | ||
| core (`BackendInputCollector`) and are copied into OpenVINO tensors. | ||
| - **Backend configuration:** the `cmdline` block from | ||
| `TRITONBACKEND_BackendConfig` is parsed at backend initialization. | ||
| - **Build and packaging:** `tools/gen_openvino_dockerfile.py` and | ||
| `Dockerfile.drivers` fetch and build OpenVINO from its upstream sources. | ||
|
|
||
| ## Threat Model | ||
|
|
||
| 1. **Malicious or corrupted model artifact:** an attacker who can write to the | ||
| model repository supplies a crafted IR, ONNX, TFLite, SavedModel or Paddle | ||
| file. The file is parsed by `ov::Core::read_model` in `ModelState::ReadModel` | ||
| inside the Triton server process, so a parser flaw in OpenVINO can lead to | ||
| memory corruption or code execution with the server's privileges. | ||
| 2. **Untrusted model configuration values:** `config.pbtxt` parameters and | ||
| `reshape` dimensions are converted to OpenVINO properties and shapes | ||
| (`ParseParameterHelper`, `ParseShape`). Extreme thread, stream or dimension | ||
| values can cause resource exhaustion or integer-overflow in size | ||
| calculations. | ||
| 3. **Malformed inference requests:** request tensors are copied into | ||
| OpenVINO input tensors in `ProcessInputs`. A mismatch between the declared | ||
| shape and the byte size supplied by the client could cause an out-of-bounds | ||
| read or write. The backend compares the expected and received byte sizes | ||
| before use; this check is the main control. | ||
|
greptile-apps[bot] marked this conversation as resolved.
Outdated
|
||
| 4. **Denial of service through inference load:** large or dynamically shaped | ||
| batches, unbounded request concurrency and expensive models can exhaust CPU | ||
| and memory on the host shared with other models. | ||
| 5. **Supply-chain compromise of the build:** the generated Dockerfile clones | ||
| OpenVINO by tag with submodules and installs Python build tools from package | ||
| registries without pinned hashes for all components. A compromised upstream | ||
| or mutable tag would affect the shipped binary. | ||
| 6. **Information disclosure through error messages and logs:** error strings | ||
| include model file paths and OpenVINO exception text, which may expose the | ||
| repository layout to clients that can read server errors. | ||
|
|
||
| ## Critical Security Assumptions | ||
|
|
||
| - **Model repository is trusted.** The backend does not sandbox or verify model | ||
| files. Operators must restrict write access to the repository and obtain | ||
| models only from trusted sources. | ||
| - **The Triton server provides authentication, authorization and TLS.** This | ||
| backend implements none of them and assumes requests have been authenticated | ||
| and rate-limited before they arrive. | ||
|
greptile-apps[bot] marked this conversation as resolved.
Outdated
|
||
| - **The OpenVINO runtime is trusted and kept up to date.** Model parsing is | ||
| delegated to it; vulnerabilities in OpenVINO are inherited by this backend. | ||
| - **Shape and size validation depends on a correct model configuration.** | ||
| Operators must keep `config.pbtxt` consistent with the deployed model. | ||
| - **The server process runs with least privilege** and with resource limits | ||
| (memory, CPU, file descriptors), because the backend runs in-process and does | ||
| not isolate faults. | ||
| - **Build inputs are trusted.** Builds assume the upstream OpenVINO source and | ||
| base images are authentic. | ||
|
|
||
| ## Supported Versions | ||
|
|
||
| Security fixes are made on the `main` branch and the most recent Triton release | ||
| branch. Use the backend release that matches your Triton container version. | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.