Jeśli otrzymali Państwo ode mnie wiadomość kierującą na tę stronę, to dlatego, że Państwa witryna najprawdopodobniej korzysta z wersji wtyczki Link Library (wtyczki WordPressa autorstwa Yannicka Lefebvre’a, która znajduje się w Państwa plikach w katalogu /wp-content/plugins/link-library/), która mieści się w zakresie objętym znanym problemem bezpieczeństwa. Ta strona wyjaśnia, na czym polega ten problem, jak sprawdzić, którą wersję Państwo mają, jak ją zaktualizować i co zrobić później.

Problem to CVE-2026-16532, nieuwierzytelnione wstrzyknięcie SQL osiągalne poprzez obsługę zgłaszania odnośników przez wtyczkę. Dotyczy każdego wydania przed 7.9.3 i został naprawiony w 7.9.3. Bieżącym wydaniem w chwili pisania jest 7.9.4, które również zawiera poprawkę. Jeśli korzystają Państwo z czegokolwiek starszego niż 7.9.3, proszę zaktualizować Link Library do wersji 7.9.3 lub nowszej.

Jedna rzecz wymaga jasnego postawienia: nie ma starszej wersji, która byłaby bezpieczna. To nie jest luka, która pojawiła się w pewnym momencie historii wtyczki, a potem została naprawiona. Podatny kod jest obecny w każdym opublikowanym wydaniu, które udało mi się sprawdzić, aż po najstarszą wersję, jaką katalog WordPress.org wciąż udostępnia. „Moja instalacja jest za stara, żeby jej to dotyczyło” nie jest tutaj drogą wyjścia. Jedyne wersje, których problem nie dotyczy, to 7.9.3 i nowsze.

Równie ważne: to powiadomienie nie zależy od tego, jak skonfigurowana jest Państwa witryna. Link Library zawiera formularz pozwalający odwiedzającym proponować odnośniki i naturalnym założeniem jest, że witryna jest narażona tylko wtedy, gdy rzeczywiście umieściła ten formularz gdzieś na stronie. To założenie jest błędne. Objęty problemem kod uruchamia się przy każdym zwykłym żądaniu do części publicznej witryny, niezależnie od tego, czy kiedykolwiek opublikowali Państwo formularz zgłoszeniowy, a domyślne ustawienia wtyczki tego nie blokują. Jeśli Państwa witryna działa na wersji objętej problemem, jest osiągalna. Kropka.

To luka we wtyczce, a nie w rdzeniu WordPressa. W pełni zaktualizowany WordPress nie chroni Państwa, jeśli sama wtyczka Link Library jest w wersji objętej problemem.

Czy ta wiadomość jest wiarygodna?

Tak. To zgłoszenie w duchu odpowiedzialnego ujawniania, w dobrej wierze, od niezależnego badacza bezpieczeństwa. Nie proszę o pieniądze, hasła ani dostęp do witryny i nie próbowałem się do niej włamać, niczego do niej wysłać ani niczego wykorzystać.

Obejrzałem wyłącznie publicznie widoczne pliki, które Państwa witryna udostępnia każdemu odwiedzającemu (tak samo jak publiczna jest strona główna), i odnotowałem numer wersji publikowany przez wtyczkę. Celowo nie wysłałem niczego do funkcji zgłaszania odnośników, ani na Państwa witrynie, ani na żadnej innej, a to sprawdzenie w żaden sposób nie dotyka Państwa danych, panelu administracyjnego ani jakiejkolwiek prywatnej części witryny (więcej w sekcji Co zrobiłem, a czego nie poniżej).

Jeśli chcą Państwo zweryfikować, kim jestem, dane kontaktowe znajdują się na dole tej strony oraz na stronie O mnie.

Dlaczego to ważne

Link Library buduje i wyświetla na Państwa witrynie katalogi odnośników i potrafi przyjmować propozycje odnośników od odwiedzających. To właśnie w obsłudze propozycji tkwi ten problem.

