Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
::ffff:127.0.0.1 – co to za dziwny adres IP? Ano taki, którym udało się zgarnąć od Cloudflare $7500 nagrody bug bounty
Opis na serwisie Hackerone jest dość enigmatyczny:
By using IPv4-mapped IPv6 addresses there was a way to bypass Cloudflare server’s network protections and start connections to ports on the loopback (127.0.0.1) or internal IP addresses (such as 10.0.0.1)
Cloudflare zdecydował się jednak przygotować nieco dłuższy opis podatności, która została zgłoszona w ramach programu bug bounty.
1. Adresy IPv6 podobne do tego z tytułu wpisu, definiowane są w RFC 4291 / RFC 4038:
the IPv6 address ::FFFF:x.y.z.w represents the IPv4 address x.y.z.w.
2. Dalej mowa jest o wpisie w DNS, który wykorzystywał tego typu dziwny adres:
The researcher was able to use DNS entries based on mapped addresses to bypass some of our controls and access ports on the loopback address or non-routable IPs.
Zobaczcie np. na adres IPv6 jaki zwraca adres domenowy 127.hackingparty.pl:
$ dig +short AAAA 127.hackingparty.pl
::ffff:127.0.0.1
No właśnie, tym trickiem można było ominąć pierwszą łatkę którą przygotował Cloudflare:
The team then began to implement a patch to prevent the creation of DNS records that include IPv6 addresses that map loopback or RFC 1918 (internal) IPv4 addresses. The fix was fully deployed and confirmed three hours after the report was filed. We later realized that this change was insufficient because records hosted on external DNS servers could also be used in this attack.
3. Przykładowy exploit polegał na stworzeniu prostego workera Cloudflare, który miał łączyć się do adresu DNS:
exploit.example.com
Jak się domyślacie DNS rozwiązywał to na ::ffff:127.0.0.1
Zatem można było połączyć się do localhost na serwerze (Clouflare), na którym akurat został odpalony worker. Czy coś to dalej umożliwiało? Tutaj Cloudflare milczy, ale dość często na localhost działają usługi, które nie wymagają uwierzytelnienia…
TLDR: połączenie z internetu bezpośrednio do localhost na serwerze (do dowolnego portu) – to niezbyt dobra możliwość.
4. Ta technika idealnie nadaje się również na eksploitację podatności SSRF.
Problem został oznaczony jako krytyczny, załatany, a badaczowi wypłacono $7500. Co ciekawe oficjalna maksymalna wypłata w ramach programu bug bounty Cloudflare wynosi zaledwie $3000…
~Michał Sajdak