На 28 октомври 2026 г. беше публикувана CVE-2026-103688, уязвимост в плъгина Checkout Files Upload for WooCommerce, през който клиентите на магазина прикачват файл към поръчката си. Засегнати са всички версии преди 2.4.0, която излезе на 20 октомври. Когато полето за разрешените видове файлове е празно, човек без акаунт може да качи на сървъра какъвто файл поиска, включително PHP скрипт, и да стигне до изпълнение на собствен код. CISA оценява уязвимостта с 9.8 по CVSS, „критична“. Според wordpress.org плъгинът има над 7000 активни инсталации.
Плъгинът се използва от магазини, при които клиентът изпраща файл заедно с поръчката. Това може да е снимка за печат върху чаша или тениска, дизайн на визитки или документ към фирмена поръчка. Ако продавате такива продукти и сте махнали ограничението за форматите, за да приемате всичко, проверете магазина още днес.
Как работи уязвимостта
В настройките на плъгина полето „Accepted file types“ определя какви файлове приема формата за качване. По подразбиране в него стои .jpg,.jpeg,.png. До версия 2.4.0 подсказката до полето казваше, че ако го оставите празно, формата приема всички файлове. Точно така и работеше. Сравнихме кода на 2.3.0 и 2.4.0. При празно поле старата версия не проверява файла по никакъв начин, нито окончанието му, нито съдържанието.
Формата работи и за посетители без акаунт, защото клиентът трябва да може да прикачи файл, преди да е поръчал. Според кода, който прегледахме, каченият файл първо стои във временна папка на сървъра. Когато се създаде поръчка, плъгинът го премества в wp-content/uploads/woocommerce_uploads/alg_uploads/checkout_files_upload/ със същото окончание, с което е качен. Поръчката не е нужно да е платена, защото WooCommerce я създава преди плащането. Така файл с окончание .php остава в папка на сайта като .php.
Дали нападателят може после да го пусне, зависи от сървъра. Записът в CVE говори за сървъри, които изпълняват PHP от папката с качените файлове. WooCommerce слага в woocommerce_uploads файл .htaccess, който на Apache забранява достъпа до папката през браузъра, освен ако начинът за изтегляне на файлове в WooCommerce е „Redirect only (Insecure)“. Nginx обаче изобщо не чете .htaccess, а при местене на сайт този файл понякога се губи. Затова не разчитайте на него.
Версия 2.4.0 затваря пролуката. При празно поле тя пуска само видовете файлове, които WordPress разрешава да се качват и в медийната библиотека, а PHP не е сред тях. Версия 2.4.1 от 5 ноември добавя още защита. Новите файлове се записват под случайно име с окончание .bin, а при изтегляне плъгинът ги подава така, че браузърът да не изпълни код от тях. Файловете, качени преди обновяването, остават с имената си.
Уязвимостта е открита от изследователя Josef Azizov, а записът в CVE е на WPScan. Към 28 октомври CISA отбелязва в него, че няма данни за атаки, но че атаката може да се автоматизира и че техническото въздействие е пълно. Тази CVE не е включена и в каталога на CISA с уязвимости, които се използват в атаки, в изданието му от 6 ноември. WPScan ще публикува примерния код (proof of concept) на 26 ноември 2026 г. и оттогава всеки ще може да види как работи атаката. Обновете преди тази дата. Какво значи оценка 9.8, е обяснено в ръководството за CVSS.
Кои магазини са засегнати
Засегнат е магазин с Checkout Files Upload for WooCommerce преди 2.4.0, в който поне една форма за качване е с празно поле „Accepted file types“. Безплатната версия има една форма, с настройки в раздела File Uploader #1. С платения плъгин Pro формите може да са повече, всяка в свой раздел (File Uploader #2 и така нататък).
Ако полето съдържа списък, например .jpg,.jpeg,.png,.pdf, старата версия проверява и окончанието, и съдържанието на файла, така че тази уязвимост не Ви засяга. Обновете въпреки това, защото 2.4.1 добавя и защитата с имената на файловете, описана по-горе.
Празно поле е удобно за магазин, който приема дизайни в много формати (PSD, AI, SVG) и не иска да ги изброява, а самият плъгин подсказваше точно това решение.
Засегнат ли е Вашият магазин?
Версията се вижда в Plugins > Installed Plugins, а полето е в WooCommerce > Settings > Checkout Files Upload, в раздела на всяка форма. В Terminal на cPanel командите по-долу показват и двете. Как се работи с WP-CLI, е описано в ръководството за WP-CLI.
# cPanel > Terminal, в папката на сайта
# Само чете. Версията на плъгина и полето с видовете файлове.
wp plugin list --fields=name,status,version \
--skip-plugins --skip-themes | grep checkout-files-upload
wp option list \
--search="alg_checkout_files_upload_file_accept_*" \
--fields=option_name,option_value
Ако срещу някой ред alg_checkout_files_upload_file_accept_ няма нищо, полето на тази форма е празно. Ако командата не покаже нито един ред, полето никога не е записвано и важи стойността по подразбиране .jpg,.jpeg,.png.
Следващите команди търсят PHP файлове в папката, в която плъгинът пази файловете от поръчките, и показват защитата, която WooCommerce е сложил на папката woocommerce_uploads. Клиент, който Ви изпраща снимка или PDF, няма причина да качи PHP файл.
# cPanel > Terminal, в папката на сайта
# Само чете. PHP файлове сред файловете от поръчките.
find wp-content/uploads/woocommerce_uploads/alg_uploads -type f \
\( -iname "*.php*" -o -iname "*.phtml" -o -iname "*.phar" \) -ls
# Само чете. Защитата на WooCommerce за папката.
cat wp-content/uploads/woocommerce_uploads/.htaccess
Празен отговор от find е добър знак. Ако тя съобщи, че папката не съществува, през плъгина още не е прикачен нито един файл към поръчка. Втората команда трябва да покаже deny from all. Ако показва нещо друго или файлът липсва, на Apache папката е достъпна през браузъра.
Какво да направите
- Направете бекъп на файловете и базата данни, както е описано в ръководството за бекъп.
- Обновете Checkout Files Upload for WooCommerce до 2.4.1 или по-нова версия от
Dashboard > Updatesили отPlugins > Installed Plugins. Пролуката е затворена още в 2.4.0, но 2.4.1 записва новите файлове под име, което сървърът не изпълнява. Как да обновявате плъгините без изненади, е описано в ръководството за обновяване на плъгини. - Прегледайте полето „Accepted file types“ на всяка форма. От 2.4.0 празното поле вече не значи „всички файлове“. Ако приемате SVG, PSD, AI или друг формат, който WordPress не пуска по подразбиране, впишете в полето всички формати, които приемате. Никога не вписвайте
.php,.phtmlили.phar. След това направете пробна поръчка с прикачен файл, за да видите, че клиентите Ви могат да изпращат каквото им трябва. - Пуснете отново командата
findот предишната част. Обновлението не пипа файловете, качени преди него. Ако намерите PHP файл, не го отваряйте в браузъра, защото така го стартирате. ПрегледайтеUsersза непознати администратори, сменете паролите и следвайте ръководството за хакнат сайт.
Какво правим ние
При наблюдението на уязвимостите следим какво е инсталирано на сайта Ви и всеки ден го сверяваме с базите данни с уязвимости (CVE). Щом се появи уязвимост в нещо, което използвате, изпращаме Ви сигнал и обновяваме, като първо пробваме обновлението на копие в staging. Сайтът може да е хостнат където и да е. Ако искате да включим и Вашия сайт, пишете ни през формата за запитване.
Често задавани въпроси
Какво е CVE-2026-103688?
Уязвимост в плъгина Checkout Files Upload for WooCommerce, публикувана на 28 октомври 2026 г. Когато полето „Accepted file types“ е празно, плъгинът не проверява качените файлове и човек без акаунт може да качи PHP скрипт. На сървър, който изпълнява PHP от папката с качените файлове, това води до изпълнение на чужд код. CISA я оценява с 9.8 по CVSS, „критична“.
Коя версия на Checkout Files Upload for WooCommerce поправя уязвимостта?
Версия 2.4.0 от 20 октомври 2026 г. Версия 2.4.1 от 5 ноември 2026 г. добавя още защита, като записва новите файлове под случайно име с окончание .bin. Обновете поне до 2.4.0, а най-добре до 2.4.1 или по-нова.
Засегнат ли е магазинът, ако полето за видовете файлове никога не е променяно?
Не е засегнат от CVE-2026-103688, ако полето „Accepted file types“ съдържа списък. По подразбиране Checkout Files Upload for WooCommerce приема само .jpg,.jpeg,.png и тогава проверява и окончанието, и съдържанието на файла. Уязвимостта засяга само форма с празно поле, но обновяването до 2.4.1 е полезно и в останалите случаи.
Атакува ли се вече уязвимостта в Checkout Files Upload for WooCommerce?
Към 28 октомври 2026 г. CISA отбелязва в записа на CVE-2026-103688, че няма данни за атаки, но че атаката може да се автоматизира. Тя не е включена и в каталога на CISA с уязвимости, използвани в атаки, в изданието му от 6 ноември. WPScan ще публикува примерния код на 26 ноември 2026 г., затова обновете преди тази дата.
Къде Checkout Files Upload for WooCommerce пази качените файлове?
В папката wp-content/uploads/woocommerce_uploads/alg_uploads/checkout_files_upload/. Плъгинът премества файла там, когато се създаде поръчка, а дотогава той стои във временна папка на сървъра. Във версиите преди 2.4.1 файлът запазва окончанието, с което е качен.
Какво се променя за клиентите след обновяване до Checkout Files Upload 2.4.0?
От 2.4.0 празното поле „Accepted file types“ вече не значи „всички файлове“, а само видовете, които WordPress разрешава по подразбиране. Ако магазинът приема SVG, PSD, AI или друг такъв формат, впишете в полето всички формати, които приемате. След това направете пробна поръчка с прикачен файл.
Какво да направя, ако не мога да обновя Checkout Files Upload веднага?
Впишете в полето „Accepted file types“ само форматите, които наистина приемате, например .jpg,.jpeg,.png,.pdf. С попълнено поле и старите версии на Checkout Files Upload for WooCommerce проверяват всеки файл. Друг вариант е да изключите плъгина до обновяването, но тогава клиентите няма да могат да прикачват файлове.
Какво да направя, ако намеря PHP файл в папката на Checkout Files Upload?
Не го отваряйте в браузъра, защото така го стартирате. Приемете, че сайтът е пробит, прегледайте потребителите с роля администратор, сменете паролите и почистете сайта, както е описано в ръководството за хакнат WordPress сайт. Обновяването до 2.4.1 не изтрива файлове, качени преди него.
Източници
- NVD, CVE-2026-103688
- CVE.org, CVE-2026-103688
- WPScan, Checkout Files Upload for WooCommerce < 2.4.0, Unauthenticated Arbitrary File Upload
- CISA, Known Exploited Vulnerabilities Catalog
- WordPress.org, Checkout Files Upload for WooCommerce
- WordPress.org Plugin SVN, Checkout Files Upload 2.4.1, readme.txt
- WordPress.org Plugin SVN, Checkout Files Upload 2.3.0, class-alg-wc-checkout-files-upload.php
- WordPress.org Plugin SVN, Checkout Files Upload 2.4.0, class-alg-wc-checkout-files-upload.php
- WordPress.org Plugin SVN, Checkout Files Upload 2.4.1, class-alg-wc-checkout-files-upload.php
- WordPress.org Plugin SVN, Checkout Files Upload 2.3.0, папката за файловете
- GitHub, WooCommerce, class-wc-install.php
- WP-CLI, wp plugin list
- WP-CLI, wp option list