W wersjach objętych problemem, gdy wtyczka przetwarza zgłoszony odnośnik, jej sprawdzenie, czy taki odnośnik już istnieje, buduje zapytanie do bazy danych, wklejając zgłoszone wartości wprost do niego. Wartości są oczyszczane na potrzeby wyświetlania, ale nie są escapowane na potrzeby użycia w SQL, a zapytanie wykonuje się bez przygotowanej instrukcji (prepared statement). Skutek jest taki, że niezalogowany odwiedzający może zmienić to zapytanie i odczytać dane z bazy danych Państwa witryny. Wersja 7.9.3 przepisuje zapytanie tak, by korzystało z przygotowanej instrukcji, co zamyka ten problem.

Powtarzając rzecz z początku strony, bo to ona najłatwiej daje fałszywe poczucie bezpieczeństwa: narażenie nie zależy od tego, czy formularz zgłoszeniowy jest gdziekolwiek opublikowany na Państwa witrynie. Ścieżka kodu przetwarzająca zgłoszenia nasłuchuje przy każdym żądaniu do części publicznej, a wszystko, czego żądanie potrzebuje, by do niej dotrzeć, da się uzyskać z samej wtyczki, bez istnienia jakiegokolwiek formularza na jakiejkolwiek stronie. To, czy Państwa witryna jest narażona, sprowadza się do jednej rzeczy: do wersji, z której Państwo korzystają.

Warto też precyzyjnie powiedzieć, czym ten problem jest, a czym nie jest. Pozwala atakującemu odczytywać dane z bazy danych. To samo w sobie jest poważne, bo baza WordPressa przechowuje takie rzeczy jak adresy e-mail użytkowników i zahaszowane hasła, a na niektórych witrynach dane klientów lub członków. Ale nie jest to samo w sobie zdalne wykonanie kodu, przejęcie witryny ani sposób na przyznanie sobie konta administratora. Jest to węższe niż problemy pełnego przejęcia, o których piszę gdzie indziej, i wolę uczciwie określić skalę, niż zostawić Państwa z wrażeniem groźniejszym, niż uzasadniają to fakty.

Opisuję to na poziomie, jakiego właściciel witryny potrzebuje, by zadziałać, i nie dalej. Nie publikuję szczegółów, które pozwoliłyby komuś odtworzyć problem, i prosiłbym, by nie próbowali Państwo tego na własnej ani cudzej witrynie. Odczytanie numeru wersji, tak jak opisano poniżej, mówi wszystko, co potrzebne do podjęcia decyzji.

Jeśli mój e-mail powoływał się na ten problem, znaczy to, że wersja zgłaszana przez Państwa witrynę jest starsza niż 7.9.3. Nie sprawdzałem, czy akurat Państwa witrynę da się wykorzystać; zaobserwowałem wyłącznie wersję.

Czy mnie to dotyczy?

Wszystko sprowadza się do jednego pytania: której wersji Link Library Państwo używają?

W panelu administracyjnym WordPressa (źródło rozstrzygające):

  1. Proszę zalogować się do kokpitu WordPressa (zwykle Państwadomena.pl/wp-admin).
  2. Przejść do Wtyczki, a następnie Zainstalowane wtyczki.
  3. Odnaleźć Link Library, pozycję, której katalog to link-library, i odczytać wersję pod jej nazwą.

Z publicznego manifestu (bez logowania): proszę otworzyć w przeglądarce Państwadomena.pl/wp-content/plugins/link-library/readme.txt. Wiersz Stable tag: blisko początku to wersja zgłaszana przez instalację; to ten sam publiczny plik, który odczytałem. W przypadku tej wtyczki sprawdziłem, że zgadza się on z faktycznie wydanym kodem w każdym z ostatnich wydań, jest to więc wiarygodne sprawdzenie.

