Jeśli otrzymali Państwo ode mnie wiadomość kierującą na tę stronę, to dlatego, że Państwa witryna najprawdopodobniej korzysta z wersji wtyczki Drag and Drop Multiple File Upload for Contact Form 7 (wtyczki WordPressa wymienionej w katalogu WordPress.org pod tą nazwą, autorstwa codedropz, która znajduje się w Państwa plikach w katalogu /wp-content/plugins/drag-and-drop-multiple-file-upload-contact-form-7/), która mieści się w zakresie objętym znanym problemem bezpieczeństwa. Ta strona wyjaśnia, na czym polega ten problem, jak sprawdzić, czy w ogóle dotyczy on Państwa witryny, jak odczytać swoją wersję, nie dając się wprowadzić w błąd, i jak zaktualizować.

Uwaga: to nie jest wersja dla WooCommerce. Ten sam autor publikuje osobną wtyczkę, „Drag and Drop Multiple File Upload for WooCommerce” (katalog drag-and-drop-multiple-file-upload-for-woocommerce), która jest odrębnym produktem z własną numeracją wersji. Jeśli wtyczka w Państwa plikach to wersja dla WooCommerce, a nie dla Contact Form 7, ta strona jej nie dotyczy. Wszystko poniżej dotyczy wyłącznie dodatku Contact Form 7.

Zanim przejdę dalej, najważniejszy fakt dotyczący tego powiadomienia: sama wersja z zakresu objętego problemem nie oznacza jeszcze, że Państwa witryna jest narażona. Poniższy problem uruchamia się tylko na witrynach, które mają szczególny rodzaj pola przesyłania plików, a ja nie widzę z zewnątrz, jak skonfigurowane są Państwa formularze:

  • Problem dosięga wyłącznie formularza Contact Form 7, w którym jedno z pól przesyłania typu drag-and-drop tej wtyczki jest ustawione tak, by akceptować dowolny typ pliku.
  • Pole, które ogranicza akceptowane typy do konkretnych rodzajów (na przykład obrazów lub plików PDF), nie jest narażone na ten problem, nawet przy wersji objętej problemem. Ograniczenie akceptowanych typów jest też ustawieniem domyślnym, gdy pole ich nie określa.

Mogę odczytać wersję Państwa wtyczki z publicznego pliku, ale nie mogę odczytać konfiguracji Państwa formularzy, więc to powiadomienie jest zapobiegawczym ostrzeżeniem, a nie potwierdzonym ustaleniem dotyczącym Państwa witryny.

Problem to CVE-2026-18781, nieuwierzytelniona luka w przesyłaniu plików w obsłudze przesyłania przez wtyczkę. Dotyczy wersji od 1.3.9.3 do 1.3.9.8 i został naprawiony w wersji 1.3.9.9. Jeśli korzystają Państwo z wersji objętej problemem, proszę zaktualizować Drag and Drop Multiple File Upload for Contact Form 7 do wersji 1.3.9.9 lub nowszej oraz na bieżąco aktualizować sam Contact Form 7.

Słowo o pilności, ponieważ to powiadomienie jest warunkowe. Jeśli żadne z Państwa pól przesyłania nie akceptuje dowolnego typu pliku, aktualizacja to zwykła konserwacja wtyczki. Jeśli choć jedno z nich to robi, proszę potraktować aktualizację priorytetowo: w takiej konfiguracji luka mogła pozwolić odwiedzającemu bez żadnego konta zapisać na Państwa serwerze dowolnie wybrany przez siebie plik, takiego rodzaju, jaki serwer mógłby następnie uruchomić, co może prowadzić do pełnego przejęcia witryny.

To luka we wtyczce, a nie w rdzeniu WordPressa, i jest odrębna od samego Contact Form 7. W pełni zaktualizowany WordPress oraz zaktualizowany Contact Form 7 nie chronią Państwa, jeśli ten dodatek 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ć, wysłać żadnego z Państwa formularzy ani niczego do niej przesłać.

Zrobiłem wyłącznie to, że obejrzałem 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 żadnego formularza, nie przesłałem żadnego pliku i nie zbliżyłem się do obsługi przesyłania plików wtyczki. Nic w tym sprawdzeniu 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

Ta wtyczka dodaje do formularzy Contact Form 7 pola przesyłania plików metodą „przeciągnij i upuść”, dzięki czemu odwiedzający mogą dołączać pliki przy wysyłaniu formularza: podanie o pracę, zgłoszenie do wsparcia, zdjęcie. Żeby było to bezpieczne, wtyczka powinna odrzucać niebezpieczne typy plików.

W wersjach objętych problemem to sprawdzenie dało się obejść. Wtyczka sprawdzała nazwę przesyłanego pliku, by zdecydować, czy typ jest dozwolony, następnie zmieniała tę nazwę i zapisywała plik bez ponownego sprawdzenia zmienionej nazwy. Ponieważ nazwa była zmieniana już po zatwierdzeniu, dało się tak ją ułożyć, by wersja sprawdzana wyglądała nieszkodliwie, podczas gdy wersja faktycznie zapisywana taka nie była, co pozwalało niedozwolonemu typowi pliku wylądować na serwerze. Tam, gdzie serwer traktuje potem taki plik jako coś, co może uruchomić, skutkiem jest to, że na Państwa witrynie uruchamia się plik obcej osoby.

