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

← All reference

Reference

Auth / API Gateway — Shodan Query Catalog

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

Generated: 2026-05-27 from pre-survey OSINT pass (11 platforms) See: data/platform-intel/auth-gateway-osint-2026-05-27.md for full intel Note: LiteLLM proxy (cat-01) and Portkey self-hosted (cost survey) already covered.

Threat model: These platforms are the auth layer in front of AI stacks. An exposed admin interface = full bypass of whatever auth protects the downstream LLM/vector DB/agent infrastructure.


Kong Gateway

Auth default (admin): off (admin API binds 127.0.0.1 by default; Kong Manager ships with no auth when bound to 0.0.0.0) Exposure class: Full gateway config — routes, services, all plugin configs including API keys, JWT secrets, upstream addresses; write access strips auth from any route

LabelQueryRationaleFP Risk
primaryport:8001 "via: kong" http.status:200Via header with “kong” on admin port is a clean signal; admin responds 200 at rootLow
secondaryport:8002 http.title:"Kong Manager" http.status:200Kong Manager UI on port 8002; title is exactLow
tertiaryhttp.headers.via:"kong" port:8001Header-field search; targets banner crawlsLow
identity-probeGET / port:8001 → JSON {"tagline":"Welcome to kong","version":"..."}Root admin endpoint returns version + tagline; no auth required

Tyk Gateway

Auth default (admin): default-creds (352d20ee67be67f6340b4c0605b044b7 shipped in tyk.conf.example; Dashboard ships with configurable admin secret) Exposure class: API definitions, upstream auth credentials, rate limit configs, organization and key data; default-secret instances expose full gateway control API

LabelQueryRationaleFP Risk
primaryport:8080 "x-tyk-gateway" http.status:200X-Tyk-Gateway response header is unique to Tyk proxy portLow
secondaryport:3000 http.title:"Tyk Dashboard" http.status:200Tyk Dashboard UI title; port 3000 has FP risk from other dashboardsMed
tertiaryport:8080 "tyk" "/tyk/reload" http.status:200Control API path present in HTTP crawl bodyMed
identity-probeGET /tyk/reload/ header:X-Tyk-Authorization:352d20ee67be67f6340b4c0605b044b7{"status":"ok"}Default secret probe; 200 = unrotated default

OPA (Open Policy Agent)

Auth default (admin): off (docs: “OPA does not perform authentication or authorization and these flags default to off”) Exposure class: All Rego policy source code (full infra access control logic, service names, roles), merged data document (can contain secrets), audit logs; Trend Micro found 389 unauthenticated OPA servers in 2022

LabelQueryRationaleFP Risk
primaryport:8181 "v1/data" http.status:200OPA REST API path in response body; port 8181 rarely used by other servicesLow
secondaryport:8181 "/v1/policies" http.html:"policies"Policy endpoint in crawled bodyLow
tertiaryhttp.html:"Open Policy Agent" port:8181OPA surfaces its identity in some UI pathsMed
identity-probeGET /v1/policies port:8181 → 200 + JSON array of Rego policiesNo auth required by default; non-empty result = policy data exposed

OPAL (Open Policy Administration Layer)

Auth default (admin): off in demo/dev mode (token auth requires explicit RSA key pair config; disabled in quickstart) Exposure class: Policy update streams, OPA data document feeds, webhook configurations including GitHub tokens and S3 bucket URLs used as policy sources

LabelQueryRationaleFP Risk
primaryport:7002 "opal" http.status:200Port 7002 is OPAL-specific; low ambient trafficLow
secondaryport:7002 "topics" http.html:"opal_updates"OPAL pub/sub topic names in bodyLow
identity-probeGET /healthcheck port:7002 → 200 + OPAL server infoHealth endpoint confirms OPAL; REST API then accessible

Authentik

Auth default (admin): on (login required); however, /api/v3/root/config/ and /api/v3/schema/ accessible pre-auth; initial setup flow may be open on fresh installs Exposure class: Full user database, all OAuth2 client secrets, LDAP/SAML connector credentials, session tokens; CVE-2024-47070 bypasses password stage via X-Forwarded-For manipulation

LabelQueryRationaleFP Risk
primaryport:9000 http.title:"authentik" http.status:200Title is exact match; port 9000 used by Authentik by defaultMed
secondaryport:9000 "/api/v3/" "authentik" http.status:200API path in crawled body confirms AuthentikLow
tertiaryhttp.html:"goauthentik.io" port:9000Source URL referenced in Authentik pagesLow
initial-setupport:9000 "/if/flow/initial-setup/" http.status:200Open initial setup flow = admin account creation availableLow
identity-probeGET /api/v3/root/config/ port:9000 → 200 + {"error_reporting":...} JSONUnauthenticated config endpoint; confirms Authentik version

Authelia

Auth default (admin): on (no admin API; management via config file only) Exposure class: Login portal to all downstream services; brute-force surface; endpoint enumeration via forward auth headers; not a direct data store

LabelQueryRationaleFP Risk
primaryport:9091 http.title:"Authelia" http.status:200Title exact match on default portLow
secondaryport:9091 "/api/health" http.status:200Health endpoint in Authelia; no auth requiredLow
identity-probeGET /api/health port:9091 → 200 + {"status":"OK"}Confirms Authelia running; use primarily as inventory signal