Jedno sprawdzenie, które w przypadku tej wtyczki nie działa, więc proszę na nim nie polegać. Jeśli zwykle odczytują Państwo wersje wtyczek z numeru ?ver= dołączanego do skryptu lub arkusza stylów w źródle strony, tutaj wprowadzi on w błąd. Numery wersji w adresach zasobów tej wtyczki to zamrożone wersje dołączonych bibliotek innych producentów (wartości takie jak 4.0.1, 1.0.0 czy 1.3.9) albo wersja rdzenia WordPressa. Żaden z nich nie jest wersją wtyczki, a porównywanie któregokolwiek z nich z 7.9.3 nie ma sensu. Proszę korzystać z ekranu w panelu administracyjnym albo z readme.txt.

Jeszcze jeden przypadek szczególny: niektóre bardzo stare instalacje pokazują w swoim readme.txt Stable tag: trunk. To w ogóle nie jest numer wersji. Jeśli widzą Państwo taki zapis, proszę użyć zamiast tego ekranu wtyczek w panelu administracyjnym i traktować instalację jako objętą problemem, dopóki ekran nie powie inaczej, ponieważ instalacja na tyle stara, by mówić trunk, jest z pewnością starsza niż 7.9.3.

Następnie proszę zastosować tę regułę:

  • Cokolwiek starszego niż 7.9.3: dotknięte problemem. Proszę zaktualizować. Nie ma granicy, poniżej której starsze wydanie znów staje się bezpieczne.
  • 7.9.3 lub nowsza: już naprawiona. Bieżące wydanie 7.9.4 również zawiera poprawkę.

Jak zaktualizować

Wtyczka jest darmowa, nadal publikowana i aktywnie rozwijana, więc poprawka to zwykła aktualizacja. Najbezpieczniejsza droga to aktualizacja przez sam WordPress, po uprzednim wykonaniu kopii zapasowej:

  1. Proszę wykonać kopię zapasową witryny (pliki i baza danych) przed wprowadzeniem zmian. Większość firm hostingowych oferuje kopie na jedno kliknięcie, można też użyć wtyczki do kopii zapasowych WordPressa.
  2. W panelu administracyjnym WordPressa proszę przejść do Kokpit, a następnie Aktualizacje, albo do Wtyczki, a następnie Zainstalowane wtyczki. Jeśli aktualizacja Link Library jest na liście, proszę zainstalować ją stąd.
  3. Jeśli wolą Państwo wiersz poleceń, WP-CLI robi to samo: wp plugin update link-library.
  4. Jeśli żadna aktualizacja się nie pojawia, najnowsze wydanie można pobrać bezpośrednio ze strony wtyczki w katalogu WordPress.org, Link Library, i zaktualizować przez Wtyczki, następnie Dodaj wtyczkę i Wyślij wtyczkę na serwer.
  5. Po aktualizacji proszę potwierdzić nowy numer wersji (7.9.3 lub nowszy), korzystając z kroków powyżej, i sprawdzić, czy katalogi odnośników nadal się wyświetlają i działają normalnie.

Przy okazji warto upewnić się, że rdzeń WordPressa i pozostałe wtyczki są aktualne, ponieważ ta sama zasada dotyczy ich wszystkich.

Po aktualizacji

Aktualizacja do 7.9.3 lub nowszej zamyka ten problem: sprawdzenie zgłoszenia działa teraz jako przygotowana instrukcja, więc zgłoszone wartości są traktowane jako dane, a nie jako część zapytania.