Wynikają z tego dwie rzeczy, ciągnące w przeciwne strony. Pierwsza jest taka, że ma to znaczenie tylko tam, gdzie formularz ma pole przesyłania skonfigurowane tak, by akceptować dowolny typ pliku. Tam, gdzie każde pole przesyłania jest ograniczone do konkretnego zestawu typów, zamaskowany plik nie pasuje do dozwolonego typu i zostaje odrzucony, więc witryna w takim stanie nie jest osiągalna przez ten problem. Druga jest taka, że tam, gdzie pole „akceptuj wszystko” istnieje, nie jest wymagane żadne konto, żadne hasło ani czyjakolwiek współpraca: formularz z założenia jest otwarty publicznie.

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ś to odtworzyć, i prosiłbym, by nie próbowali Państwo tego na własnej ani cudzej witrynie. Sprawdzenie konfiguracji formularza i 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ę mieści się w zakresie objętym problemem. Nie sprawdzałem, czy akurat Państwa witrynę da się wykorzystać, i nie widzę, jak skonfigurowane są Państwa formularze. Zaobserwowałem wyłącznie wersję.

Czy mnie to dotyczy?

O tym decydują dwa pytania, w tej kolejności.

Po pierwsze: czy jakiekolwiek pole przesyłania akceptuje „dowolny typ pliku”?

To pytanie rozstrzygające, i tylko Państwo mogą na nie odpowiedzieć. Sprawdzenie własnych formularzy jest całkowicie bezpieczne i to jest właśnie sens tej strony.

  1. Proszę zalogować się do kokpitu WordPressa i otworzyć w menu bocznym Kontakt (Contact Form 7).
  2. Otworzyć każdy formularz, który oferuje przesyłanie pliku, i odnaleźć pole przesyłania typu drag-and-drop (pole tej wtyczki, dodane obok standardowych znaczników Contact Form 7).
  3. Sprawdzić, czy to pole ogranicza akceptowane typy plików.
  • Jeśli każde pole przesyłania jest ograniczone do konkretnych typów (na przykład jpg, png, pdf), ten problem nie dosięga Państwa witryny, nawet przy wersji objętej problemem. Aktualizacja nadal warta jest wykonania jako zwykła konserwacja.
  • Jeśli jakiekolwiek pole przesyłania jest ustawione tak, by akceptować dowolny typ pliku, problem Państwa dotyczy i powinni Państwo zaktualizować niezwłocznie. Ograniczenie tego pola do typów, których rzeczywiście Państwo potrzebują, jest rozsądnym krokiem samym w sobie, ale to aktualizacja jest właściwą poprawką.

Proszę nie próbować odtwarzać tego problemu na własnej ani cudzej witrynie; nie jest to potrzebne, by odpowiedzieć na powyższe pytanie.

Po drugie: której wersji Państwo używają?

Nie muszą Państwo wierzyć mi na słowo. W przypadku tej wtyczki jest jeden konkretny sposób sprawdzenia, który wprowadzi Państwa w błąd, więc warto uważnie przeczytać tę część.

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

  1. W panelu administracyjnym WordPressa proszę przejść do Wtyczki, a następnie Zainstalowane wtyczki.
  2. Odnaleźć Drag and Drop Multiple File Upload - Contact Form 7, pozycję, której katalog to drag-and-drop-multiple-file-upload-contact-form-7, i odczytać wersję pod jej nazwą.

Z publicznego manifestu (bez logowania): proszę otworzyć w przeglądarce Państwadomena.pl/wp-content/plugins/drag-and-drop-multiple-file-upload-contact-form-7/readme.txt. Wiersz Stable tag: blisko początku to wersja zgłaszana przez Państwa instalację; to jedno ze źródeł publicznych, które odczytałem.

Ze źródła strony (bez logowania): proszę obejrzeć źródło strony na Państwa witrynie i odszukać jeden z zasobów front-endowych wtyczki pod dokładnie tymi ścieżkami:

/wp-content/plugins/drag-and-drop-multiple-file-upload-contact-form-7/assets/css/dnd-upload-cf7.css?ver=...
/wp-content/plugins/drag-and-drop-multiple-file-upload-contact-form-7/assets/js/codedropz-uploader-min.js?ver=...

Numer ?ver= dołączony do tych plików pod tym katalogiem to własna wersja wtyczki. W przypadku tej wtyczki dokładnie odpowiada ona wydaniu, dlatego traktuję ją jako wiarygodne źródło.

Pułapka, której należy tu unikać. Osobna wtyczka autora dla WooCommerce zawiera plik o tej samej nazwie, codedropz-uploader-min.js, we własnym katalogu (drag-and-drop-multiple-file-upload-for-woocommerce), z numerem wersji niezwiązanym z tym problemem. Jeśli odczytują Państwo wersję ze źródła strony, proszę upewnić się, że katalog w ścieżce to drag-and-drop-multiple-file-upload-contact-form-7, a nie ten dla WooCommerce; w przeciwnym razie odczytają Państwo wersję zupełnie innego produktu.

