Skip to content

Triton Inference Server

Enumerate and exploit NVIDIA Triton Inference Server instances.

Overview

The triton module targets the Triton Inference Server REST API (KFServing v2 protocol). It discovers server metadata, lists loaded models with their configurations, probes for shared memory vulnerabilities (CVE-2025-23319/23320/23334), and tests inference and model lifecycle operations.

Subcommands

Read-Only (no --force-exploit required)

Subcommand Description
enum Server metadata, health status, and extensions
models List all loaded models with detailed metadata
model-config Detailed model configuration (instance groups, scheduling, optimization)
shm-probe Probe shared memory regions for IPC vulnerability chain (CVE-2025-23319/23320/23334)

Gated (requires --force-exploit)

Subcommand Description
infer Send inference request to a model
model-load Load a model from the repository (proves model injection surface)
model-unload Unload a model (proves destructive model lifecycle access)

Flags

Flag Required Description
--target Yes Triton HTTP API URL (default port 8000)
--header No Custom HTTP headers. Repeatable.
--model For model-config, infer, model-load, model-unload Model name
--payload For infer; optional for model-load JSON inference payload. On model-load, invokes the model after load to verify it became inferable.

Key Endpoints

Endpoint Method Purpose
/v2 GET Server metadata (name, version, extensions)
/v2/health/ready GET Readiness probe
/v2/health/live GET Liveness probe
/v2/models GET List all loaded models
/v2/models/<name> GET Model metadata (inputs, outputs, platform)
/v2/models/<name>/config GET Detailed model configuration
/v2/models/<name>/infer POST Model inference
/v2/repository/index POST Model repository listing
/v2/repository/models/<name>/load POST Load model from repository
/v2/repository/models/<name>/unload POST Unload model
/v2/systemsharedmemory/status GET System shared memory regions
/v2/cudasharedmemory/status GET CUDA shared memory regions

SHM Probe (IPC Vulnerability Chain)

The shm-probe subcommand checks for the Wiz-discovered IPC vulnerability chain affecting Triton:

  • CVE-2025-23319 -- shared memory region manipulation
  • CVE-2025-23320 -- CUDA shared memory corruption
  • CVE-2025-23334 -- IPC exploitation for code execution

If shared memory status endpoints expose region data (names, keys, offsets, byte sizes), it indicates the IPC attack surface is accessible.

What each landed level means here

landed records what actually landed on the target for each finding. The Triton module reaches these levels:

landed What produces it in triton
reachable enum (server metadata/health), models and model-config (model inventory and config disclosure), shm-probe (exposed shared-memory regions), and any gated write whose request did not succeed.
influenced model-load / model-unload when Triton accepts the lifecycle request but no post-load inference verification is performed.
execution-confirmed infer when the inference reality probe confirms input-dependent handler execution (output varies for distinct inputs); model-load when --payload is supplied and the same input-differential probe confirms the loaded model returns input-dependent output — a bare 2xx with a static prediction stays influenced.

This module has no read-confirmed step and does not reach takeover-capable: reads (models, model-config, shm-probe) stay at reachable (detection), lifecycle writes without verification stay influenced, and model-load reaches own/execution-confirmed only when the repository model is loaded and then answers through the inference API. Note the inference-reality gate on standalone infer — a canned/fixture response that does not vary with input stays at reachable rather than over-claiming execution.

Examples

# Enumerate server metadata
./aipostex triton --target http://127.0.0.1:8000 enum

# List loaded models
./aipostex triton --target http://127.0.0.1:8000 models

# Get detailed model config
./aipostex triton --target http://127.0.0.1:8000 model-config --model resnet50

# Probe shared memory (IPC vuln chain)
./aipostex triton --target http://127.0.0.1:8000 shm-probe

# Test inference (gated)
./aipostex triton --target http://127.0.0.1:8000 infer \
  --model resnet50 --payload '{"inputs":[]}' --force-exploit

# Load a model from repository (gated)
./aipostex triton --target http://127.0.0.1:8000 model-load \
  --model test --force-exploit

# Load and verify the repository model is inferable (gated)
./aipostex triton --target http://127.0.0.1:8000 model-load \
  --model test --payload '{"inputs":[]}' --force-exploit

Workflow Progression

discover network (discovers Triton on :8000)
  -> triton enum (server metadata, health)
    -> triton models (loaded model inventory)
    -> triton model-config --model <name> (detailed config)
    -> triton shm-probe (IPC vulnerability assessment)
    -> triton infer --model <name> (inference test, gated)
    -> triton model-load --model <name> (model injection, gated)
    -> triton model-load --model <name> --payload <json> (load + inference verification, gated)