opened image

Klucz certyfikatu okazał się liczbą 4: co zaktualizować na serwerze

 

 

 

Jeden z urzędów certyfikacji, eMudhra, przechowywał klucze prywatne tak słabe, że można je było odgadnąć w ciągu sekundy. Jeden z kluczy był dosłownie liczbą 4. Za pomocą takich kluczy można sfałszować „zabezpieczoną” stronę banku, systemu płatności lub dowolnego innego serwisu.

Przeglądarki już zabezpieczyły swoich użytkowników. Z serwerami jest inaczej. Jeśli na Twoim serwerze działają skrypty, strony internetowe lub aplikacje łączące się z innymi usługami, zaktualizuj listę zaufanych certyfikatów. Zajmie to około 5 minut.

 

 

Czym jest certyfikat?

 

Gdy otwierasz stronę banku, obok jej adresu widzisz ikonę kłódki. Oznacza ona, że strona jest prawdziwa, a nie podrobiona. Skąd jednak przeglądarka to wie?

Wyobraź sobie notariusza. Przynosisz dokument, notariusz go sprawdza i przybija pieczęć. Wszyscy ufają tej pieczęci. Jeśli dokument ma pieczęć znanego notariusza, uznaje się go za autentyczny.

W internecie rolę notariuszy pełnią urzędy certyfikacji (CA). Na świecie jest ich około 140. Wydają stronom certyfikaty, czyli swego rodzaju „poświadczone dokumenty”. Przeglądarki, telefony i serwery przechowują listy urzędów, którym ufają.

Każdy notariusz ma swoją pieczęć: klucz prywatny. Dopóki pieczęć jest dobrze ukryta, nie da się sfałszować dokumentu.

 

 

Co się stało?

 

 

eMudhra to indyjski urząd certyfikacji, któremu ufają Chrome, Firefox, Apple i Microsoft.

W kwietniu 2025 roku eMudhra utworzyła osiem nowych „pieczęci” do wydawania certyfikatów: sześć dla stron internetowych i dwie do podpisywania oprogramowania. Przez błąd w skrypcie klucze okazały się wyjątkowo krótkie.

Prawidłowy klucz to liczba mająca ponad sto cyfr. Jej odgadnięcie byłoby niemożliwe nawet przez miliony lat. Tymczasem wszystkie osiem kluczy eMudhra miało wartości mniejsze niż 256. Jeden był równy 4, drugi 56, a trzeci 115.

To jak sejf z kodem „0004”. Atakujący nie potrzebuje żadnych narzędzi. Wystarczy wypróbować kilka kombinacji. Badacz bezpieczeństwa Scott Helme odtworzył wszystkie osiem kluczy w mniej niż sekundę.

Błąd zauważono dopiero 17 października 2026 roku. Oznacza to, że przez półtora roku potencjalnie każdy mógł fałszować certyfikaty. 18 października eMudhra unieważniła wszystkie osiem „pieczęci”. Nie wiadomo, czy ktoś zdążył je wykorzystać.

 

 

Jakie są zagrożenia?

 

 

Dysponując skradzioną pieczęcią, można podszyć się pod dowolny podmiot — na przykład bank, system płatności czy usługę pocztową.

Oto prosty przykład. Twój sklep internetowy wysyła dane zamówienia do operatora płatności. Atakujący przechwytuje połączenie i przedstawia sfałszowany certyfikat. Twój serwer widzi pieczęć zaufanego „notariusza” i bez wahania przekazuje dane. To tak, jakby wręczyć kopertę z pieniędzmi osobie w stroju kuriera, nie sprawdzając, czy naprawdę jest kurierem.

To nie tylko teoria. Scott Helme podrobił certyfikat dla serwisu płatniczego Stripe. Popularne narzędzia, takie jak curl, Python i Node.js, zaakceptowały fałszywy certyfikat bez żadnego ostrzeżenia.

 

 

Kogo to dotyczy?

 

Przeglądarki są już zabezpieczone. Chrome, Firefox i Safari zaktualizowały się automatycznie. Jeśli tylko przeglądasz strony, nie musisz nic robić.

Serwery nie aktualizują się same. Serwer ma własną listę zaufanych „notariuszy”. Jest ona aktualizowana razem z systemem operacyjnym. Niektóre programy przechowują jednak własną listę. Trzeba je zaktualizować osobno.

 

Warto przeprowadzić aktualizację, jeśli na Twoim serwerze:

  • działa strona lub sklep łączący się z systemami płatności, API albo pocztą;
  • uruchamiane są skrypty lub programy w Pythonie, Node.js, Go albo Javie;
  • w zadaniach cron używane są curl lub wget;
  • działają kontenery Docker.

 

Krótko mówiąc, dotyczy to niemal każdego serwera.

 

 

Zaktualizuj certyfikaty systemowe

 

Lista zaufanych „notariuszy” znajduje się w pakiecie ca-certificates. Można go zaktualizować prostym poleceniem.

 

Ubuntu i Debian:

sudo apt update
sudo apt install --only-upgrade ca-certificates

W Debianie 13 poprawiona wersja pakietu to 20250419+deb13u1 lub nowsza.

 

AlmaLinux, Rocky Linux, CentOS Stream:

sudo dnf upgrade ca-certificates

 

Alpine Linux:

apk upgrade ca-certificates

W Alpine poprawiona wersja to 20261020-r0 lub nowsza.

Nie trzeba ponownie uruchamiać serwera. Warto jednak zrestartować usługi, które działają od dłuższego czasu. Mogły zapamiętać starą listę podczas uruchamiania.

 

 

