Strona główna / Blog / SSM Agent: SSRF do IAM

Blog · case study

AWS SSM Agent CVE-2026-89049: denylista destination przegrywa z równoważnymi reprezentacjami adresu — SSRF z port forwarding do link-local i IAM role credentials

CVE-2026-89049 dotyczy AWS Systems Manager Agent i funkcji Session Manager port forwarding do zdalnego hosta. AWS opisuje problem jako SSRF z niewłaściwej walidacji równoważnych reprezentacji adresów. Użytkownik z uprawnieniem do remote-host port forwarding może ominąć denylistę celu i dotrzeć do endpointów link-local; w EC2 może to oznaczać uzyskanie tymczasowych credentials roli IAM przypisanej do instancji i użycie ich spoza instancji. Affected: wersje starsze niż 3.3.4851.0; fix w 3.3.4851.0.

CVE-2026-89049 (fix 3.3.4851.0): bypass denylisty przez równoważne reprezentacje adresu → link-local/metadata → temporary IAM role credentials instancji.
Workaround: ograniczyć AWS-StartPortForwardingSessionToRemoteHost przez ssm:StartSession i permissions dokumentu SSM.

To nie „zwykły SSRF”

principal z SSM permission -> StartSession/remote host port forwarding -> address validation bypass -> link-local destination -> metadata/credential endpoint -> temporary IAM role credentials -> dzialania w AWS z uprawnieniami roli instancji

Kilka trust boundaries: początkowy attacker nie musi mieć praw roli EC2 — wystarczy odpowiednio szerokie uprawnienie Session Manager. Podatność staje się mechanizmem „pożyczenia” tożsamości instancji. CVSS nie odpowiada na najważniejsze pytania: kto ma ssm:StartSession, kto może użyć AWS-StartPortForwardingSessionToRemoteHost, na których managed nodes jest podatna wersja, jakie instance profiles są przypisane, jaki blast radius mają role, czy rola eskaluje dalej, czy jest telemetry. Host A (rola read-only do jednego bucketu, restrykcyjne permissions) i Host B (rola z szerokim dostępem do Secrets Manager/S3/KMS, developerzy swobodnie uruchamiają port forwarding) mają identyczny package finding i różne ryzyko.

„Equivalent address representations” i IMDSv2

Blokowanie kilku literalnych adresów/prefiksów to nie to samo co blokowanie semantycznego destination. Walidacja musi uwzględniać normalizację IP, alternatywne reprezentacje, IPv4/IPv6, IPv4-mapped IPv6, DNS resolution, redirect behavior, link-local/loopback/private ranges — nie zakładaj, że string URL jest równoważny końcowemu socket destination (podobnie jak w wielu incomplete-fix SSRF). Nie zakładaj też automatycznie, że IMDSv2 zamyka finding — ocena musi bazować na zachowaniu attack path i konfiguracji instancji; advisory mówi o osiągnięciu link-local i potencjalnym uzyskaniu credentials, więc compensating control ma być testowalną właściwością.

Remediation warstwowo i weryfikacja

Warstwa 1 (patch): SSM Agent ≥ 3.3.4851.0; znajdź AMI/golden images/bootstrapy odtwarzające starą wersję; uwzględnij on-prem managed nodes. Warstwa 2 (permissions): ogranicz ssm:StartSession i użycie dokumentu remote-host forwarding, oddziel shell sessions od remote-host forwarding, monitoruj nietypowe starty sesji. Warstwa 3 (role blast radius): oceń role przypisane do managed nodes — jedna sesja prowadząca do szerokich credentials to nadmierny privilege footprint. Closure to nie tylko SSM Agent >= 3.3.4851.0: potwierdź rollout na wszystkich nodes, brak starych golden images/launch templates, polityki Session Manager, brak zbędnych principals z remote-host forwarding, review IAM role permissions, telemetry historycznych sesji przy wysokim ryzyku. Przy dowodach wykorzystania sam upgrade nie wystarcza — ustal, jakie credentials mogły zostać uzyskane i jakie działania wykonano.

Powiązane na blogu

Źródła

Nota redakcyjna: stan informacji 13 września 2026. CVE-2026-89049 (AWS SSM Agent <3.3.4851.0): SSRF port forwarding do link-local i IAM role credentials. Brak potwierdzenia active exploitation. Artykuł podkreśla enrichment o permissions i role blast radius oraz walidację normalizującą adres.

Zapamiętaj jedno

Cloud VM nie może kończyć się na package inventory. Minimalny enrichment dla tego CVE to agent_version + managed_node + StartSession permissions + allowed SSM documents + instance_role + role privilege + telemetry — dopiero wtedy odróżnisz „podatną bibliotekę” od realnego cloud attack path.