Repository navigation
docs: Add SECURITY.md #934
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
6 commits
Select commit
Hold shift + click to select a range
01ff6c5
docs: Add SECURITY.md
mc-nv 0b6677d
docs: Address Greptile review on SECURITY.md
mc-nv a2a1717
docs: Simplify SECURITY.md
mc-nv 60c8e3b
docs: Use standard NVIDIA SECURITY.md
mc-nv 0ea7061
docs: Add vulnerability reporting guidance to SECURITY.md
mc-nv e69e521
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,165 @@ | ||
| <!-- | ||
| # 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** report security vulnerabilities through public GitHub | ||
| issues, discussions, or pull requests. | ||
|
|
||
| To report a potential security vulnerability in any NVIDIA product, use one | ||
| of the following channels: | ||
|
|
||
| * **NVIDIA Vulnerability Disclosure Program** (preferred): | ||
| [Security Vulnerability Submission Form](https://www.nvidia.com/en-us/security/) | ||
| * **Email:** [NVIDIA PSIRT](mailto:psirt@nvidia.com). Please encrypt the | ||
| message with NVIDIA's [public PGP key](https://www.nvidia.com/en-us/security/pgp-key). | ||
| * **GitHub Private Vulnerability Reporting:** use the **Security** tab of this | ||
| repository, where enabled. | ||
|
|
||
| **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, | ||
| buffer overflow, information disclosure) | ||
| 3. Step-by-step instructions to reproduce the issue | ||
| 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 | ||
| disclosure timeline with the reporter, and publishes security bulletins at | ||
| <https://www.nvidia.com/en-us/security/>. | ||
|
|
||
| ## Security Architecture and Context | ||
|
|
||
| **Project:** Triton Inference Server client libraries and examples. | ||
|
|
||
| **Software classification:** SDK / Library. This repository provides client | ||
| libraries that run inside the application of the person using them. It is not | ||
| a network service. | ||
|
|
||
| **Components:** | ||
|
|
||
| * C++ client library (`src/c++/library`): HTTP/REST client built on libcurl | ||
| (`http_client.cc`) and gRPC client built on gRPC C++ (`grpc_client.cc`), | ||
| plus POSIX shared-memory helpers (`shm_utils.cc`) and optional CUDA shared | ||
| memory support. | ||
| * Python client packages (`src/python/library/tritonclient`): HTTP, gRPC and | ||
| asyncio clients, tensor serialization helpers (`utils`), and system and CUDA | ||
| shared-memory modules. | ||
| * Java HTTP client (`src/java`), Rust client (`src/rust/triton-client`), and | ||
| generated gRPC bindings for Go, Java and JavaScript (`src/grpc_generated`). | ||
| * Example programs and tests under the `examples` and `tests` directories. | ||
|
|
||
| **Primary security responsibility:** correct and safe handling of data | ||
| exchanged with a Triton server: establishing the transport securely when the | ||
| caller enables it, parsing server responses without memory or resource | ||
| corruption, and managing shared-memory regions. | ||
|
|
||
| **Key security boundaries and interfaces:** | ||
|
|
||
| * Network boundary between the client process and a Triton server (HTTP/REST | ||
| and gRPC). | ||
| * Local boundary between the client process and shared-memory regions (POSIX | ||
| shared memory and CUDA IPC handles) that it creates and registers with the | ||
| server. | ||
| * Local API boundary between the library and the calling application, which | ||
| supplies URLs, headers, certificates and tensor data. | ||
|
|
||
| **Repository Exposure Classification:** Public. This repository is publicly | ||
| visible on GitHub. | ||
|
|
||
| **Service Exposure Classification:** Not determined (low confidence). The | ||
| libraries are deployed by third parties, so exposure depends on the | ||
| application and server they connect to. | ||
|
|
||
| ## Threat Model | ||
|
|
||
| 1. **Eavesdropping or tampering on unencrypted connections.** Both the HTTP | ||
| and gRPC clients default to plaintext (`ssl=False` in the Python clients; | ||
| the C++ clients use TLS only when `use_ssl` is set). Inference inputs, | ||
|
greptile-apps[bot] marked this conversation as resolved.
Outdated
|
||
| outputs and request headers, including any credentials a caller places in | ||
| them, can be read or modified by a network attacker. | ||
|
|
||
| 2. **Man-in-the-middle through weakened TLS verification.** The C++ HTTP | ||
| client exposes `SslOptions::verify_peer` and `verify_host` | ||
| (`http_client.cc`, passed to libcurl), and the Python HTTP client exposes an | ||
| `insecure` flag and caller-supplied `ssl_options`. Callers who disable | ||
| verification, or omit a CA bundle, allow server impersonation. | ||
|
greptile-apps[bot] marked this conversation as resolved.
Outdated
|
||
|
|
||
| 3. **Malicious or compromised server response.** Client code decodes | ||
| server-controlled data: JSON and binary-tensor payloads in | ||
| `http_client.cc` and `http/_infer_result.py`, protobuf responses and raw | ||
| output contents in `grpc/_infer_result.py` (`np.frombuffer`), and | ||
| length-prefixed BYTES tensors (`utils.deserialize_bytes_tensor`, | ||
| `struct.unpack_from`). A hostile server could send inconsistent shapes, | ||
| sizes or lengths, or compressed bodies (gzip, deflate) designed to | ||
| exhaust memory or trigger out-of-bounds reads. | ||
|
|
||
| 4. **Shared-memory abuse on the local host.** The C++ helpers create and map | ||
| POSIX shared-memory objects (`shm_open`, `mmap` in `shm_utils.cc`) and the | ||
| CUDA modules export `cudaIpcMemHandle_t` handles that are base64-encoded | ||
| and registered with the server. Other local users or processes that can | ||
| open a predictable key or obtain a handle may read or alter tensor data. | ||
| Regions that are not unlinked or unregistered remain accessible after the | ||
| client exits. | ||
|
|
||
| 5. **Unsafe handling of caller-supplied URLs, headers and file paths.** The | ||
| clients forward user-provided headers and query parameters to the server | ||
| and read certificate and key files named by the caller | ||
| (`grpc_client.cc` `ReadFile`). Applications that pass untrusted values | ||
| through these arguments can enable header injection or reads of unintended | ||
| files. | ||
|
|
||
| 6. **Vulnerable third-party dependencies.** The clients link against libcurl, | ||
| gRPC, protobuf, OpenSSL and, in Python, `numpy`, `grpcio`, `aiohttp` and | ||
| `geventhttpclient`. Known issues in those components affect client users. | ||
|
|
||
| ## Critical Security Assumptions | ||
|
|
||
| * **The network path is trusted unless TLS is enabled by the caller.** The | ||
| libraries do not enable TLS by default. Callers must enable it and supply | ||
| appropriate CA certificates for any untrusted network. | ||
| * **Authentication and authorization are performed by the server or proxy.** | ||
| The clients provide no credential management. They only pass headers or | ||
| channel credentials supplied by the caller. | ||
| * **The Triton server is trusted to return well-formed responses.** Response | ||
| size and structure are not independently bounded by the client beyond what | ||
| the underlying libraries enforce. Connect only to servers you trust. | ||
| * **Local users sharing a host are trusted for shared-memory use.** System | ||
| and CUDA shared memory rely on operating-system permissions and key | ||
| secrecy. Do not use them across a trust boundary between local users. | ||
| * **The calling application validates its own inputs.** URLs, header | ||
| values, file paths and tensor shapes passed to the library are assumed to | ||
| come from the trusted application, not directly from end users. | ||
| * **Dependencies are kept up to date by the integrator.** Users who build or | ||
| install the clients are responsible for tracking security updates to the | ||
| libraries listed above. | ||
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.