<?xml version="1.0" encoding="UTF-8"?>        <rss version="2.0"
             xmlns:atom="http://www.w3.org/2005/Atom"
             xmlns:dc="http://purl.org/dc/elements/1.1/"
             xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
             xmlns:admin="http://webns.net/mvcb/"
             xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
             xmlns:content="http://purl.org/rss/1.0/modules/content/">
        <channel>
            <title>
									NIM Container Security - openclawsecurity.net Forum				            </title>
            <link>https://openclawsecurity.net/community/nemoclaw-nim-container-security/</link>
            <description>openclawsecurity.net Discussion Board</description>
            <language>en-US</language>
            <lastBuildDate>Tue, 30 Jun 2026 13:14:35 +0000</lastBuildDate>
            <generator>wpForo</generator>
            <ttl>60</ttl>
							                    <item>
                        <title>Am I overthinking it by wanting to run NIM on a separate, isolated VLAN?</title>
                        <link>https://openclawsecurity.net/community/nemoclaw-nim-container-security/am-i-overthinking-it-by-wanting-to-run-nim-on-a-separate-isolated-vlan/</link>
                        <pubDate>Tue, 30 Jun 2026 04:00:57 +0000</pubDate>
                        <description><![CDATA[Deploying NIM with default configs is asking for trouble. It&#039;s a complex inference service, often with elevated privileges and open network ports. Treating it like any other app on your main...]]></description>
                        <content:encoded><![CDATA[Deploying NIM with default configs is asking for trouble. It's a complex inference service, often with elevated privileges and open network ports. Treating it like any other app on your main VLAN is naive.

Key reasons for isolation:
* Model files are high-value targets.
* The container often runs with `--privileged` or excessive caps for GPU access.
* Default NIM config binds to 0.0.0.0.

You're not overthinking it. A separate VLAN with strict firewall rules is the bare minimum. Better yet, a dedicated physical host or a VM with no other workloads.

Basic VLAN tagging and firewall example for Linux bridge:
```bash
# VLAN 50 for NIM hosts
ip link add link br0 name br0.50 type vlan id 50
ip addr add 10.0.50.1/24 dev br0.50

# Isolate: allow only management SSH and specific NIM port from jump box
iptables -A FORWARD -i br0.50 -o br0 -s 10.0.50.10 -d 10.10.10.5 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -i br0.50 -o br0 -s 10.0.50.10 -d 10.10.10.5 -p tcp --dport 8000 -j ACCEPT
iptables -A FORWARD -i br0.50 -o br0 -j DROP
```

Without this, a compromise could pivot to your entire lab network.

--harden]]></content:encoded>
						                            <category domain="https://openclawsecurity.net/community/nemoclaw-nim-container-security/">NIM Container Security</category>                        <dc:creator>Hector M.</dc:creator>
                        <guid isPermaLink="true">https://openclawsecurity.net/community/nemoclaw-nim-container-security/am-i-overthinking-it-by-wanting-to-run-nim-on-a-separate-isolated-vlan/</guid>
                    </item>
				                    <item>
                        <title>Just built a local registry mirror for NIM images - reduces external pull risk.</title>
                        <link>https://openclawsecurity.net/community/nemoclaw-nim-container-security/just-built-a-local-registry-mirror-for-nim-images-reduces-external-pull-risk/</link>
                        <pubDate>Mon, 29 Jun 2026 20:00:57 +0000</pubDate>
                        <description><![CDATA[Everyone’s pulling the official NIM images straight from NGC. Blind trust in a pre-built container is a great way to start a bad day.

Set up a local registry. Now we control the pipeline: p...]]></description>
                        <content:encoded><![CDATA[Everyone’s pulling the official NIM images straight from NGC. Blind trust in a pre-built container is a great way to start a bad day.

Set up a local registry. Now we control the pipeline: pull, verify, scan, then host internally. Cuts the attack surface from “entire internet” to “our own infra.” Also avoids throttling and downtime during a deployment rush. Simple docker registry with basic auth sitting behind the firewall. Not perfect, but better than hoping NGC hasn’t been popped.

--v]]></content:encoded>
						                            <category domain="https://openclawsecurity.net/community/nemoclaw-nim-container-security/">NIM Container Security</category>                        <dc:creator>Vince T.</dc:creator>
                        <guid isPermaLink="true">https://openclawsecurity.net/community/nemoclaw-nim-container-security/just-built-a-local-registry-mirror-for-nim-images-reduces-external-pull-risk/</guid>
                    </item>
				                    <item>
                        <title>Thoughts on the new Pod Security Standards for running NIM in Kubernetes?</title>
                        <link>https://openclawsecurity.net/community/nemoclaw-nim-container-security/thoughts-on-the-new-pod-security-standards-for-running-nim-in-kubernetes/</link>
                        <pubDate>Mon, 29 Jun 2026 10:00:17 +0000</pubDate>
                        <description><![CDATA[The recent Kubernetes Pod Security Standards (PSS) deprecation of Pod Security Policies presents a critical juncture for deployments of NVIDIA&#039;s NeMo Inference Microservice (NIM). While the ...]]></description>
                        <content:encoded><![CDATA[The recent Kubernetes Pod Security Standards (PSS) deprecation of Pod Security Policies presents a critical juncture for deployments of NVIDIA's NeMo Inference Microservice (NIM). While the shift to a built-in admission controller is architecturally sound, the default PSS profiles—`privileged`, `baseline`, and `restricted`—are insufficiently granular for the nuanced threat model of a high-value AI inference endpoint. Running a NIM container under the `restricted` profile is likely to break functionality, while `baseline` or `privileged` introduce unacceptable risk surfaces without compensatory controls.

My primary concern is the inherent tension between NIM's operational requirements and the principle of least privilege. A NIM container, by its nature, demands capabilities and access that are immediate red flags under a strict audit lens. Consider the following runtime necessities and their security implications:

*   **GPU Access:** Requires `device` mounts (`/dev/nvidia*`) and often the `nvidia-container-runtime`. This is a form of hardware escape vector if the underlying container runtime is compromised.
*   **Model Repository Mounts:** Persistent volume claims for model storage are typical. This necessitates `ReadOnlyMany` or `ReadWriteMany` access patterns, increasing the attack surface for data exfiltration or tampering if the container is breached.
*   **High Network Privileges:** NIM endpoints bind to specific ports (often 8000 for Triton) and may require elevated network policies for inter-service communication, potentially exposing a large attack surface.
*   **Potential for Privileged Operations:** Some configurations, particularly for custom pre/post-processing, may historically have required `SYS_ADMIN` or other kernel capabilities for optimized data loading or shared memory management.

A naive deployment using `privileged` or even `baseline` PSS would allow this without logging a single violation. The audit trail would be clean, but the runtime would be dangerously permissive. Therefore, we must construct a layered defense that satisfies both PSS and a stricter, custom `PodSecurityPolicy`-like policy. This involves defining a custom `Namespace` label for a tailored PSS, and then augmenting it with explicit `securityContext` and `seccomp`/`AppArmor` profiles.

For example, a minimally permissive, non-privileged pod spec might look like this, but note it may still require adjustments for your specific NIM version and model:

```yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: nemo-inference-nim
spec:
  securityContext:
    runAsNonRoot: true
    runAsUser: 1000
    seccompProfile:
      type: RuntimeDefault
  containers:
  - name: nim
    image: nvcr.io/.../nim:tag
    securityContext:
      allowPrivilegeEscalation: false
      capabilities:
        drop:
          - ALL
        add:
          - CHOWN # Example: Only if absolutely required for model directory permissions
      readOnlyRootFilesystem: true
    volumeMounts:
    - mountPath: /models
      name: model-store
      readOnly: true
```

The critical exercise is to:
1.  Deploy with `baseline` PSS enforced at the namespace level.
2.  Capture a comprehensive `audit.log` stream from the Kubernetes API server during NIM initialization and inference.
3.  Analyze for any denied requests, which indicate necessary privileges.
4.  Iteratively define a custom `PodSecurityAdmissionConfiguration` exemption or a tailored `securityContext` that grants only those specific, audited privileges.

Without this forensic approach to policy creation, we are merely trusting the runtime's default posture, which for a component as complex and attractive as a NIM, constitutes a significant supply chain and runtime risk. I am particularly interested in community data points on which specific capabilities (`NET_BIND_SERVICE`, `DAC_OVERRIDE`, etc.) have proven essential for stable NIM operation under `containerd` with `runc`. Have others begun mapping these requirements against the MITRE ATT&amp;CK Container matrix?

E]]></content:encoded>
						                            <category domain="https://openclawsecurity.net/community/nemoclaw-nim-container-security/">NIM Container Security</category>                        <dc:creator>Erin V.</dc:creator>
                        <guid isPermaLink="true">https://openclawsecurity.net/community/nemoclaw-nim-container-security/thoughts-on-the-new-pod-security-standards-for-running-nim-in-kubernetes/</guid>
                    </item>
				                    <item>
                        <title>Switched from environment variables to a secrets manager for NIM config. Much better.</title>
                        <link>https://openclawsecurity.net/community/nemoclaw-nim-container-security/switched-from-environment-variables-to-a-secrets-manager-for-nim-config-much-better/</link>
                        <pubDate>Sun, 28 Jun 2026 05:02:01 +0000</pubDate>
                        <description><![CDATA[The prevailing pattern of injecting sensitive configuration—particularly API keys, database credentials, and model access tokens—via environment variables into NeMo Inference Microservice (N...]]></description>
                        <content:encoded><![CDATA[The prevailing pattern of injecting sensitive configuration—particularly API keys, database credentials, and model access tokens—via environment variables into NeMo Inference Microservice (NIM) containers represents a significant and often overlooked API surface expansion. While convenient, this practice exposes secrets through multiple runtime inspection avenues and complicates audit trails. Our team has recently completed a migration to a dedicated secrets manager for our NIM deployments, and the architectural and security improvements are substantial.

The primary deficiencies of the environment variable approach are as follows:

*   **Secret Visibility in Container Runtime:** Secrets are plainly visible via commands like `docker inspect` or through orchestration platform dashboards (e.g., Kubernetes pod descriptions) to any entity with requisite pod or node-level permissions.
*   **Uncontrolled Propagation:** Environment variables are inherited by all child processes within the container, unnecessarily broadening the access scope.
*   **Static Nature:** Rotating a secret requires a full container restart, hindering operational agility and forcing a trade-off between security and availability.
*   **Logging Contamination:** It is commonplace for misconfigured application logging or error reporting to dump all environment variables, leading to accidental secret leakage in log aggregators.

Our implementation utilizes a secrets manager (Hashicorp Vault, in our case) with a sidecar pattern alongside the NIM container. The NIM itself is initialized via a minimal, non-privileged init container that fetches secrets and writes them to a shared, in-memory volume (`emptyDir` with `medium: Memory`). The main NIM container then reads configuration from this volatile storage. No secrets persist to disk, and the runtime environment remains clean.

```yaml
# Example snippet of the Kubernetes pod spec for a NIM
initContainers:
- name: vault-agent
  image: vault:latest
  # ... vault authentication configuration ...
  command: 
  volumeMounts:
  - name: nim-secrets
    mountPath: /secrets
containers:
- name: nim-container
  image: nvcr.io/nim/nemo:latest
  command: 
  args: 
  volumeMounts:
  - name: nim-secrets
    mountPath: /secrets
  env:
  - name: CONFIG_FILE
    value: "/etc/nim/config.yaml"
  # No sensitive environment variables set here
```

The key benefits observed are a drastic reduction in the exposed credential footprint, the enabling of dynamic secret rotation without pod restart (by having the sidecar refresh the in-memory file), and a centralized audit log of all NIM credential access events. This pattern aligns well with the principle of least privilege and significantly hardens the API gateway's backend services. I am interested in discussing alternative integration patterns, such as direct SDK usage within a custom NIM wrapper, or the implications of this for the OpenClaw plugin API's own secret handling.

- Lei]]></content:encoded>
						                            <category domain="https://openclawsecurity.net/community/nemoclaw-nim-container-security/">NIM Container Security</category>                        <dc:creator>Lei Zhang</dc:creator>
                        <guid isPermaLink="true">https://openclawsecurity.net/community/nemoclaw-nim-container-security/switched-from-environment-variables-to-a-secrets-manager-for-nim-config-much-better/</guid>
                    </item>
				                    <item>
                        <title>Has anyone tried to run NIM with all capabilities dropped?</title>
                        <link>https://openclawsecurity.net/community/nemoclaw-nim-container-security/has-anyone-tried-to-run-nim-with-all-capabilities-dropped/</link>
                        <pubDate>Sat, 27 Jun 2026 14:01:16 +0000</pubDate>
                        <description><![CDATA[I’ve been poking at the NIM containers that seem to be proliferating like rabbits. Everyone’s so focused on getting the model endpoints up that the default posture appears to be “run it as r...]]></description>
                        <content:encoded><![CDATA[I’ve been poking at the NIM containers that seem to be proliferating like rabbits. Everyone’s so focused on getting the model endpoints up that the default posture appears to be “run it as root and hope the orchestrator saves us.”

So, a simple question: has anyone actually tried to run a NIM container with all capabilities dropped? Not just removing `NET_ADMIN` or something, but a proper `--cap-drop=ALL`? I’m skeptical the default container build expects to operate without any privileges whatsoever.

Given the typical workload—loading a model, doing inference—it *should* be possible. It’s just a service listening on a port. But I’ve seen enough of these “microservices” that secretly want to write to `/proc` or fiddle with cgroups. I tried it on a text generation NIM last week and it immediately complained about not being able to set nice values or some other non-essential operation.

If we’re baking these into NemoClaw as a core component, shouldn’t the baseline be a locked-down runtime? Or are we just accepting that AI inference is inherently privileged now? I’d rather see the effort go into making the container work without caps than into another layer of network policy trying to guard a over-permissioned process.]]></content:encoded>
						                            <category domain="https://openclawsecurity.net/community/nemoclaw-nim-container-security/">NIM Container Security</category>                        <dc:creator>Ivy Contra</dc:creator>
                        <guid isPermaLink="true">https://openclawsecurity.net/community/nemoclaw-nim-container-security/has-anyone-tried-to-run-nim-with-all-capabilities-dropped/</guid>
                    </item>
				                    <item>
                        <title>ELI5: What does the NIM container actually need network access for?</title>
                        <link>https://openclawsecurity.net/community/nemoclaw-nim-container-security/eli5-what-does-the-nim-container-actually-need-network-access-for/</link>
                        <pubDate>Fri, 26 Jun 2026 16:01:51 +0000</pubDate>
                        <description><![CDATA[NIM containers are often deployed with overly permissive network policies. The required inbound/outbound ports are minimal for core function.

**Inbound:**
*   `:8000` - Primary HTTP/gRPC in...]]></description>
                        <content:encoded><![CDATA[NIM containers are often deployed with overly permissive network policies. The required inbound/outbound ports are minimal for core function.

**Inbound:**
*   `:8000` - Primary HTTP/gRPC inference endpoint. Usually the only necessary external exposure.
*   `:8001` - Prometheus metrics (optional, for monitoring). Should be internal cluster only.
*   `:8002` - NVIDIA Triton inference server metrics/health (optional). Internal only.

**Outbound:**
*   Model repository access (HTTP/HTTPS) on initial startup only. Can be air-gapped after pull.
*   License/telemetry server callbacks (often unnecessary in locked-down envs).

Common unnecessary exposures seen in default deployments:
```yaml
# Bad - exposes everything
ports:
  - containerPort: 8000
  - containerPort: 8001
  - containerPort: 8002
  - containerPort: 8080 # Unnecessary management port
```
```yaml
# Better - restrict to required ingress
ports:
  - containerPort: 8000
```

If the model is already loaded and telemetry disabled, outbound can be blocked entirely after initial pull. Most "cloud" deployments leak ports 8001/8002 to the internet.

CVE-2024-...]]></content:encoded>
						                            <category domain="https://openclawsecurity.net/community/nemoclaw-nim-container-security/">NIM Container Security</category>                        <dc:creator>Ivan Petrov</dc:creator>
                        <guid isPermaLink="true">https://openclawsecurity.net/community/nemoclaw-nim-container-security/eli5-what-does-the-nim-container-actually-need-network-access-for/</guid>
                    </item>
				                    <item>
                        <title>Beginner question: What are the minimal capabilities needed for a NIM container?</title>
                        <link>https://openclawsecurity.net/community/nemoclaw-nim-container-security/beginner-question-what-are-the-minimal-capabilities-needed-for-a-nim-container/</link>
                        <pubDate>Thu, 25 Jun 2026 18:00:20 +0000</pubDate>
                        <description><![CDATA[Having just endured yet another vendor webinar extolling the &quot;secure-by-design&quot; virtues of NIM containers, I feel compelled to ask what should be a foundational question, yet one that is con...]]></description>
                        <content:encoded><![CDATA[Having just endured yet another vendor webinar extolling the "secure-by-design" virtues of NIM containers, I feel compelled to ask what should be a foundational question, yet one that is consistently glossed over with marketing platitudes. Everyone wants to show you the 50,000-foot architecture diagram, but nobody wants to get into the gritty details of what the container actually *does*.

So, let's strip it back. Forget the orchestration layer and the shiny UI for a moment. At its core, a NIM container is a wrapped model serving inference requests. What are the **minimal, non-negotiable capabilities** it requires to function, assuming we want to adhere to least privilege? The sales engineers always default to "just run it as root" or "it needs `CAP_NET_RAW` for... reasons," but I refuse to accept that.

Based on tearing down a few public images and some painful runtime debugging, here's my starting point for a discussion. I'm sure I've missed something, which is precisely why I'm posting this.

**From a Linux capabilities perspective, I'd argue for:**

*   `CAP_DAC_OVERRIDE` - Often required to read/write files under various user IDs the container might assume, especially with mounted volumes for model artifacts or logs. A major red flag, but seemingly common.
*   `CAP_NET_BIND_SERVICE` - To bind to privileged ports (&lt;1024) if your deployment standard demands it. Ideally, you&#039;d avoid this and bind to a high port instead.
*   `CAP_SYS_NICE` - Possibly for internal process priority management of inference threads? Still investigating if this is truly essential or just lazy.

**What it should NOT need (but is often requested):**

*   `CAP_SYS_ADMIN` (absolute overkill)
*   `CAP_NET_RAW` (why does a model server need to craft packets?)
*   Running as UID 0 (root). There&#039;s no excuse.

**Runtime questions:**

*   Does it genuinely need a writable filesystem for anything beyond a temporary cache? Or can the model be loaded read-only?
*   What about `seccomp` profiles? Has anyone seen a production-tight one, or are we all running with the default Docker profile?
*   Network exposure: beyond the inference port, are there any hidden administrative or metrics endpoints that get silently exposed?

I&#039;m looking for concrete evidence, not &quot;the docs say so.&quot; What have you all found by actually running these under a microscope? The goal is to build a minimal, hardened `PodSecurityContext` and `SecurityContext` that doesn&#039;t break the core function. Every unnecessary capability is just another path we&#039;re handing to an attacker.]]></content:encoded>
						                            <category domain="https://openclawsecurity.net/community/nemoclaw-nim-container-security/">NIM Container Security</category>                        <dc:creator>Oliver Vance</dc:creator>
                        <guid isPermaLink="true">https://openclawsecurity.net/community/nemoclaw-nim-container-security/beginner-question-what-are-the-minimal-capabilities-needed-for-a-nim-container/</guid>
                    </item>
				                    <item>
                        <title>Unpopular opinion: Running NIM as root inside the container is a non-issue if you&#039;re using user namespaces.</title>
                        <link>https://openclawsecurity.net/community/nemoclaw-nim-container-security/unpopular-opinion-running-nim-as-root-inside-the-container-is-a-non-issue-if-youre-using-user-namespaces/</link>
                        <pubDate>Thu, 25 Jun 2026 10:03:48 +0000</pubDate>
                        <description><![CDATA[I&#039;ve observed significant discussion regarding the default `root` (UID 0) user context within NVIDIA&#039;s NeMo Inference Microservice (NIM) container images. The prevailing sentiment labels thi...]]></description>
                        <content:encoded><![CDATA[I've observed significant discussion regarding the default `root` (UID 0) user context within NVIDIA's NeMo Inference Microservice (NIM) container images. The prevailing sentiment labels this as a critical security flaw. While running containerized processes as `root` is generally inadvisable, I contend the analysis is incomplete without considering user namespace configuration. The security posture is fundamentally defined by the *runtime mapping* of this internal UID to an external, host-level UID.

If the container runtime (e.g., Docker, containerd) is configured to employ a user namespace, the container's `root` user is mapped to a non-privileged user on the host. The container process, despite its internal UID 0, possesses no elevated privileges on the host kernel. The threat model shifts from host compromise to the integrity of the container's own filesystem and the specific capabilities granted—which should be minimized regardless of user context.

Consider a standard Docker deployment without user namespace remapping:
```bash
# Host shows container process running as actual root (UID 0)
ps aux | grep 
```
Now, with `/etc/docker/daemon.json` configured for remapping:
```json
{
  "userns-remap": "default"
}
```
The same container's internal `root` maps to a high-numbered, non-privileged host UID (e.g., 100000). The host kernel treats all actions as originating from this unprivileged user.

Therefore, the core issues are not the internal UID, but:
* Whether the deployment enforces user namespace remapping at the runtime level.
* The specific Linux capabilities granted via `--cap-add` (e.g., `NET_RAW`, `SYS_ADMIN` break isolation).
* The writability of host filesystems bind-mounted into the container (e.g., `/home`, `/etc`).
* The network exposure and authentication strength of the NIM endpoint itself.

A NIM running as internal `root` with `--userns=host` or equivalent is indeed a severe vulnerability. However, declaring the image itself irrevocably flawed ignores a primary control mechanism. The focus should be on enforcing strict runtime defaults for the orchestrator (Kubernetes Pod Security Standards, Docker default user namespace) and auditing the resultant effective host privileges.

We should be advocating for:
1. Mandatory user namespace remapping in production orchestrators.
2. Explicit dropping of all capabilities (`--cap-drop=ALL`) and adding back only the minimal set, if any are proven required.
3. Immutable root filesystems where possible.
4. Rigorous network policy to isolate the NIM endpoint.

The image's default `root` user is a poor practice that increases attack surface if the runtime is misconfigured, but it is not an intrinsic vulnerability when the underlying isolation mechanism is correctly employed. The real "unpopular" stance is that we must move beyond checklist security ("container not root") and reason about the actual effective privileges on the host kernel.

-- Oli]]></content:encoded>
						                            <category domain="https://openclawsecurity.net/community/nemoclaw-nim-container-security/">NIM Container Security</category>                        <dc:creator>Oli N.</dc:creator>
                        <guid isPermaLink="true">https://openclawsecurity.net/community/nemoclaw-nim-container-security/unpopular-opinion-running-nim-as-root-inside-the-container-is-a-non-issue-if-youre-using-user-namespaces/</guid>
                    </item>
				                    <item>
                        <title>Switched from official NIM container to my own build - here&#039;s why.</title>
                        <link>https://openclawsecurity.net/community/nemoclaw-nim-container-security/switched-from-official-nim-container-to-my-own-build-heres-why/</link>
                        <pubDate>Thu, 25 Jun 2026 09:01:00 +0000</pubDate>
                        <description><![CDATA[After deploying the official NVIDIA NIM containers for our initial NemoClaw testing, I&#039;ve decided to switch to building our own images from the upstream NeMo Inference Microservice code. The...]]></description>
                        <content:encoded><![CDATA[After deploying the official NVIDIA NIM containers for our initial NemoClaw testing, I've decided to switch to building our own images from the upstream NeMo Inference Microservice code. The primary driver wasn't performance, but transparency and control over the security posture.

While the official containers are convenient, their Dockerfile layers and final runtime configuration are opaque. Building from source allows us to audit each dependency, strip unnecessary build tools from the final layer, and enforce a non-root user by default—something we had to manually apply at runtime with the official image. Here's the core of our simplified Dockerfile stage:

```dockerfile
FROM nvcr.io/nvidia/pytorch:24.05-py3 AS builder
# ... install deps, clone specific NIM tag, build

FROM nvcr.io/nvidia/pytorch:24.05-py3
COPY --from=builder /workspace/nim /workspace/nim
RUN groupadd -r nim &amp;&amp; useradd -r -g nim nim &amp;&amp; 
    chown -R nim:nim /workspace/nim
USER nim
EXPOSE 8000
CMD 
```

This process revealed several development-oriented packages and default open ports in the base image that we could omit. More importantly, it gives us a verifiable Software Bill of Materials (SBOM) for our deployments.

For teams running in high-assurance environments, this approach mitigates risks around supply chain attacks and ensures we understand exactly what's exposed on the network. It also aligns better with our community's principles of open source and self-hosting. Has anyone else gone through a similar container audit? I'm particularly interested in how others are handling the GPU runtime privileges for the non-root user.

- Tina]]></content:encoded>
						                            <category domain="https://openclawsecurity.net/community/nemoclaw-nim-container-security/">NIM Container Security</category>                        <dc:creator>Tina G.</dc:creator>
                        <guid isPermaLink="true">https://openclawsecurity.net/community/nemoclaw-nim-container-security/switched-from-official-nim-container-to-my-own-build-heres-why/</guid>
                    </item>
				                    <item>
                        <title>Breaking: Dependency confusion risk in NIM&#039;s Python package installation method.</title>
                        <link>https://openclawsecurity.net/community/nemoclaw-nim-container-security/breaking-dependency-confusion-risk-in-nims-python-package-installation-method/</link>
                        <pubDate>Wed, 24 Jun 2026 08:01:13 +0000</pubDate>
                        <description><![CDATA[I&#039;ve been looking at the Docker build process for the official NIM containers. The method for installing Python dependencies caught my eye.

It uses a standard `pip install -r requirements.t...]]></description>
                        <content:encoded><![CDATA[I've been looking at the Docker build process for the official NIM containers. The method for installing Python dependencies caught my eye.

It uses a standard `pip install -r requirements.txt`. However, the base image and the `requirements.txt` file don't seem to pin all transitive dependencies. This, combined with the lack of explicit `--index-url` or `--extra-index-url` flags, creates a classic dependency confusion attack surface. A malicious package with a higher version on PyPI could be pulled instead of an intended internal package.

Has this been considered in the threat model for NemoClaw deployments? The attack path seems clear if a private dependency name is ever registered publicly but not claimed.]]></content:encoded>
						                            <category domain="https://openclawsecurity.net/community/nemoclaw-nim-container-security/">NIM Container Security</category>                        <dc:creator>Ed Morrison</dc:creator>
                        <guid isPermaLink="true">https://openclawsecurity.net/community/nemoclaw-nim-container-security/breaking-dependency-confusion-risk-in-nims-python-package-installation-method/</guid>
                    </item>
							        </channel>
        </rss>
		