Zaktualizuj Python, Node.js, Go i Javę

 

Niektóre programy nie korzystają z listy systemowej. Mają własną. To jak pracownik noszący w kieszeni stary notes z numerami telefonów. Zaktualizowano firmową książkę kontaktów, ale on nadal dzwoni pod stare numery.

PHP, curl i wget zazwyczaj korzystają z listy systemowej. W ich przypadku wystarczy pierwszy krok. Poniższe komponenty trzeba jednak sprawdzić i zaktualizować oddzielnie.

 

KomponentJak sprawdzić wersjęBezpieczna wersja
Python (pakiet certifi)

pip show certifi

2026.10.19 lub nowsza

Node.js

node -v

22.23.4, 24.22.1 lub 26.12.1 i nowsze

Go

go version

1.27.3 lub 1.26.10 i nowsze

Java

java -version

Najnowsza aktualizacja używanej wersji

 

Python. Zaktualizuj pakiet poleceniem:

pip install --upgrade certifi

 

Node.js. To ta sama aktualizacja, która usuwa niebezpieczną lukę w Brotli. Dlatego warto zaktualizować Node.js niezależnie od wszystkiego.

Go. Zaktualizuj Go i ponownie skompiluj swoje aplikacje. Starsza skompilowana aplikacja nadal będzie ufać starym „pieczęciom”.

Node.js 20 i starsze wersje nie otrzymają poprawki. Te wersje nie są już wspierane. Trzeba przejść na nowszą wersję.

 

 

Przebuduj obrazy Docker

 

Każdy kontener Docker to osobny mały system z własną listą certyfikatów. Aktualizacja serwera nie zmienia tej listy. Kontener jest jak walizka spakowana miesiąc temu: nadal znajduje się w niej to, co wtedy do niej włożono.

 

Co zrobić:

  1. Zaktualizuj obraz bazowy. Na przykład pobierz świeżą wersję node:24, python:3.13 lub debian:13.

  2. Przebuduj swoje obrazy:

docker compose build --pull
  1. Uruchom ponownie kontenery:

docker compose up -d

 

Flaga --pull jest ważna. Bez niej Docker może użyć starego obrazu bazowego z pamięci podręcznej i nic się nie zmieni.

 

 

Co zrobić, jeśli po aktualizacji coś przestało działać?

 

Razem z wadliwymi „pieczęciami” z listy zaufanych usunięto również sam urząd eMudhra, do którego należały. W rezultacie około 30 tysięcy zwykłych certyfikatów również przestało być uznawanych za zaufane. Ich właściciele będą musieli uzyskać nowe certyfikaty od innego urzędu.

Dlatego po aktualizacji Twój skrypt lub strona może przestać łączyć się z jakąś usługą. W logach mogą pojawić się błędy, takie jak:

certificate verify failed
unable to get local issuer certificate

 

Najprawdopodobniej certyfikat tej usługi został wydany przez eMudhra. Twój serwer już mu nie ufa. I słusznie.

 

Co zrobić:

  1. Ustal adres, z którym nie można nawiązać połączenia.
  2. Poinformuj właściciela usługi. Musi wymienić certyfikat.
  3. Poczekaj na wymianę lub tymczasowo skorzystaj z innej usługi.

Czego nie wolno robić: wyłączać weryfikacji certyfikatów, na przykład przez verify=False w Pythonie lub -k w curl. To jak zdjęcie zamka z drzwi, bo klucz przestał pasować. Problem pozornie zniknie, ale drzwi pozostaną otwarte dla wszystkich.

 

Lista kontrolna

  • Zaktualizowano pakiet ca-certificates
  • Uruchomiono ponownie długo działające usługi
  • Zaktualizowano pakiet certifi w Pythonie
  • Zaktualizowano Node.js do 22.23.4, 24.22.1 lub 26.12.1
  • Zaktualizowano Go i ponownie skompilowano aplikacje
  • Zaktualizowano Javę
  • Przebudowano obrazy Docker z flagą --pull
  • Sprawdzono logi pod kątem błędów certyfikatów
  • Nigdzie nie wyłączono weryfikacji certyfikatów

 

Nie chcesz zajmować się tym samodzielnie?

 

Co tydzień pojawiają się nowe luki w zabezpieczeniach. Z Premium nie musisz radzić sobie z nimi samodzielnie.

 

Zaktualizowanie jednego pakietu jest proste. Trudniej ustalić, gdzie jeszcze na serwerze ukryte są osobne listy certyfikatów: Python w jednym miejscu, Node.js w drugim, a trzy kontenery Docker w trzecim. Jeśli po aktualizacji przestaną działać płatności na stronie, każda minuta oznacza straty.

Na takie sytuacje Zomro ma dwa rozwiązania.

 

SOD: zrobimy wszystko za Ciebie

 

Nasz administrator systemu:

  • zaktualizuje certyfikaty systemowe;
  • znajdzie i zaktualizuje instalacje Pythona, Node.js, Go i Javy korzystające z własnych list certyfikatów;
  • przebuduje obrazy Docker;
  • sprawdzi, czy strona i integracje działają.

Cena: €12.50 za każde 15 minut pracy.

Zamów kontrolę serwera

 

 

Premium: szybka pomoc, kiedy jej potrzebujesz

 

Na odpowiedź na zwykłe zgłoszenie techniczne możesz czekać do 10 godzin. W ramach Premium odpowiadamy w ciągu 5–30 minut. Jeśli po aktualizacji przestaną działać płatności lub integracja, nie będziesz czekać pół dnia.

Włącz Premium