Bezpečnostní upozornění k pluginu Drag and Drop Multiple File Upload for Contact Form 7
Pokud jste ode mě dostali e-mail odkazující na tuto stránku, je to proto, že váš web zřejmě
používá verzi pluginu Drag and Drop Multiple File Upload for Contact Form 7 (WordPress
plugin uvedený na WordPress.org pod tímto názvem, od autora codedropz, který se ve vašich
souborech nachází v /wp-content/plugins/drag-and-drop-multiple-file-upload-contact-form-7/),
jež spadá do rozsahu verzí dotčených známým bezpečnostním problémem. Tato stránka vysvětluje,
o jaký problém jde, jak zjistit, zda se vůbec týká vašeho webu, jak zjistit svou verzi, aniž
byste se nechali zmást, a jak aktualizovat.
Upozornění: nejde o verzi pro WooCommerce. Tentýž autor vydává samostatný plugin „Drag and
Drop Multiple File Upload for WooCommerce” (složka
drag-and-drop-multiple-file-upload-for-woocommerce), což je odlišný produkt s vlastním
číslováním verzí. Pokud je plugin ve vašich souborech ten pro WooCommerce, a ne ten pro Contact
Form 7, netýká se vás tato stránka. Vše níže se týká výhradně doplňku pro Contact Form 7.
Než cokoli dalšího, nejdůležitější fakt o tomto upozornění: verze v dotčeném rozsahu sama o sobě neznamená, že je váš web ohrožen. Problém popsaný níže se projeví jen na webech, které mají určitý druh pole pro nahrávání souborů, a jak máte formuláře nastavené, zvenčí nevidím:
- Problém se týká pouze formuláře Contact Form 7, který má některé z pluginových polí pro přetažení souborů nastavené tak, aby přijímalo libovolný typ souboru.
- Pole, které omezuje přijímané typy na konkrétní druhy (například obrázky nebo PDF), tímto problémem není ohroženo, a to ani v dotčené verzi. Omezení přijímaných typů je také výchozím chováním, pokud pole žádné typy neurčuje.
Vaši verzi pluginu dokážu zjistit z veřejného souboru, ale nastavení vašich formulářů zjistit nemohu, takže toto upozornění je preventivní, nikoli potvrzeným zjištěním o vašem webu.
Problém je evidován jako CVE-2026-18781, neautentizovaná chyba při nahrávání souborů ve zpracování nahrávání v pluginu. Týká se verzí 1.3.9.3 až 1.3.9.8 a je opravena ve verzi 1.3.9.9. Pokud používáte dotčenou verzi, aktualizujte Drag and Drop Multiple File Upload for Contact Form 7 na verzi 1.3.9.9 nebo novější a udržujte aktuální i samotný Contact Form 7.
Pár slov k naléhavosti, protože jde o podmíněné upozornění. Pokud žádné z vašich polí pro nahrávání nepřijímá libovolný typ souboru, je aktualizace běžnou údržbou pluginu. Pokud některé takové pole máte, považujte prosím aktualizaci za prioritu: při takovém nastavení by chyba mohla návštěvníkovi bez jakéhokoli účtu umožnit uložit na váš server soubor podle vlastního výběru, a to takového druhu, jaký by pak server mohl spustit, což může vést k plnému ovládnutí webu.
Jde o chybu pluginu, nikoli o chybu jádra WordPressu, a je nezávislá na samotném Contact Form 7. Zcela aktuální WordPress ani aktuální Contact Form 7 vás neochrání, pokud je tento doplněk v dotčené verzi.
Je tato zpráva legitimní?
Ano. Jde o upozornění v duchu odpovědného zveřejňování, v dobré víře, od nezávislého bezpečnostního výzkumníka. Nežádám vás o peníze, hesla ani přístup k webu a nepokoušel jsem se do něj proniknout, odeslat žádný z vašich formulářů ani do něj nic nahrát.
Jen jsem si prohlédl veřejně viditelné soubory, které váš web poskytuje každému návštěvníkovi (stejně jako je veřejná vaše úvodní stránka), a poznamenal si číslo verze, které plugin zveřejňuje. Výslovně jsem neodeslal žádný formulář, nenahrál jsem žádný soubor a nešel jsem ani blízko ke zpracování nahrávání v pluginu. Nic na této kontrole se nedotýká vašich dat, vaší administrace ani žádné soukromé části webu (podrobněji v části Co jsem udělal a co ne níže).
Pokud si chcete ověřit, kdo jsem, kontakty najdete v dolní části této stránky a na stránce O mně.
Proč na tom záleží
Tento plugin přidává do formulářů Contact Form 7 pole pro přetažení souborů, takže návštěvníci mohou při odeslání formuláře přiložit soubor: žádost o zaměstnání, žádost o podporu, fotografii. Aby to bylo bezpečné, má plugin odmítat nebezpečné typy souborů.
V dotčených verzích bylo možné tuto kontrolu obejít. Plugin zkoumal název nahrávaného souboru, aby rozhodl, zda je typ povolený, poté název upravil a soubor uložil, aniž by upravený název znovu zkontroloval. Protože se název měnil až po schválení, šlo jej sestavit tak, aby verze, která byla zkontrolována, vypadala neškodně, zatímco verze, která byla nakonec uložena, neškodná nebyla, čímž se na server mohl dostat nepovolený typ souboru. Tam, kde server takový soubor následně považuje za něco, co může spustit, je výsledkem, že se na vašem webu spustí soubor cizí osoby.
Z toho plynou dvě věci, které míří opačným směrem. První je, že na tom záleží jen tam, kde má formulář pole pro nahrávání nastavené tak, aby přijímalo libovolný typ souboru. Tam, kde je každé pole pro nahrávání omezeno na konkrétní sadu typů, maskovaný soubor neodpovídá povolenému typu a je odmítnut, takže web v takovém stavu tímto problémem dosažitelný není. Druhá věc je, že tam, kde pole „přijmout cokoli” skutečně existuje, není potřeba žádný účet, žádné heslo ani součinnost kohokoli: formulář je veřejně přístupný podle svého určení.
Popisuji to na úrovni, kterou majitel webu potřebuje k tomu, aby mohl jednat, a dál ne. Nezveřejňuji podrobnosti, které by někomu umožnily problém reprodukovat, a prosil bych vás, abyste to nezkoušeli na svém ani na cizím webu. Zjištění nastavení vašeho formuláře a čísla vaší verze, jak je popsáno níže, vám řekne vše, co potřebujete k rozhodnutí, co dělat.
Pokud můj e-mail zmiňoval tento problém, znamená to, že verze, kterou váš web hlásí, spadá do dotčeného rozsahu. Netestoval jsem, zda je zrovna váš web zneužitelný, a nevidím, jak máte formuláře nastavené. Pozoroval jsem pouze verzi.
Týká se to mě?
Rozhodují o tom dvě otázky, v tomto pořadí.
Za prvé: přijímá některé pole pro nahrávání „libovolný typ souboru”?
Toto je rozhodující otázka a odpovědět na ni můžete jedině vy. Kontrola vlastních formulářů je zcela bezpečná a je celým smyslem této stránky.
- Přihlaste se do nástěnky WordPressu a v postranním panelu otevřete Kontakt (Contact Form 7).
- Otevřete každý formulář, který nabízí nahrávání souborů, a najděte pole pro přetažení souboru (pole tohoto pluginu, přidané vedle standardních značek Contact Form 7).
- Zkontrolujte, zda toto pole omezuje typy souborů, které přijímá.
- Pokud je každé pole pro nahrávání omezeno na konkrétní typy (například
jpg,png,pdf), tento problém váš web nezasahuje, a to ani v dotčené verzi. Aktualizace se přesto vyplatí jako běžná údržba. - Pokud je některé pole pro nahrávání nastaveno tak, aby přijímalo libovolný typ souboru, problém se vás týká a měli byste neprodleně aktualizovat. Omezení tohoto pole na typy, které skutečně potřebujete, je samo o sobě rozumný krok, ale skutečnou opravou je aktualizace.
Nepokoušejte se prosím problém reprodukovat na svém ani na cizím webu; k zodpovězení otázky výše to nepotřebujete.
Za druhé: jakou verzi používáte?
Nemusíte mi to jen věřit na slovo. U tohoto pluginu existuje jeden konkrétní způsob kontroly, který vás zavede špatným směrem, takže se vyplatí přečíst si tuto část pozorně.
Ve správcovské části WordPressu (rozhodující zdroj):
- V administraci WordPressu přejděte na Pluginy a poté Instalované pluginy.
- Najděte Drag and Drop Multiple File Upload - Contact Form 7, položku, jejíž složka je
drag-and-drop-multiple-file-upload-contact-form-7, a přečtěte si verzi uvedenou pod jejím názvem.
Z veřejného manifestu (bez přihlášení): otevřete v prohlížeči
vasedomena.cz/wp-content/plugins/drag-and-drop-multiple-file-upload-contact-form-7/readme.txt.
Řádek Stable tag: poblíž začátku je verze, kterou vaše instalace hlásí, a je to jeden
z veřejných zdrojů, které jsem četl.
Ze zdrojového kódu stránky (bez přihlášení): zobrazte zdrojový kód některé stránky svého webu a vyhledejte jeden z pluginových prvků na straně webu přesně na těchto adresách:
/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=...
Číslo ?ver= připojené k těmto souborům pod touto složkou je vlastní verzí pluginu. U
tohoto pluginu přesně odpovídá vydání, a proto ji považuji za spolehlivý údaj.
Past, na kterou si dát pozor. Autorův samostatný plugin pro WooCommerce obsahuje soubor se
stejným názvem, codedropz-uploader-min.js, ve své vlastní složce
(drag-and-drop-multiple-file-upload-for-woocommerce) s nesouvisejícím číslem verze.
Pokud čtete verzi ze zdrojového kódu své stránky, ujistěte se, že složka v adrese je
drag-and-drop-multiple-file-upload-contact-form-7, a ne ta pro WooCommerce; jinak byste
četli verzi zcela jiného produktu.
Poté použijte toto pravidlo, přičemž verze se porovnávají číselně, nikoli abecedně:
- 1.3.9.3 až 1.3.9.8: potenciálně dotčeno, v závislosti na otázce ohledně pole pro nahrávání výše. Aktualizujte hned.
- 1.3.9.9 nebo novější: z hlediska tohoto problému již opraveno. Nejlepším krokem je použít nejnovější dostupnou verzi.
- Starší než 1.3.9.3: tímto problémem není dotčeno. Konkrétní slabina popsaná výše byla zavedena až ve verzi 1.3.9.3. I tak je ale tak staré vydání ve všem ostatním hodně pozadu, takže se aktualizace vyplatí i z obecných důvodů.
Pokud se vám z kontrol výše nepodaří získat čitelnou verzi, není to nic neobvyklého: cachovací
nebo optimalizační pluginy hodnotu ?ver= běžně odstraňují a tyto prvky se navíc objeví jen
tam, kde se plugin načítá. Odpověď vždy najdete na správcovské obrazovce z prvního kroku.
Jak aktualizovat
Nejbezpečnější cestou je aktualizovat přímo přes WordPress a předtím si udělat zálohu:
- Zazálohujte si web (soubory i databázi), než začnete cokoli měnit. Většina hostingů nabízí zálohy na jedno kliknutí, případně použijte zálohovací plugin pro WordPress.
- V administraci WordPressu přejděte na Nástěnka a poté Aktualizace, nebo na Pluginy a poté Instalované pluginy. Pokud je aktualizace tohoto pluginu v seznamu, nainstalujte ji odsud.
- Pokud dáváte přednost příkazové řádce, WP-CLI dělá totéž:
wp plugin update drag-and-drop-multiple-file-upload-contact-form-7(příkaz používá název složky). - Pokud se žádná aktualizace neobjeví, nejnovější vydání získáte přímo ze stránky pluginu v adresáři WordPress.org, Drag and Drop Multiple File Upload for Contact Form 7, a aktualizujete přes Pluginy, poté Instalace pluginů a Nahrát plugin.
- Po aktualizaci si podle kroků výše ověřte nové číslo verze (1.3.9.9 nebo novější) a zkontrolujte, že vaše formuláře a nahrávání souborů stále fungují normálně.
Když už tam budete, vyplatí se ověřit, že jádro WordPressu, Contact Form 7 a vaše ostatní pluginy jsou aktuální, protože tentýž princip platí pro všechny.
Po aktualizaci
Aktualizace na verzi 1.3.9.9 nebo novější problém uzavírá a pro většinu webů je to celý úkol. Tato stránka je preventivní upozornění, nikoli hlášení o incidentu: nemám žádný přehled o tom, zda se na vašem webu něco stalo, a nezjišťoval jsem to.
Stojí za zvážení jeden následný krok, podmíněný stejnou otázkou ohledně pole pro nahrávání. Pokud měl váš web formulář s polem pro nahrávání nastaveným na „přijmout libovolný typ souboru” a zároveň běžel na dotčené verzi, bylo přinejmenším teoreticky možné, že se na váš server dostal soubor. Aktualizace tuto díru uzavírá, ale neodstraní nic, co už mohlo být uloženo, takže se v takovém případě vyplatí pár běžných opatření:
- Projděte si adresář s nahranými soubory (obvykle pod
wp-content/uploads/) a hledejte soubory, které nepoznáváte, zejména takové, jež neodpovídají druhu dokumentů nebo obrázků, které mají vaše formuláře přijímat. - Projděte si účty správců, nedávná přihlášení a všechny aktivní relace, zda tam není něco, co si nedokážete vysvětlit.
- Změňte hesla u účtů správců. Rozumným doplňkovým krokem je také opětovné vygenerování
bezpečnostních klíčů a „saltů” WordPressu v
wp-config.php(nové hodnoty jsou na jedno kliknutí v oficiálním generátoru klíčů a jejich výměna jednorázově odhlásí všechny uživatele).
Pokud najdete něco, co vás znepokojuje, správnou reakcí je zacházet s tím jako s jakýmkoli jiným podezřením na neoprávněný přístup. Pokud žádný z vašich formulářů neměl pole pro nahrávání nastavené na „přijmout libovolný typ souboru”, stačí samotná aktualizace.
Co jsem udělal a co ne
Abych byl zcela transparentní ohledně kontroly, která stojí za mým e-mailem: četl jsem pouze
soubory, které váš web už tak poskytuje každému návštěvníkovi, konkrétně veřejný soubor
readme.txt pluginu, vaši úvodní stránku a adresy prvků zapsané na této stránce.
Nepřistupoval jsem k administraci WordPressu, k databázi ani k žádné soukromé části webu.
Především jsem nikdy neodeslal žádný z vašich formulářů, nikdy jsem nenahrál soubor a nikdy jsem se nedotkl zpracování nahrávání v pluginu. Nic nebylo odesláno, testováno ani zneužito. Tady na tom záleží víc než u většiny těchto stránek, protože nahrání souboru je přesně ta činnost, které se tento problém týká, takže „nedotkl jsem se toho” je celý rozdíl mezi zveřejněním a průnikem.
Záměrně také nezveřejňuji podrobnosti, které by někomu pomohly tento problém využít. Popis výše končí na úrovni, kterou majitel webu potřebuje, a neodkazuji na žádný ukázkový kód.
Jde o pozorování založené na verzi: váš web hlásí verzi v dotčeném rozsahu. Není to tvrzení, že váš web byl v době mé kontroly zneužitelný. Protože problém závisí na nastavení formuláře, které nevidím, web v tomto rozsahu nemusí být vůbec ohrožen a může být navíc chráněn jinými prostředky, například webovým aplikačním firewallem.
Nemám webmastera / nevím, kudy dál
Pokud web nespravujete vy, přepošlete prosím tuto stránku tomu, kdo to dělá (vašemu vývojáři, agentuře nebo hostingu). Výše uvedené kroky rychle pozná.
Pokud web spravujete sami a zaseknete se, rád vás nasměruji, zdarma. Ozvěte se pomocí kontaktů níže.
Kontakt
Evan Harris, bezpečnostní výzkumník
- E-mail: security@mail.mcpsec.dev
- X: @Evan__Harris
- GitHub: eharris128
- LinkedIn: Evan Harris
Kontaktuji provozovatele ohledně takových věcí výhradně proto, abych jim pomohl zabezpečit weby. Pokud si nepřejete být kontaktováni znovu, stačí dát vědět a budu to respektovat.
Odkazy
Oficiální hlášení a sledování
Dodavatel / plugin