Czego aktualizacja nie potrafi, powiedziane ostrożnie. Aktualizacja powstrzymuje odczytywanie czegokolwiek z Państwa bazy danych w przyszłości. Nie potrafi cofnąć odczytania tego, co być może zostało już odczytane, gdy witryna była w wersji objętej problemem. Nie mam wglądu w to, czy na Państwa witrynie do tego doszło, i tego nie sprawdzałem; większości witryn z objętego zakresu prawdopodobnie nikt nigdy nie tknął. Ale ponieważ nie mogę powiedzieć tego z pewnością, odrobina ostrożności jest rozsądna, proporcjonalnie do tego, co przechowuje Państwa baza danych:

  • Jeśli Państwa witryna jest zwykłą witryną publikacyjną, w której baza danych mieści wpisy, strony i garstkę kont użytkowników, rozsądnym krokiem jest poproszenie użytkowników (a zwłaszcza administratorów) o zmianę haseł. WordPress przechowuje hasła w postaci zahaszowanej, a nie jawnym tekstem, ale hasze słabych haseł da się złamać w trybie offline, więc świeże hasło usuwa tę obawę.
  • Jeśli Państwa witryna przechowuje coś bardziej wrażliwego (dane członków, dane klientów, klucze API lub inne dane uwierzytelniające trzymane przez wtyczki), te również warto uznać za wymagające wymiany.
  • Wygenerowanie na nowo kluczy i „soli” WordPressa w wp-config.php (nowe wartości są o jedno kliknięcie w oficjalnym generatorze kluczy) jednorazowo wylogowuje wszystkich użytkowników i unieważnia wykradzione tokeny sesji.

Żeby jasno określić ramy: to środek ostrożności, a nie stwierdzenie, że Państwa dane zostały zabrane. To powiadomienie opiera się na numerze wersji, a nie na jakimkolwiek dowodzie ataku.

Co zrobiłem, a czego nie

Dla pełnej przejrzystości co do sprawdzenia stojącego za moim e-mailem: odczytałem wyłącznie publiczne pliki, które Państwa witryna i tak udostępnia każdemu odwiedzającemu, konkretnie publiczny plik readme.txt wtyczki oraz stronę główną. Nie uzyskałem dostępu do panelu administracyjnego WordPressa, do bazy danych ani do żadnej prywatnej części witryny.

W szczególności nigdy niczego nie zgłosiłem do funkcji zgłaszania odnośników, ani na Państwa witrynie, ani nigdzie indziej. Niczego nie przesłano, nie zapisano, nie testowano ani nie wykorzystano. Ma to tu większe znaczenie niż na większości tych stron, ponieważ obsługa zgłoszeń jest dokładnie tym, czego ten problem dotyczy, więc „nie dotknąłem jej” jest całą różnicą między ujawnieniem a włamaniem.

Celowo nie publikuję też szczegółów, które pomogłyby komuś wykorzystać ten problem. Powyższy opis zatrzymuje się na poziomie potrzebnym właścicielowi witryny i nie podaję odnośników do żadnego kodu proof-of-concept.

To obserwacja oparta na wersji: Państwa witryna zgłasza wersję starszą niż 7.9.3. Witryna z tego zakresu może być już chroniona w inny sposób, na przykład przez zaporę aplikacji webowych (WAF) albo wsteczne przeniesienie poprawki. To powiadomienie nie jest stwierdzeniem, że Państwa witrynę dało się wykorzystać w chwili, gdy ją sprawdzałem.

Nie mam webmastera / utknąłem

Jeśli nie zajmują się Państwo witryną osobiście, proszę przekazać tę stronę osobie, która to robi (deweloperowi, agencji lub firmie hostingowej). Powyższe kroki rozpozna od razu.

Jeśli utrzymują Państwo witrynę samodzielnie i utknęli, chętnie bezpłatnie wskażę właściwy kierunek. Proszę napisać, korzystając z danych kontaktowych poniżej.

Kontakt

Evan Harris, badacz bezpieczeństwa

Kontaktuję się w takich sprawach wyłącznie po to, by pomóc operatorom zabezpieczyć ich witryny. Jeśli wolą Państwo nie otrzymywać kolejnych wiadomości, proszę dać znać; uszanuję to.

Źródła

Oficjalne komunikaty i śledzenie

Producent / wtyczka