Błędy w HTTP/2 - wielkie zbiorowe łatanie najważniejszych serwerów, libów i dostawców
Jeżeli jesteście szczęśliwi i żyjecie w odpowiedniej rzeczywistości równoległej, to pewnie nie zmącił Wam spokoju ostatni fakt znalezienia szeregu podatności w popularnym protokole HTTP 2, za pomocą którego, można śmiało rzecz, odbywa się większość komunikacji przeglądarek ze stronami WWW na świecie. Przygotowałem szybkie streszczenie tego, z czym mamy tutaj do czynienia, bowiem, jeśli toczycie wojny apache vs nginx, czy podobne, to musicie się na razie wstrzymać ze śmieszkami.
- CVE-2019-9511 HTTP/2 Data Dribble
- CVE-2019-9512 HTTP/2 Ping Flood
- CVE-2019-9513 HTTP/2 Resource Loop
- CVE-2019-9514 HTTP/2 Reset Flood
- CVE-2019-9515 HTTP/2 Settings Flood
- CVE-2019-9516 HTTP/2 0-Length Headers Leak
- CVE-2019-9517 HTTP/2 Internal Data Buffering
- CVE-2019-9518 HTTP/2 Request Data/Header Flood
Teraz o co tu chodzi. Jak masz stracha, że właśnie coś Ci wycieka, gdy Ty jesteś na urlopie, to póki co jeszcze śpij spokojnie, choć szykuj się na ewentualne telefony od klientów, że Wordpressy mogą im nie działać i właśnie biznesy im się sypią. :-)
Generalnie są to błędy typu denial of service. Sprawa ma się tak, że specyfikacja HTTP jest ogólnie znana, serwery www jakoś ją implementują i wszystko ładnie się kręci. Ktoś majgany jednak wczytał się w te specyfikację najwyraźniej i postanowił zadać sobie kilka dziwnych pytań i je sprawdzić, no i mamy taki efekt jaki mamy. Czyli serwery nieprzygotowane, na niestandardowe sytuacje, np. pingi lub zachowania, które mogą przypominać pingi, puste nagłówki lub manipulacje pakietami i takie tam, bo powoduje to ich zawieszenie lub nadmierne zużycie CPU (skutkujące czasami np. sfreezowaniem całego serwera w najgorszym przypadku)
Nie tylko najpopularniejsze serwery WWW nie były na te niestandardowe przypadki przygotowane, ale także niektóre ważne biblioteki, na myśli mam tutaj net/http
z Go, która napędza prawdopodobnie niemałą część API w Internecie, Dockery, Kubernetesy i inne takie.
- Tutaj post na blogu CloudFlare dotyczący sprawy
- Post na blogu Akamai
- Tu na stronie Certu lista podatności wraz z listą podatnych serwerów i bibliotek
Oczywiście informacje o luce zostały w miarę odpowiedzialne opublikowane i zanim ujrzały światło dzienne, to stosowne poprawki już są, co by większość internetu się łatwo nie sypała:
- Issue na GitHubie Go
- Informacje na stronie Envoy
- Informacje na stronie Apache
- Informacja na blogu nginx
- Issue na githubie Caddy
- Lista od Microsoftu z jego ISS na czele
Nie znalazłem informacji apropo czy lighttpd łatał tę lukę, ale jego wolny rozwój sugeruje, że obsługi HTTP2 może on jeszcze nie mieć, co paradoksalnie ochroniło jego użytkowników. :-)