Hơn 1,2 Triệu Website WordPress Đối Mặt Nguy Cơ Bị Chiếm Quyền Từ Một Cuộc Tấn Công Chuỗi Cung Ứng

Trong khoảng 25 phút đêm 12/06, mọi website WordPress đang nạp script theo dõi của OptinMonster chỉ cách một backdoor hoàn chỉnh đúng một thao tác: một admin đăng nhập vào trang. Chủ site không làm gì sai. Họ không chạy plugin lỗi thời, không bỏ sót bản vá, không bấm vào link lừa đảo. Trình duyệt của họ đơn giản là tải một file JavaScript từ CDN mà họ đã tin tưởng nhiều năm, và file đó đã bị viết lại trong im lặng.
Đây là chiến dịch supply chain nhắm vào OptinMonster, được công bố bởi OptinMonster supply chain attack hits 1.2 million sites ngày 13/06. Nó là một trong những minh họa rõ ràng nhất cho một vấn đề mà phần lớn đội phòng thủ WordPress vẫn đánh giá thấp: các script bên thứ ba mà site nạp lúc runtime là một phần của bề mặt tấn công, và chúng nằm hoàn toàn ngoài chu trình vá lỗi của bạn.
Tổng Quan
Kẻ tấn công đã chỉnh sửa các JavaScript SDK mà ba plugin marketing của Awesome Motive (OptinMonster, TrustPulse, PushEngage) phân phối tới site khách hàng từ CDN do hãng kiểm soát. Script bị nhiễm nằm im với khách truy cập thông thường, chỉ kích hoạt khi một admin WordPress đang đăng nhập nạp trang. Sau đó nó mượn chính phiên xác thực của admin để tạo một tài khoản quản trị ẩn và cài một plugin backdoor tự che giấu, mở ra một web shell.
Sansec ước tính tổng mức phơi nhiễm hơn 1,2 triệu site, phần lớn thuộc về OptinMonster với hơn một triệu lượt cài đang hoạt động. Con số đó là độ phủ chứ không phải thiệt hại, nó đếm số site chạy plugin chứ không phải số site đã bị xâm nhập. Cửa sổ phơi nhiễm ngắn với hai trong ba plugin và dài hơn với PushEngage. Các hãng đã khắc phục CDN, nhưng việc đó không làm sạch một site vốn đã bị chiếm. Hành động quan trọng nhất là: nếu bất kỳ plugin nào trong ba plugin này từng active trên site trong khoảng 12 đến 14/06 và có admin truy cập trong cửa sổ đó, hãy quét phía server ngay, bởi vì dashboard WordPress không cho bạn biết bạn có bị dính hay không.
Chi tiết chiến dịch
| Thuộc tính | Chi tiết |
|---|---|
| Sản phẩm bị ảnh hưởng | OptinMonster, TrustPulse, PushEngage (đều của Awesome Motive) |
| Phơi nhiễm | Hơn 1,2 triệu site (Sansec); riêng OptinMonster hơn 1 triệu lượt cài |
| Loại tấn công | Supply chain phần mềm qua JavaScript CDN bị chỉnh sửa |
| Mục tiêu chính | Backdoor và web shell duy trì trên site WordPress |
| C2 | tidio[.]cc (84.201.6[.]54, Ultahost AS214036) |
| Tên giả mạo | tidio.com (nhà cung cấp live-chat hợp pháp) |
| Phát hiện | Sansec, công bố 13/06/2026 |
| Trạng thái | CDN đã khắc phục; site bị xâm nhập cần dọn dẹp thủ công |
Caption: SDK bị chỉnh sửa lan tới site khách hàng thông qua CDN.
Dòng thời gian
| Thời điểm (UTC) | Sự kiện |
|---|---|
| 28/04/2026 | Domain C2 tidio[.]cc được đăng ký và cấp chứng chỉ TLS |
| 12/06, 22:17 | Mã độc lần đầu xuất hiện trong api.min.js của OptinMonster và TrustPulse |
| 12/06, 22:42 | Lần cuối xác nhận mã độc còn trên CDN của OptinMonster và TrustPulse |
| 13/06, 19:02 | SDK PushEngage vẫn phục vụ mã độc từ một số CDN edge |
| 13/06 | Sansec công bố báo cáo |
| 14/06 | PushEngage gỡ mã độc; OptinMonster ra thông báo sự cố |
| 14 đến 15/06 | Rule giảm thiểu của Patchstack chặn các nỗ lực khai thác trực tiếp |
Hai plugin có nhiều site nhất lại có cửa sổ ngắn nhất. PushEngage, với số lượt cài self-hosted ít hơn nhiều, có cửa sổ dài nhất, SDK bị chỉnh sửa vẫn còn trên một số CDN edge sang tới 14/06 khi cache được purge. Khoảng cách sáu tuần giữa thời điểm đăng ký domain và thời điểm thực thi là dấu hiệu rõ nhất cho thấy đây là một chiến dịch có chuẩn bị, không phải cơ hội.
Cách tấn công vận hành
Giai đoạn 1: Chiếm CDN và chỉnh sửa script
Theo công bố từ phía hãng, kẻ tấn công ban đầu giành quyền truy cập vào server lưu trữ website marketing của OptinMonster bằng cách khai thác một lỗ hổng trong plugin backup UpdraftPlus. Server đó tách biệt với hệ thống production và dữ liệu khách hàng, nhưng nó giữ một thứ cũng hữu ích không kém: một CDN API key. Có key này, kẻ tấn công không cần xâm nhập ứng dụng chính. Họ chỉ việc chỉnh sửa các file JavaScript mà CDN vốn đang phân phối tới site khách hàng.
Logic độc hại được nối thêm vào cuối SDK minified gốc thay vì thay thế nó, nên file vẫn hoạt động bình thường trong khi mã của kẻ tấn công chạy song song. Theo phân tích của Patchstack, các endpoint bị chỉnh sửa là SDK front-end của các plugin:
a.omappapi.com/app/js/api.min.js # OptinMonster
a.opmnstr.com/app/js/api.min.js # OptinMonster
a.optnmstr.com/app/js/api.min.js # OptinMonster
a.trstplse.com/app/js/api.min.js # TrustPulse
clientcdn.pushengage.com/sdks/pushengage-web-sdk.js # PushEngage
Cần lưu ý rằng điểm xâm nhập ban đầu chưa được kết luận. Giả thuyết UpdraftPlus đến từ tường thuật của chính các hãng về môi trường của họ. Phân tích công khai của Sansec không xác nhận giả thuyết này và ghi rõ hệ thống bị xâm nhập vẫn chưa rõ, với khả năng cao nhất là chính server của Awesome Motive, kế đến là tài khoản CDN, còn nhà cung cấp CDN thì khó xảy ra. UpdraftPlus đúng là có một lỗ hổng authentication-bypass riêng, CVE-2026-10795, được Wordfence chấm 8.1 và xác nhận đang bị khai thác ngoài thực địa, nên ai đang chạy nó cũng nên vá ngay bất kể thế nào. Còn lỗi cụ thể đó có liên quan đến vụ xâm nhập này hay không thì chưa được xác nhận. Hãy coi vector xâm nhập là một câu hỏi mở, không phải một sự thật.
Giai đoạn 2: Kích hoạt chọn lọc và chống phân tích
Script bị nhiễm không làm gì khi xem trang bình thường, và đó chính là lý do nó nằm im được lâu đến vậy. Trước khi hành động, nó chạy một loạt kiểm tra để né researcher và công cụ tự động. Nó tìm navigator.webdriver, các dấu hiệu headless như window._phantom và window.__nightmare, và cửa sổ trình duyệt kích thước bằng không, thoát ngay nếu thấy bất kỳ dấu hiệu nào. Sau đó nó xác nhận đang ở trước một admin thật đang đăng nhập bằng cách kiểm tra admin bar, đường dẫn /wp-admin/, và cookie wordpress_logged_in_. Để tránh chạy lặp trên cùng một trình duyệt, nó ghi một mốc throttle 24 giờ vào localStorage.
Lý do của thiết kế này là kỷ luật vận hành. Một kẻ tấn công nắm quyền truy cập hơn một triệu site không muốn gây ồn. Bằng cách chỉ kích hoạt với admin đã xác thực và chỉ một lần mỗi ngày cho mỗi trình duyệt, payload giảm tối đa khả năng rơi vào sandbox của researcher hay công cụ giám sát, và điều này giải thích vì sao dashboard WordPress vô dụng như một bề mặt phát hiện: mã được xây dựng có chủ đích để hoạt động bên ngoài các màn hình mà admin sẽ nhìn vào.
Giai đoạn 3: Chiếm phiên và tạo admin giả
Đây là phần lõi của cuộc tấn công. Khi đã xác nhận trình duyệt của admin, script thu thập một REST nonce hợp lệ, lấy từ wpApiSettings inline, từ admin-ajax.php?action=rest-nonce, hoặc bằng cách scrape trang tạo user mới. Một nonce hợp lệ cộng với cookie sẵn có của admin là tất cả những gì cần để gửi request đã xác thực với danh nghĩa admin đó.
Nó thử tạo một admin giả qua bốn phương thức dự phòng theo thứ tự cho đến khi một phương thức thành công:
1. REST API POST /wp-json/wp/v2/users (hoặc ?rest_route=/wp/v2/users) role=administrator
2. Admin form POST /wp-admin/user-new.php action=createuser
3. AJAX POST /wp-admin/admin-ajax.php action=createuser
4. iframe ẩn iframe 1x1 vô hình nạp user-new.php, điền form và submit
Một request REST tiêu biểu mà Patchstack bắt được:
POST /wp-json/wp/v2/users
{
"username": "dev_3m6nyp",
"email": "dev_wvi65g@gmail.com",
"password": "lSwI4oUwH%&uCZ@7NW2*",
"roles": ["administrator"]
}
Nó tạo cả một danh tính cố định, developer_api1 / customer1usx@gmail.com, lẫn các biến thể ngẫu nhiên dạng dev_xxxxxx / dev_xxxxxx@gmail.com. Script còn mang theo một từ điển đa ngôn ngữ các chuỗi lỗi "user đã tồn tại" để có thể biết, trên các bản WordPress đã địa phương hóa, rằng tài khoản vừa được tạo hay đã có sẵn. Telemetry của Patchstack cho thấy danh tính ngẫu nhiên chiếm áp đảo: trong 271 nỗ lực bị chặn, 267 dùng dev_xxxxxx và chỉ 4 dùng tài khoản cố định.
Mọi request kiểu này đều mang phiên hợp lệ của admin và một nonce hợp lệ, vì chính trình duyệt của admin gửi chúng. Đây không phải CSRF và cũng không phải lỗi plugin. Với một rule ngây thơ kiểu "theo dõi user admin mới", nó trông như hoạt động quản trị thường ngày.
Giai đoạn 4: Backdoor tự che giấu và web shell
Khi đã nắm quyền admin, payload tải một ZIP từ C2 và cài qua POST /wp-admin/update.php?action=upload-plugin. Plugin được thiết kế để biến mất. Nó tự che khỏi danh sách plugin (cả màn hình admin lẫn endpoint REST /wp/v2/plugins), danh sách user, màn hình cập nhật, và danh sách recently-active. Kẻ vận hành xoay vòng lớp ngụy trang trong khi giữ logic giống hệt nhau từng byte qua mỗi lần đổi tên, phát hành dưới dạng "Content Delivery Helper" (content-delivery-helper, v2.7.1) rồi sau đó là "Database Optimizer" (database-optimizer, v2.9.4). Vì ZIP được sinh mới trên mỗi request, file hash thay đổi liên tục trong khi hành vi không đổi, khiến việc blocklist theo hash trở nên vô nghĩa ở đây.
Backdoor mới là phần thưởng thực sự. Theo Sansec, nó mở một web shell mang nhãn "WPM File Manager & Shell" qua tham số ?developer_api1_fm, chạy system($_POST['cmd']), cùng một endpoint developer_api1_eval thực thi input của kẻ tấn công đã được base64-decode. Bất kỳ ai biết URL đều có thể chạy mã tùy ý trên server mà không cần đăng nhập: đọc hoặc sửa file, dump database, chèn mã skimming thẻ, chuyển hướng traffic, hoặc cài thêm cơ chế duy trì khác.
Giai đoạn 5: Đánh cắp dữ liệu
Thông tin đăng nhập và dữ liệu site bị thu thập được XOR-mã hóa bằng key jX9kM2nP4qR6sT8v, base64-encode, rồi beacon tới tidio[.]cc/cdn-cgi/pe-* qua một chuỗi dự phòng bền bỉ gồm navigator.sendBeacon, fetch, XMLHttpRequest, và cuối cùng là một request image-pixel. Đường dẫn /cdn-cgi/ là một chi tiết có chủ ý, nó bắt chước tiền tố đường dẫn nội bộ của Cloudflare để traffic hòa lẫn vào loại nhiễu CDN mà đội phòng thủ thường bỏ qua. Bản thân domain tidio.cc giả mạo nhà cung cấp live-chat hợp pháp tidio.com.
Ánh xạ MITRE ATT&CK
| Tactic | Technique | Triển khai trong chiến dịch |
|---|---|---|
| Initial Access | T1195.002 Compromise Software Supply Chain | JavaScript SDK bị chỉnh sửa phục vụ từ CDN của hãng tới site hạ nguồn |
| Initial Access | T1190 Exploit Public-Facing Application | Khai thác UpdraftPlus trên server marketing (hãng tuyên bố, chưa xác nhận) |
| Execution | T1059.007 JavaScript | Payload độc hại nối vào cuối SDK minified hợp pháp |
| Defense Evasion | T1497.001 System Checks | Thoát khi gặp navigator.webdriver, dấu hiệu headless, cửa sổ kích thước bằng không |
| Defense Evasion / Lateral Movement | T1550.004 Use Alternate Authentication Material: Web Session Cookie | Mượn phiên đang hoạt động và REST nonce của admin |
| Persistence | T1136.001 Create Account: Local Account | Tài khoản admin giả developer_api1 và dev_xxxxxx |
| Persistence | T1505.003 Server Software Component: Web Shell | Plugin ẩn mở endpoint system() và eval |
| Defense Evasion | T1070 Indicator Removal | Backdoor ẩn khỏi danh sách plugin, user, cập nhật và log |
| Defense Evasion | T1036.005 Match Legitimate Name or Location | Tên plugin "Database Optimizer"; domain C2 giả tidio.com |
| Command and Control | T1071.001 Web Protocols | Beacon HTTP tới tidio[.]cc/cdn-cgi/pe-* |
| Command and Control | T1132.001 Standard Encoding | Base64 chồng lên một lớp XOR cho nội dung beacon |
| Exfiltration | T1041 Exfiltration Over C2 Channel | Thông tin đăng nhập admin bị đánh cắp gửi tới C2 |
Phát hiện
Bài học đau đớn từ chiến dịch này là các hành động trên site trông hợp pháp, nên tín hiệu bền vững là dấu vân tay hardcode của chính kẻ tấn công, không phải bản thân hành vi tạo user. Hãy hunt theo tên tài khoản cụ thể, tham số backdoor, và C2, gần như theo đúng thứ tự độ tin cậy đó.
C2 ra ngoài tới tidio[.]cc (độ tin cậy cao nhất, gần như không có false positive). Nếu bạn ship log proxy hoặc web traffic về Splunk:
index=proxy OR index=web
(dest_host="tidio.cc" OR dest_ip="84.201.6.54"
OR uri_path IN ("/cdn-cgi/p","/cdn-cgi/b","/cdn-cgi/l","/cdn-cgi/pe-p","/cdn-cgi/pe-b","/cdn-cgi/pe-l"))
| stats count min(_time) AS first_seen max(_time) AS last_seen values(src_ip) AS sources BY dest_host uri_path
Truy cập tham số web shell trên server. Bất kỳ request nào mang các tham số này đều là một lần tương tác với backdoor:
index=web (uri_query="*developer_api1_fm*" OR uri_query="*developer_api1_eval*")
| stats count values(http_method) AS methods BY src_ip uri_path
Tạo admin giả trong log ứng dụng. Nơi bạn ingest sự kiện audit hoặc đăng ký user của WordPress:
index=wordpress action IN ("user_register","createuser")
(user_login="developer_api1" OR user_login="dev_*" OR user_email="customer1usx@gmail.com" OR user_email="dev_*@gmail.com")
| table _time host user_login user_email user_roles src_ip
Hành vi web shell phía server trên EDR. Vì web shell chạy system() dưới web server, một tiến trình web sinh ra shell là tín hiệu mạnh. Trên Carbon Black:
(parent_name:php-fpm OR parent_name:httpd OR parent_name:apache2 OR parent_name:nginx OR parent_name:w3wp.exe)
AND (process_name:sh OR process_name:bash OR process_name:dash OR process_name:cmd.exe OR process_name:powershell.exe)
Quét filesystem. Dashboard nói dối, nên hãy tin vào đĩa. Trên bất kỳ host nào từng chạy các plugin:
# Thư mục plugin backdoor
find /var/www -type d \( -name "content-delivery-helper" -o -name "database-optimizer" \) 2>/dev/null
# Dấu hiệu backdoor và key XOR ở bất kỳ đâu dưới wp-content
grep -rRl -e "developer_api1_fm" -e "developer_api1_eval" -e "jX9kM2nP4qR6sT8v" /var/www/*/wp-content/ 2>/dev/null
Thứ tự rất quan trọng. Beacon C2 và tham số web shell mang tính đặc trưng của kẻ tấn công và gần như không sinh false positive. Các sự kiện tạo admin ồn ào hơn, cần scope chặt theo các tên đã biết, vì một rule chung chung kiểu "tạo administrator mới" sẽ chôn vùi bạn dưới hoạt động hợp pháp.
Nhận định
Mức tinh vi kỹ thuật ở đây là trung bình, nhưng kỷ luật vận hành thì cao, và chính sự kết hợp đó làm nó nguy hiểm. Bản thân payload không mới: kiểm tra chống sandbox, mượn phiên, plugin ẩn, beacon obfuscate đều là kỹ thuật đã biết. Điểm nổi bật là sự kiềm chế. Kẻ tấn công nắm chỗ đứng trên một triệu site nhưng chọn kích hoạt chọn lọc, throttle theo từng trình duyệt, xoay vòng lớp ngụy trang của backdoor, sinh lại ZIP trên mỗi request để vô hiệu hóa hashing, và giả đường dẫn Cloudflare cùng một domain SaaS quen thuộc để hòa exfiltration vào nhiễu được kỳ vọng. Đây là kẻ tối ưu cho thời gian ẩn náu, không phải cho một cú rút tiền nhanh.
Với đội detection, điểm khó chịu hơn nằm ở khả năng quan sát. Mọi lớp mà một người phòng thủ WordPress thường tin tưởng đều đã thất bại trong im lặng ở đây. Plugin vẫn mới nhất. Dashboard không hiện gì. Các request độc hại đều đã xác thực và có nonce hợp lệ. Giám sát mạng chỉ thấy traffic HTTP tới một đường dẫn /cdn-cgi/ trên một domain trông giống CDN. Nếu bạn chỉ theo dõi những bề mặt mà WordPress phơi ra cho bạn, chiến dịch này vô hình theo đúng thiết kế, và đó là điều đáng khắc cốt: script bên thứ ba chạy lúc runtime là rủi ro nhà cung cấp ở dạng mã thực thi, không phải nội dung trang trí của trang.
Subresource Integrity được nhắc đến như biện pháp phòng ngừa sách giáo khoa, và về nguyên tắc, một SRI hash đúng sẽ khiến trình duyệt từ chối thẳng file bị chỉnh sửa. Cái khó thực tế là các marketing SDK này động và cập nhật thường xuyên, nên một hash cố định sẽ vỡ một cách hợp pháp mỗi lần hãng phát hành bản mới, và đó chính xác là lý do loại script này thường được nạp mà không có integrity check ngay từ đầu. SRI là câu trả lời đúng cho asset tĩnh có versioning. Với một tracking SDK thay đổi liên tục, nó là một biện pháp thật nhưng vướng víu, và đúng khoảng trống đó là thứ kẻ tấn công đã kiếm tiền từ nó.
Với các tổ chức tại Việt Nam, đây không phải một sự cố nước ngoài trừu tượng. OptinMonster và PushEngage phổ biến trên các site SMB trong nước, các hệ thống WordPress do agency quản lý, và các front end thương mại điện tử, và nhiều site trong số đó được quản trị từ trình duyệt di động, khớp gọn với con số khoảng 60% user agent Android/Samsung mà Patchstack ghi nhận trong traffic bị chặn. Bất kỳ SOC nào đang giám sát một danh mục site WordPress của khách hàng đều nên coi cửa sổ 12 đến 14/06 là một trigger để hunt trên toàn bộ hệ thống, không phải một việc làm thêm cho từng site.
Khuyến nghị
Tức thì (0 đến 24h). Chặn tidio[.]cc và 84.201.6[.]54 ở tầng DNS và mạng. Quét mọi site từng chạy ba plugin để tìm tài khoản giả (developer_api1, dev_xxxxxx) và thư mục backdoor (content-delivery-helper, database-optimizer). Triển khai các query phát hiện ở trên. Chạy quét phía server trên mọi host trong cửa sổ thay vì tin vào dashboard.
Ngắn hạn (1 đến 7 ngày). Nếu tìm thấy bất kỳ dấu hiệu nào, hãy giả định bị xâm nhập hoàn toàn: rotate mật khẩu admin, API key, thông tin database, và các secret salt trong wp-config.php, sau đó rebuild thay vì dọn dẹp khi khả thi, vì code execution đồng nghĩa với việc các cơ chế duy trì khác có thể còn lại. Vá UpdraftPlus để xử lý CVE-2026-10795 bất kể nó có phải điểm xâm nhập ở đây hay không. Kiểm kê toàn bộ plugin Awesome Motive trên hệ thống và theo dõi các advisory tiếp theo từ hãng, vì danh mục rộng hơn (WPForms, MonsterInsights, All in One SEO) dùng chung hạ tầng dù mới chỉ ba sản phẩm được xác nhận bị xâm nhập.
Dài hạn. Xây dựng bản kiểm kê script bên thứ ba cho mọi site bạn bảo vệ và coi mỗi external SDK là rủi ro nhà cung cấp, có người chịu trách nhiệm và có đánh giá mức độ tin cậy. Áp dụng SRI ở những asset có versioning và ổn định. Với các SDK động không thể gắn hash cố định, hãy bù bằng giám sát egress và báo cáo Content Security Policy để beacon của một script bị chỉnh sửa có chỗ lộ diện. Đưa mã bên thứ ba phân phối qua CDN vào threat model supply chain của bạn, song song với các package npm và PyPI mà phần lớn đội ngũ đã theo dõi.
Indicators of Compromise
# Tài khoản giả
developer_api1 / customer1usx@gmail.com # danh tính cố định
dev_xxxxxx / dev_xxxxxx@gmail.com # ngẫu nhiên, sáu ký tự, role administrator
# Plugin backdoor (ngụy trang xoay vòng, logic giống hệt từng byte)
content-delivery-helper "Content Delivery Helper" v2.7.1
database-optimizer "Database Optimizer" v2.9.4
Chuỗi UI: "WPM File Manager & Shell"
# Tham số backdoor
?developer_api1_fm # web shell, chạy system($_POST['cmd'])
developer_api1_eval # thực thi input đã base64-decode
# Command and control
tidio[.]cc # 84.201.6[.]54, Ultahost AS214036
84.201.6[.]54
/cdn-cgi/p /cdn-cgi/b /cdn-cgi/l
/cdn-cgi/pe-p /cdn-cgi/pe-b /cdn-cgi/pe-l
# Chữ ký malware
jX9kM2nP4qR6sT8v # key XOR
# File CDN bị chỉnh sửa
a.omappapi[.]com/app/js/api.min.js
a.opmnstr[.]com/app/js/api.min.js
a.optnmstr[.]com/app/js/api.min.js
a.trstplse[.]com/app/js/api.min.js
clientcdn.pushengage[.]com/sdks/pushengage-web-sdk.js
Việc dọn dẹp dễ mô tả nhưng khổ sở khi thực thi, vì câu trả lời trung thực duy nhất cho "tôi có bị dính không" là một lần quét phía server. Một site đã nạp các script này khi có admin hiện diện trong khoảng 12 đến 14/06 nên được coi là đã bị xâm nhập cho đến khi đĩa và log nói khác đi. Các hãng đã rotate CDN key và rebuild site marketing, và không thao tác nào trong số đó chạm tới một backdoor vốn đã được cài. Sự bất đối xứng đó, khai thác thượng nguồn thì nhanh còn khắc phục hạ nguồn thì chậm, là toàn bộ kinh tế học của một cuộc tấn công supply chain qua CDN, và là lý do "chúng tôi đã vá đầy đủ" không còn là một câu trả lời trọn vẹn từ khá lâu rồi.
Nguồn tham khảo:
Popular WordPress Plugin Scripts Tampered to Plant Hidden Backdoors on Sites | The Hacker News (Swati Khandelwal)
OptinMonster supply chain attack hits 1.2 million sites | Sansec Forensics Team
Supply Chain Attack on OptinMonster, TrustPulse, and PushEngage: Tampered CDN Scripts Auto-Creating Rogue Admins | Patchstack (Dave Jong)
OptinMonster WordPress plugin hacked in CDN supply-chain attack | BleepingComputer
Over 1 million WordPress sites at risk after popular plugin hacked | TechRadar
Attackers compromised Awesome Motive CDN files, backdooring WordPress sites running OptinMonster, TrustPulse, and PushEngage | Security Affairs





