Most recent
navigate open esc close Corpus index built 2026-06-07 23:58 UTC

← All reference

Reference

ML Experiment Tracking — Shodan Query Catalog

Source: https://github.com/nuclide-research/AI-LLM-Infrastructure-OSINT/blob/main/shodan/queries/experiment-tracking-queries

Generated: 2026-05-27 from pre-survey OSINT pass (12 platforms + MLflow supplement) See: data/platform-intel/experiment-tracking-osint-2026-05-27.md for full intel


Ray Dashboard (Ray Tune)

Auth default: off (no auth layer; explicitly documented) Exposure class: Full cluster read/write; RCE chain via CVE-2023-48022/23/6021; IAM credential harvest via SSRF; SSH key disclosure via path traversal

LabelQueryRationaleFP Risk
primaryhttp.html:"ray dashboard" port:8265Branded phrase in served HTML; 54 confirmed hits per existing catalogLow
secondaryport:8265 http.html:"ray"Broader catch for instances with non-standard HTMLMed
title-matchhttp.title:"Ray Dashboard"Title string; may differ across Ray versionsLow
identity-probeGET /api/jobs/ → JSON job listCVE-2023-48022 surface; unauthenticated job enumeration
ssrf-probeGET /log_proxy?url=http://169.254.169.254/CVE-2023-48023; returns AWS IMDSv1 creds on cloud instances
traversal-probeGET /nodes?view=summary then GET /api/v0/logs/file?node_id=<id>&filename=../../etc/passwdCVE-2023-6021 chain

NOTE: ShadowRay (CVE-2023-48022) is actively exploited. Any instance on the public internet is a high-priority finding regardless of Ray version — auth remains unsupported upstream.


MLflow Tracking Server

Auth default: off (no auth, no encryption by default) Exposure class: All experiments, model artifacts, registered models; RCE via CVE-2025-11201 (no auth required); API keys often stored as run tags

LabelQueryRationaleFP Risk
primaryhttp.title:"MLflow" port:5000Branded title on default portLow
secondaryhttp.html:"mlflow" port:5000HTML body match; catches non-title instancesMed
broadhttp.title:"MLflow"Port-agnostic; some deployments use 5001, 5555Low
api-confirmhttp.html:"/api/2.0/mlflow"API path in page source/docs confirms identityLow
identity-probeGET /api/2.0/mlflow/experiments/list{"experiments":[...]}Unauthenticated list of all experiments
rce-surfacePOST /api/2.0/mlflow/model-versions/create with source traversalCVE-2025-11201; no auth required

ClearML Self-Hosted

Auth default: off (ships with “free access” login; explicit opt-in required for auth) Exposure class: Full experiment metadata, training artifacts, model files (via port 8081 file server), pipeline configs, default API keys

LabelQueryRationaleFP Risk
primaryhttp.title:"ClearML" port:8080Branded UI title; confirmed 112 hits in existing catalogLow
secondaryport:8008 http.html:"clearml"API server port with branded HTML — very distinctive combinationLow
file-serverport:8081 http.html:"clearml"File server with ClearML branding; artifact accessLow
bare"clearml"Banner match regardless of port; 170 hits in existing catalogMed
identity-probeGET /api/v2.*/system.company_info on port 8008 → company_name fieldConfirms ClearML API server; version in response
auth-checkGET /auth.login with default Basic <base64(default_key:default_secret)>Checks for unrotated default credentials

Determined.ai

Auth default: default-creds (admin with blank password — documented default) Exposure class: Distributed training jobs, model checkpoints, GPU cluster config, SSH keys, notebook contents, cloud storage credentials

LabelQueryRationaleFP Risk
primaryhttp.title:"Determined" port:8080Branded title; 60 confirmed hits in existing catalogLow
secondaryhttp.html:"Determined" port:8080HTML body match; catches login page variantsMed
api-confirmport:8080 http.html:"det" http.html:"experiment"API-specific terms in HTMLMed
identity-probePOST /api/v1/auth/login {"username":"admin","password":""} → 200 + tokenConfirms admin/blank-password; live finding
experiment-enumGET /api/v1/experiments with obtained token → full experiment listPost-auth enumeration

Aim

Auth default: off (no authentication mechanism exists in the default install) Exposure class: All experiment runs and metrics, training code snapshots, hyperparameters, system metrics (CPU/GPU/memory), custom metadata objects

LabelQueryRationaleFP Risk
primaryport:43800 http.html:"aim"Highly distinctive port; almost nothing else uses 43800Low
secondaryport:43800Port alone is a strong signal; narrow with HTML confirmLow
title-matchhttp.title:"Aim" port:43800Title string for Aim UILow
tracking-serverport:53800Remote tracking server port; accepts arbitrary metric writesLow
identity-probeGET /api/projects → JSON with name fieldUnauthenticated project enumeration
runs-probeGET /api/runs/search/run → run objects with full metadataFull run access; no token required

Sacred + Omniboard

Auth default: off (no auth; widely documented as exposed; source code captured at run time) Exposure class: Experiment source code (with hardcoded creds), hyperparameters, metrics, MongoDB connection strings, model artifacts

LabelQueryRationaleFP Risk
primaryhttp.title:"Omniboard" port:9000Exact title match on distinctive portLow
secondaryport:9000 http.html:"omniboard"HTML body; catches non-default title deploymentsLow
barehttp.html:"omniboard"Port-agnostic; catches non-9000 deploymentsMed
mongodb-colocatedport:27017 "sacred"MongoDB with sacred database name; direct DB accessLow
identity-probeGET /api/v1/Runs → JSON run list with source_files arrayUnauthenticated; source code in response
cred-harvestGET /api/v1/Runs?select=source_filesSource snapshots often contain hardcoded credentials

Comet ML Self-Hosted

Auth default: default-creds (admin:admin on versions < 24.9.8; MD5-hashed passwords) Exposure class: Experiment runs, model evaluation data, API keys in user profiles, code snapshots, hyperparameters

LabelQueryRationaleFP Risk
primaryhttp.title:"Comet" port:5000Branded title on default portMed (generic title)
secondaryhttp.html:"comet-ml" port:5000Library name in HTML narrows significantlyLow
api-confirmport:5000 http.html:"/api/v2/experiment"API path in page sourceLow
identity-probeGET /healthcheck{"status":"ok"}Lightweight presence confirmation
auth-checkPOST /api/v2/auth with admin:adminChecks for unrotated default credentials

Optuna Dashboard

Auth default: off (no auth; default host is localhost but containers often bind 0.0.0.0) Exposure class: HPO study configs, all trial hyperparameters and objective values, best parameters, optimization history

LabelQueryRationaleFP Risk
primaryhttp.title:"Optuna Dashboard" port:8080Exact title; distinctiveLow
secondaryhttp.html:"optuna" port:8080Library name in HTMLMed
barehttp.title:"Optuna Dashboard"Port-agnostic catchLow
identity-probeGET /api/studies → JSON array with study_name, directions, n_trialsUnauthenticated study enumeration
trial-enumGET /api/studies/<study_id>/trials → full trial history with all hyperparameter valuesComplete HPO data access

Weights & Biases (W&B Local)

Auth default: on (API key required; not a default-open target) Exposure class: Experiment runs, model artifacts, training configs (only if auth bypassed or misconfigured)

LabelQueryRationaleFP Risk
primaryhttp.title:"Weights & Biases" port:8080Branded titleLow
secondaryhttp.html:"wandb" port:8080JS/HTML reference to wandb on default portMed
docker-imagehttp.html:"wandb/local"Docker image reference may appear in setup pagesMed
identity-probeGET /api/v1/users/me with invalid token → 401 with {"error":"Unauthorized"}Confirms W&B API; auth failure response is distinctive

Neptune.ai Self-Hosted

Auth default: on (Keycloak; enterprise only) Exposure class: Low — auth required; Keycloak misconfiguration is the edge case

LabelQueryRationaleFP Risk
primaryhttp.html:"neptune" port:30080Distinctive port + brandLow
secondaryhttp.title:"Neptune" port:30080NodePort-specific title matchLow
keycloak-colocatedport:30080 http.html:"keycloak"Keycloak login page on same port indicates Neptune identity managementLow
identity-probeGET /auth/ → Keycloak login page with Neptune brandingConfirms self-hosted Neptune instance

DVC Studio Self-Hosted

Auth default: on (OAuth required; Helm-provisioned) Exposure class: Low — OAuth gates access; misconfiguration-class risk only

LabelQueryRationaleFP Risk
primaryhttp.html:"iterative" http.html:"studio"Both brand markers in HTMLMed
secondaryhttp.title:"Studio" http.html:"dvc"DVC Studio-specific combinationMed
identity-probeGET /api/user → OAuth redirect confirms Studio presenceAuth redirect confirms identity

SigOpt Self-Hosted

Auth default: on (enterprise provisioned) Exposure class: Low — enterprise product, auth enforced; near-zero expected population

LabelQueryRationaleFP Risk
primaryhttp.html:"sigopt"Brand name in HTMLLow
secondaryhttp.title:"SigOpt"Exact title matchLow
identity-probeGET /api/v1/experiments → 401 with SigOpt error schemaAuth failure response confirms API

Guild AI

Auth default: N/A — local CLI only, no network server Notes: Not a Shodan survey target. No queries applicable.


Priority Queue for Survey Execution

  1. Ray Dashboard — CVE-2023-48022 active exploitation; RCE + IAM harvest chain
  2. MLflow — CVE-2025-11201 RCE (no auth required); widest deployment footprint
  3. ClearML — auth-off-by-default; high artifact exposure; 112-170 confirmed hits already cataloged
  4. Determined.ai — admin/blank-password on GPU cluster; 60 confirmed hits; high-value target
  5. Aim — no auth, distinctive port 43800; full training data exposure
  6. Sacred/Omniboard — no auth; source code with hardcoded creds; CVE-2025-14847 backend
  7. Comet ML — default admin:admin; older deployments not patched
  8. Optuna Dashboard — no auth when containerized; HPO secrets exposure
  9. W&B Local — auth on but worth confirming population size
  10. Neptune.ai — auth enforced; low priority
  11. DVC Studio — auth enforced; low priority
  12. SigOpt — enterprise, near-zero population; lowest priority