Poważny błąd w OpenSSL załatany

Poważny błąd w OpenSSL załatany

Zgodnie z poniedziałkową zapowiedzią dziś na serwery projektu OpenSSL trafiła nowa wersja biblioteki w której załatano jeden poważany błąd bezpieczeństwa. Umożliwiał on podstawienie fałszywych certyfikatów, które następnie mogły być traktowane jako wystawione przez zaufane Urzędy Certyfikacji (CAs).

Ty też możesz “wystawić” zaufany certyfikat

Błąd Alternative chains certificate forgery (CVE-2015-1793) zgodnie z oficjalną informacją

During certificate verification, OpenSSL (starting from version 1.0.1n and
1.0.2b) will attempt to find an alternative certificate chain if the first
attempt to build such a chain fails. An error in the implementation of this
logic can mean that an attacker could cause certain checks on untrusted
certificates to be bypassed, such as the CA flag, enabling them to use a valid
leaf certificate to act as a CA and „issue” an invalid certificate.

This issue will impact any application that verifies certificates including
SSL/TLS/DTLS clients and SSL/TLS/DTLS servers using client authentication.

pozwalał atakującemu mającemu możliwość przeprowadzenia ataku man-in-the-middle na doprowadzenie do sytuacji w której nieprawidłowy, niezaufany, podstawiony przez atakującego certyfikat SSL był traktowany jako prawidłowy i wydany przez zaufane CA. Skutkiem błędu mogła być możliwość odczytania lub modyfikacji ruchu sieciowego przesyłanego pomiędzy ofiarą a serwerem.

Istota błędu leżała w sposobie przeprowadzania weryfikacji certyfikatów. OpenSSL podczas weryfikacji próbuje zbudować ścieżkę certyfikacyjną prowadzącą do zaufanego certyfikatu głównego (Root), jeżeli nie uda mu się zrobić tego za pierwszym razem przechodzi do prób odnalezienia innych, alternatywnych ścieżek. Błąd w implementacji tej logiki mógł doprowadzić do sytuacji w której możliwe było obejście sprawdzenia wartości pola cA w rozszerzeniu Basic Constraints w prawidłowym certyfikacie końcowym. Pole to określa czy dany certyfikat może wystawiać inne certyfikaty, mówiąc inaczej określa czy dany certyfikat jest certyfikatem CA (dla certyfikatów CA pole to przyjmuje wartość true, dla certyfikatów końcowych false). W konsekwencji atakujący uzyskiwał możliwość niejako “wystawiania” fałszywych certyfikatów SSL, które traktowane były jako zaufane.

Schemat błędu (źródło: https://twitter.com/maximilianhils)

Schemat podatności (źródło: https://twitter.com/maximilianhils)

Błąd znajdował się w funkcji X509_verify_cert, a podatność odkryli specjaliści Google: Adam Langley i David Benjamin.

Pierwsza z poprawek wprowadzona w kodzie

Pierwsza z poprawek wprowadzona w kodzie

Druga z poprawek wprowadzona w kodzie

Druga z poprawek wprowadzona w kodzie

Większość systemów niepodatna

Błąd, chociaż bardzo poważny, może być trudny w praktycznym wykorzystaniu, ponieważ większość popularnych systemów i aplikacji nie jest na niego podatna. Wolne od zagrożenia są m.in. przeglądarki Firefox, Chrome, systemy Windows (wraz z przeglądarką IE) i Apple.

Błąd dotyczy wersji 1.0.2c, 1.0.2b, 1.0.1n i 1.0.1o biblioteki OpenSSL, a wszyscy którzy z nich korzystają powinni dokonać aktualizacji zgodnie z poniższymi wytycznymi:

  • użytkownicy wersji 1.0.2b i 1.0.2c do 1.0.2d,
  • użytkownicy wersji 1.0.1n i 1.0.1o do 1.0.1p.

Jak zwykle zachęcam do jej przeprowadzania.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *