Raport z obsługi zgłoszenia dotyczącego podatności podpisywarki na stronie moj.gov.pl

Poniżej publikujemy komunikat dotyczący zgłoszenia i obsługi podatności systemu obsługującego podpisywarkę na stronie moj.gov.pl. Komunikat trafił do nas w procesie obsługi podatności ważnego systemu administracji publicznej. W naszej ocenie jest przykładem bardzo dobrej współpracy pomiędzy badaczem a podmiotami pełniącymi ważną rolę w systemie cyberbezpieczeństwa RP. Mamy nadzieję, że będzie ważnym krokiem na drodze wypracowania najlepszych zasad obsługi słabości systemowych serwisów administracji publicznej, z których będą mogły korzystać również inne podmioty.


Autor

Ciprian Alexandru Pitis  (starszy inżynier ds. rozwiązań chmurowych w firmie Intel Corporation, niezależny badacz w ramach różnego rodzaju projektów informatycznych).

Zaprezentowana analiza została wykonana jako analiza prywatna.

Informacje podstawowe

W wyniku przeprowadzonej analizy, odkryte zostały dwie podatności w implementacji funkcjonalności weryfikowania podpisu w web-aplikacji Podpisu Zaufanego (na stronie moj.gov.pl), które to można było wykorzystać do wprowadzenia w błąd ofiary co do autentyczności podpisu zaufanego, a także wykorzystać jako wektor serwowania szkodliwego pliku wykonywalnego prosto z zaufanej domeny rządowej. Poniżej znajduje się pełen opis obu podatności i ich potencjalnego oddziaływania na bezpieczeństwo usługi. Raport zawiera również harnonogram kluczowych działań związanych z obsługą tych podatności, w tym komunikacji z Ministerstwem Cyfryzacji i CSIRT NASK (CERT Polska).

Podatny system

W ramach struktur rządowych utrzymywana jest aplikacja webowa do podpisywania plików zaufanym podpisem cyfrowym oraz weryfikacji podpisanych plików. Aplikacja dostępna jest pod adresem: https://moj.gov.pl/uslugi/signer/upload?xFormsAppName=SIGNER

Funkcjonalność systemu

Po podpisaniu pliku podpisem zaufanym, podpisujący otrzymuje z powrotem plik, który może przekazać innemu podmiotowi. Tak przekazany plik może zweryfikować osobę podpisującą, ważność podpisu oraz może być wykorzystany do pobrania oryginalnego pliku. Plik ten występuje w formacie XML i zawiera w sobie informacje na temat osoby podpisującej, a także sam podpis kryptograficzny oraz podpisywany plik zakodowany zgodnie ze schematem base64. Po przesłaniu podpisanego pliku XML przez w/w system, zostaje on poddany weryfikacji, a także wyświetlone zostaje imię i nazwisko podpisującego, data i godzina podpisu, status podpisu (ważny/nieważny), rodzaj podpisu oraz przycisk do pobrania podpisanego pliku.

Opis Podatności

Podatność #1: Fałszowanie Podpisu Zaufanego przez Reflected-XSS w podpisanym pliku

Możliwa była manipulacja plikiem XML w polach imienia i nazwiska tak, aby po przesłaniu pliku XML, wykonać kod javascriptu w kontekście przeglądarki osoby przesyłającej ( tzw. reflected XSS). Dzięki temu, możliwa była manipulacja wyświetlanymi danymi, a szczególnie możliwe było sfałszowanie imienia, nazwiska, daty, oraz ważność podpisu. Zmiany te mogą być odebrane jako prawidłowa weryfikacja podpisu elektronicznego przez osobę, złożonego przez osobę, której dane fałszywie wstawiono do dokumentu.

Podatność #2: Możliwość manipulacji nazwą i rozszerzeniem pliku przy pobieraniu

System przy podpisywaniu plików weryfikuje rozszerzenie pliku, który jest podpisywany. Pula rozszerzeń ogranicza się do popularnych formatów tekstowych, transferu obrazu oraz wideo. W szczególności, zabronione jest podpisywanie plików wykonywalnych w ramach tego systemu.

Przy odpowiednio przeprowadzonej manipulacji nazwą oryginalnego pliku wewnątrz pliku XML, można było zmienić jego rozszerzenie na dowolne, wybrane przez atakującego. Oznacza to, że możliwe było podpisanie szkodliwego pliku wykonywalnego w ramach “fałszywego” formatu (przez zmianę rozszerzenia np.. z .exe na .txt), a następnie możliwe było takie spreparowanie otrzymanego pliku XML, aby ponownie przy pobieraniu otrzymać plik z rozszerzeniem wykonywalnym.

Szczególne zagrożenie stanowiło połączeni obydwu podatności, co pozwalało w bardzo przekonujący sposób, za pomocą strony w domenie rządowej, zachęcić ofiarę do uruchomienia na swoim komputerze szkodliwego pliku wykonywalnego.

Timeline wymiany informacji w sprawie podatności

DataCzynność
20/04/2020Pierwsze zgłoszenie do Ministerstwa Cyfryzacji .
22/04/2020– Zgłoszenie podatności do CSIRT NASK.
– Przekazanie przez CSIRT NASK informacji do CSIRT GOV i Departamentu Cyberbezpieczeństwa w MC.  
29/04/2020Wprowadzenie poprawek przez Centralny Ośrodek Informatyki we współpracy z Ministerstwem Cyfryzacji.  
04/05/2020– Manualna weryfikacja i potwierdzenie poprawienia obydwu podatności.
– Przygotowanie do przekazania publicznej informacji na temat błędu.  
19/05/2020Publikacja informacji o podatnościach na stronie Fundacji Bezpieczna Cyberprzestrzeń (we współpracy Zgłąszającego, Ministerstwa Cyfryzacji i Fundacji Bezpieczna Cyberprzestrzeń).  
Tab. 1. Timeline wymiany informacji w sprawie podatności

Podsumowanie

Proces obsługi wskazanych podatności odbył się zgodnie ze znanymi dobrymi praktykami dotyczącymi wykrywania, raportowania i obsługi podatności systemowych (ang. Responsible Vulnerability Disclosure Policy). Reakcja na zgłoszenie była szybka, a współpracę prowadzono zarówno ze strony CSIRT NASK jak i Ministerstwa Cyfryzacji. W ocenie Zgłaszającego sprawnie uporano się z potwierdzeniem i załataniem zgłoszonych podatności. Na uwagę szczególnie zasługuje w jego ocenie tutaj także bardzo pozytywne podejście do zgłoszenia – sprawa została poważnie potraktowana, miała miejsce również ciągła obustronna komunikacja, co pozwoliło na szybkie naprawienie problemów. Przebieg zdarzenia jest pozytywnym wkładem w dalszy rozwój współpracy publiczno-prywatnej na rzecz odpowiedzialnej poprawy stanu cyberbezpieczeństwa publicznych zasobów i usług cyfrowych.

Share Button