Keycloak

Auth default (admin): on (login required for admin console); /realms/master and OIDC discovery endpoints are unauthenticated by spec; unauthenticated /admin/{realmId}/console/config leaks client secret when console client is confidential (open issue) Exposure class: Admin breach → all users, groups, roles, OAuth2 client secrets for all realms, LDAP bind credentials, SAML signing keys; CVE-2024-3656 lets low-privilege users call admin REST APIs

LabelQueryRationaleFP Risk
primaryport:8080 http.title:"Keycloak" http.status:200Title exact match; large populationLow
secondaryport:8080 "/realms/master" "public_key" http.status:200Master realm metadata endpoint in crawled bodyLow
tertiaryport:8080 "/auth/realms/master" http.html:"public_key"Legacy path prefix (Keycloak < v17); still present in many deploymentsLow
identity-probeGET /realms/master port:8080 → 200 + {"realm":"master","public_key":"...","token-service":"..."}Unauthenticated OIDC metadata; confirms Keycloak + version inference from key algorithm

Zitadel

Auth default (admin): on (System API requires JWT/PAT); but OIDC discovery unauthenticated; Docker quickstart configs often commit InitialAdminPassword in plaintext Exposure class: Admin breach → all organizations, users, service accounts, OAuth2 clients, secrets; System API is superordinate over all instances

LabelQueryRationaleFP Risk
primaryport:8080 http.title:"ZITADEL" http.status:200Title exact matchLow
secondaryport:8080 "/ui/console" http.html:"ZITADEL"Console path in bodyLow
tertiaryhttp.html:"zitadel" port:8080 http.html:"Login"ZITADEL login page contentMed
identity-probeGET /.well-known/openid-configuration port:8080 → 200 + JSON issuer containing “zitadel”Unauthenticated OIDC discovery; issuer URL uniquely identifies Zitadel

Ory Kratos

Auth default (admin): off (admin port 4434 has zero auth by design; Ory docs: “must not be available to public”) Exposure class: Full user identity database (emails, usernames, credentials metadata), session data, recovery/verification tokens; write access enables creating admin users and invalidating sessions

LabelQueryRationaleFP Risk
primaryport:4434 "identities" http.status:200Admin API identity endpoint in body; port 4434 near-uniqueLow
secondaryport:4434 "/admin/identities" http.html:"identities"Admin path in crawled contentLow
tertiaryport:4433 "csrf_token" "flow" http.status:200Public API fingerprint (lower risk, inventory signal)Med
identity-probeGET /admin/identities port:4434 → 200 + JSON array of user objectsNo auth; non-empty array = live user database exposed

Ory Hydra

Auth default (admin): off (admin port 4445 has zero auth by design; Ory docs: “must not be available to public”) Exposure class: All OAuth2 client IDs and secrets, consent/login session state, JWT grant issuers, trusted key sets; write access enables creating OAuth2 clients with arbitrary redirect URIs

LabelQueryRationaleFP Risk
primaryport:4445 "clients" http.status:200OAuth2 clients endpoint on admin port; 4445 near-uniqueLow
secondaryport:4445 "/admin/clients" http.html:"client_id"Admin clients path + field name in bodyLow
tertiaryport:4444 "hydra" "/.well-known/openid-configuration"Public OIDC endpoint confirms Hydra; inventory useLow
identity-probeGET /admin/clients port:4445 → 200 + JSON array with client_id, client_secret fieldsNo auth; client secrets exposed if Hydra stores them (non-PKCE clients)

Casdoor

Auth default (admin): default-creds (built-in/admin / 123; documented in official docs and pentest-tools.com) Exposure class: Full IAM — users, organizations, OAuth2 apps, LDAP configs, SAML providers, MCP server configs; CORS CVE-2024-41657 allows any origin to make authenticated API calls

LabelQueryRationaleFP Risk
primaryport:8000 http.title:"Casdoor" http.status:200Title exact match; port 8000 has FP riskMed
secondaryport:8000 "/api/get-app-list" http.status:200Casdoor-specific API path in bodyLow
tertiaryhttp.html:"casdoor" port:8000 http.html:"built-in"”built-in” organization name unique to CasdoorLow
identity-probeGET /api/get-app-list port:8000 → 200 + JSON array (may not require auth on older versions); POST /api/login with {"username":"admin","password":"123","organization":"built-in","application":"app-built-in"} → session tokenDefault creds probe

SuperTokens

Auth default (admin): off by default (no API key configured = all endpoints accessible from any source) Exposure class: Full user identity store — session tokens, password hashes, MFA state, JWT signing keys, refresh tokens, email verification codes; /recipe/user/id returns full user records without auth when API key absent

LabelQueryRationaleFP Risk
primaryport:3567 "Hello" http.status:200/hello returns exactly “Hello” on SuperTokens; port 3567 is near-uniqueLow
secondaryport:3567 "/apiversion" http.status:200CDI version endpoint; unique to SuperTokensLow
tertiaryport:3567 "supertokens" http.status:200SuperTokens in response body (error messages, headers)Med
identity-probeGET /hello port:3567 → 200 "Hello" (no auth); GET /apiversion → 200 + {"versions":["...","3.0"]}Clean two-step confirmation; then GET /recipe/user/id?userId=X to test auth posture