Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book

Makabryczna podatność w urządzeniach BigIP F5. Łatajcie się!

11 maja 2022, 11:40 | W biegu | komentarze 4
Tagi: ,

Na wspominaną przez nas lukę udostępniono exploity, trwa też exploitacja – więc jeśli udostępniacie panel zarządzania urządzeniem do sieci (API REST, port TCP 8100) to możecie mieć spore problemy. Chyba, że wgracie stosowną łatkę.

Jeśli tego nie uczynicie, zobaczcie co może się wydarzyć… proste żądanie HTTP i ktoś może wykonywać (bez uwierzytelnienia) polecenia na Linuksie, na którym pracuje urządzenie. I to z uprawnieniami root!

POST /mgmt/tm/util/bash HTTP/1.1
Host: 127.0.0.1
Authorization: Basic YWRtaW46ZHVwYS44
X-F5-Auth-Token: asdf
User-Agent: curl/7.82.0
Connection: X-F5-Auth-Token
Accept: */*
Content-Length: 39


{“command”:”run”,”utilCmdArgs”:”-c id”}

Przeanalizujmy powyższe żądanie:

  • Widać że uruchamiany jest bash + w przykładzie bash odpala polecenie id. Czy tego basha trzeba jakoś specjalnie stworzyć/aktywować na urządzeniu? Nie, jest to (było) domyślnie dostępne!
  • Na początku wspominałem, że podatność jest w API REST. Ale żądania do API REST wymagają podania prawidłowego ~klucza API (nagłówek X-F5-Auth-Token).

    Zobaczmy teraz na dwa nagłówki:

    X-F5-Auth-Token: asdf
    Connection: X-F5-Auth-Token

    Jeśli urządzenie widzi pierwszy nagłówek to zaczyna obsługiwać żądanie jak do API REST.

    Drugi nagłówek oznacza jednak, że nagłówek X-F5-Auth-Token ma być usunięty przed dalszym procesowaniem po stronie serwerowej.

    (fragment definicji działania nagłówka Connection: The list of headers are the name of the header to be removed by the first non-transparent proxy or cache in-between).

    Mamy teraz sytuację, która normalnie nie powinna się wydarzyć. Po stronie serwerowej działa kod jak dla obsługi API REST – bo był nagłówek X-F5-Auth-Token, ale w trakcie działania kodu go nie ma (bo został usunięty – zgodnie z Connection: X-F5-Auth-Token).

    To umożliwia wreszcie ominięcie uwierzytelnienia, bo dochodzimy do miejsca w kodzie, które de facto sprawdza w Basic Auth tylko poprawność loginu. Wystarczy więc podać takie nagłówki:

    Host: 127.0.0.1
    Authorization: Basic YWRtaW46ZHVwYS44
  • Po zdekodowaniu powyższego z Base64 wychodzi: admin:dupa.8

    Czyli można hasłem dupa.8 przejąć urządzenie? W zasadzie tak, ale działa też dowolne inne hasło… Serio? No dobra, jest jeszcze mały niuans, trzeba nagłówek host ustawić na 127.0.0.1 (lub localhost). Uwaga – nie mylcie tego z adresem IP na którym nasłuchuje urządzenie (może to być dowolny adres, również publiczny).

Podsumowując:

  • Nagłówek X-F5-Auth-Token: asdf
    Skłonienie urządzenia do procesowania żądania jako takie do API REST
  • Nagłówek: Connection: X-F5-Auth-Token
    Usunięcie (przed dalszym procesowaniem) nagłówka X-F5-Auth-Token z żądania
  • Finalnie trafiamy w miejsce w kodzie, gdzie dodanie nagłówka: Host: 127.0.0.1 umożliwia podanie w nagłówku Authorization jedynie prawidłowego loginu (i dowolnego hasła).

Łatajcie się.

~Michał Sajdak

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. Wodzu

    Standardowe hasło adminów z Lublina w latach 90.

    Odpowiedz
  2. aCzemu

    A cóż to za sformułowanie „makabryczna podatność” ? Nie idźcie tą drogą.

    Odpowiedz
  3. rodik

    Jeśli WAF jest dobrze skonfigurowany, to zablokuje zapytanie z wartością nagłówka Host równą 127.0.0.1

    Odpowiedz

Odpowiedz