Następnie proszę zastosować tę regułę, pamiętając, że wersje porównuje się numerycznie, a nie alfabetycznie:

  • Od 1.3.9.3 do 1.3.9.8: potencjalnie dotknięte problemem, zależnie od pytania o pole przesyłania powyżej. Proszę zaktualizować teraz.
  • 1.3.9.9 lub nowsza: już naprawiona, jeśli chodzi o ten problem. Najlepszym rozwiązaniem jest wybranie najnowszej dostępnej wersji.
  • Starsza niż 1.3.9.3: nie dotknięta tym problemem. Opisana wyżej konkretna słabość została wprowadzona w wersji 1.3.9.3. Mimo to wydanie tak stare jest mocno w tyle pod każdym innym względem, więc aktualizacja jest warta wykonania z ogólnych powodów.

Jeśli powyższe sposoby nie dają czytelnej wersji, nie ma w tym nic niezwykłego: wtyczki do buforowania lub optymalizacji rutynowo usuwają wartość ?ver=, a zasoby pojawiają się tylko tam, gdzie wtyczka się ładuje. Ekran administracyjny z kroku pierwszego zawsze da odpowiedź.

Jak zaktualizować

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 tej wtyczki 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 drag-and-drop-multiple-file-upload-contact-form-7 (polecenie używa nazwy katalogu).
  4. Jeśli żadna aktualizacja się nie pojawia, najnowsze wydanie można pobrać bezpośrednio ze strony wtyczki w katalogu WordPress.org, Drag and Drop Multiple File Upload for Contact Form 7, i zaktualizować przez Wtyczki, następnie Dodaj wtyczkę i Wyślij wtyczkę na serwer.
  5. Po aktualizacji proszę potwierdzić nowy numer wersji (1.3.9.9 lub nowszy), korzystając z kroków powyżej, i sprawdzić, czy Państwa formularze i przesyłanie plików nadal działają normalnie.

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

Po aktualizacji

Aktualizacja do wersji 1.3.9.9 lub nowszej zamyka ten problem i dla większości witryn to cały zakres zadania. Ta strona jest powiadomieniem zapobiegawczym, a nie raportem incydentu: nie mam wglądu w to, czy na Państwa witrynie coś się wydarzyło, i tego nie sprawdzałem.

Jedną rzecz warto rozważyć jako uzupełnienie, i jest ona warunkowa, zależna od tego samego pytania o pole przesyłania. Jeśli Państwa witryna miała formularz z polem przesyłania „akceptuj dowolny typ pliku”, działając na wersji objętej problemem, to przynajmniej teoretycznie było możliwe umieszczenie pliku na Państwa serwerze. Aktualizacja zamyka lukę, ale nie usuwa niczego, co mogło zostać wcześniej zapisane, więc w takim przypadku rozsądnych jest kilka rutynowych środków ostrożności:

  • Proszę przejrzeć katalog przesłanych plików (zwykle pod wp-content/uploads/) pod kątem plików, których Państwo nie rozpoznają, zwłaszcza takich, które nie są rodzajem dokumentów lub obrazów, jakie mają odbierać Państwa formularze.
  • Proszę przejrzeć konta administratorów, ostatnie logowania i wszelkie aktywne sesje pod kątem czegokolwiek, czego nie potrafią Państwo wyjaśnić.
  • Proszę zresetować hasła na kontach administratorów. Rozsądnym krokiem uzupełniającym jest ponowne wygenerowanie kluczy i „soli” WordPressa w wp-config.php (nowe wartości są o jedno kliknięcie w oficjalnym generatorze kluczy, a ich podmiana jednorazowo wylogowuje wszystkich użytkowników).

Jeśli znajdą Państwo coś niepokojącego, właściwą reakcją jest potraktowanie tego tak samo, jak każdego innego podejrzenia nieuprawnionego dostępu. Jeśli żaden z Państwa formularzy nie miał pola przesyłania „akceptuj dowolny typ pliku”, sama aktualizacja wystarczy.

Co zrobiłem, a czego nie

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

W szczególności nigdy nie wysłałem żadnego z Państwa formularzy, nigdy nie przesłałem pliku i nigdy nie dotknąłem obsługi przesyłania plików wtyczki. Niczego nie wysłano, nie przetestowano ani nie wykorzystano. Ma to tu większe znaczenie niż na większości tych stron, ponieważ przesyłanie pliku jest dokładnie tą czynnością, której dotyczy ten problem, 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ę z zakresu objętego problemem. Nie jest to stwierdzenie, że Państwa witrynę dało się wykorzystać w chwili, gdy ją sprawdzałem. Ponieważ problem zależy od ustawienia formularza, którego nie widzę, witryna z tego zakresu wcale nie musi być narażona, a witryna z tego zakresu może być też osobno chroniona innymi środkami, takimi jak zapora aplikacji webowych (WAF).

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