สรุปสั้น
Magento คือ แพลตฟอร์มร้านค้าออนไลน์แบบโอเพนซอร์สที่ Adobe พัฒนาต่อในชื่อ Adobe Commerce และเป็นเป้าของแก๊งขโมยข้อมูลบัตรมาหลายปี ล่าสุดบริษัท Sansec ผู้เชี่ยวชาญความปลอดภัยอีคอมเมิร์ซจากเนเธอร์แลนด์ เปิดเผยว่าผู้โจมตีที่ยังไม่ทราบตัวตนฝังโค้ดขนาดเล็กลงในหน้าร้านค้าออนไลน์แล้ว 953 แห่ง ส่วนใหญ่ใช้ Magento แคมเปญนี้ดำเนินมาตั้งแต่กรกฎาคม 2568 และยังเคลื่อนไหวอยู่ โค้ดถูกซ่อนใน CMS block ซึ่ง คือ ก้อนเนื้อหาคงที่ที่ร้านใช้แสดงบนหน้าเว็บ เมื่อลูกค้าเปิดหน้าร้าน เบราว์เซอร์จะไปถามเซิร์ฟเวอร์ของผู้โจมตีว่าต้องทำอะไรต่อ และเซิร์ฟเวอร์จะส่งโค้ดอันตรายให้เฉพาะผู้เยี่ยมชมที่เป็นคนจริง ส่วนเครื่องสแกนความปลอดภัยจะไม่ได้อะไรกลับไปเลย
ทางเข้าหลักของแคมเปญ คือ ช่องโหว่ที่ยังไม่ได้แพตช์ Sansec ประเมินว่าร้าน 471 แห่งถูกฝังโค้ดผ่านช่องโหว่ PolyShell (CVE-2026-48356) อีก 102 แห่งถูกอัปโหลดไฟล์ผ่าน PolyShell หรือ SessionReaper (CVE-2025-54236) และมีกรณีที่ร้านแพตช์ครบแล้วแต่ยังถูกเพิ่มบัญชีแอดมินปลอมเพื่อแก้เนื้อหา ประเด็นที่น่ากังวล คือ จนถึงตอนนี้ยังไม่มีใครรู้ว่า payload สุดท้ายทำอะไร และการออกแบบให้หลบเครื่องสแกนทำให้เจ้าของร้านอาจไม่รู้ตัวว่าถูกเจาะ ผู้ดูแลร้าน Magento ควรติดตั้งแพตช์ APSB26-73 ทันที แล้วไล่ตรวจตาราง cms_block, cms_page และรายชื่อบัญชีแอดมิน
รายละเอียดข่าว
เว็บไซต์ The Hacker News รายงานเมื่อวันที่ 26 ตุลาคม 2569 โดยอ้างงานวิจัยของ Sansec ว่าแคมเปญนี้ใช้โดเมนสำหรับส่งโค้ดอย่างน้อย 5 โดเมน และเปลี่ยนโดเมนใหม่ทุกไม่กี่เดือน ได้แก่ manulfie[.]click (เริ่มเห็นกรกฎาคม 2568) neswnsssn[.]click (ธันวาคม 2568) lanhd6549tdhse[.]top (มีนาคม 2569) additionalver[.]com (มิถุนายน 2569) และ deepveindrilling[.]com (ตุลาคม 2569) การไล่ลำดับนี้แสดงว่าเป็นปฏิบัติการเดียวกันที่ดำเนินต่อเนื่องราว 15 เดือน ไม่ใช่การโจมตีครั้งเดียวจบ
โดเมนล่าสุด deepveindrilling[.]com จดทะเบียนเมื่อ 6 ตุลาคม 2569 และภายในราวสามสัปดาห์ Sansec พบโดเมนนี้ใน CMS block ของร้านค้าแล้ว 83 แห่ง โดเมนนี้อยู่หลัง Cloudflare และตอบเฉพาะคำขอสคริปต์ที่มาจากผู้เยี่ยมชมจริงของร้านที่ติดเชื้อเท่านั้น
ด้านทางเข้า Sansec ยกตัวอย่างร้านหนึ่งที่ใช้ Magento 2.4.7-p1 ซึ่งพบ web shell ของ PolyShell ปลอมตัวเป็นไฟล์ภาพ PNG ในโฟลเดอร์ pub/media/custom_options/quote/ วางอยู่คู่กับโค้ดโหลดจาก additionalver.com ใน CMS block โค้ดใน block นั้นถูกสลับไปชี้ deepveindrilling[.]com เมื่อ 7 ตุลาคม และร้านนี้ยังไม่ได้ติดตั้ง APSB26-73 ซึ่ง คือ แพตช์ PolyShell ของ Adobe สำหรับเวอร์ชันที่ยังได้รับการดูแล อีกกรณีหนึ่ง คือ ร้านที่ใช้ Magento 2.4.7-p10 และไม่มีแพตช์หลักขาดเลย แต่ยังถูกเจาะเข้าไปสร้างบัญชีแอดมินปลอมแล้วใช้บัญชีนั้น inject โค้ด ซึ่งแปลว่าการแพตช์อย่างเดียวไม่พอหากรหัสผ่านแอดมินอ่อนหรือรั่วไปแล้ว
ข้อมูลยังมีช่องว่างหลายจุด Sansec ไม่ได้เปิดเผยว่าผู้โจมตีแก้ CMS block ที่มีอยู่เดิม (เช่น ส่วนหัว ส่วนท้าย หรือแบนเนอร์โปรโมชัน) หรือสร้าง block ใหม่ขึ้นมา ซึ่งทำได้ทั้งสองแบบ ตัวเลข 471 และ 102 ร้านเป็นค่าประมาณจากร่องรอยที่ Sansec เห็น และที่สำคัญที่สุด คือ ยังไม่ทราบว่า payload สุดท้ายที่ส่งให้ลูกค้าจริงทำอะไร จึงยังสรุปไม่ได้ว่าเป็นการขโมยข้อมูลบัตร การเปลี่ยนเส้นทางไปเว็บหลอกลวง หรืออย่างอื่น
ในรายงานเดียวกัน The Hacker News กล่าวถึง PHP2Shell ช่องโหว่วิกฤตคู่ใน PHP (CVE-2026-109618 และ CVE-2026-109619) ที่ถูกไล่โจมตีอย่างกว้างขวาง นาย Adel Karimi นักวิจัยจากบริษัท Perplexity บันทึกสิ่งที่ดูเหมือนการโจมตีสำเร็จครั้งแรกบน honeypot โดยผู้โจมตีสั่งรัน wget, curl หรือ PHP CLI เพื่อดึงไฟล์เพิ่มจาก 162.35.99[.]94:80 แต่ยังไม่พบไฟล์ขั้นที่สองที่ถูกดาวน์โหลดลงมา เรื่องนี้เป็นคนละแคมเปญกับการฝังโค้ดใน Magento และติดตามต่อได้ที่ 2026/10/278
วิธีการโจมตี
เข้าระบบร้านค้า — ผู้โจมตีอาศัยช่องโหว่ที่ร้านยังไม่ได้แพตช์ หลักฐานส่วนใหญ่ชี้ไปที่ PolyShell (CVE-2026-48356) ซึ่งเปิดให้อัปโหลดไฟล์ web shell ปลอมเป็นรูปภาพในโฟลเดอร์ custom options ของตะกร้าสินค้า รองลงมา คือ SessionReaper (CVE-2025-54236) ส่วนร้านที่แพตช์ครบแล้วถูกเจาะผ่านบัญชีแอดมินที่ผู้โจมตีสร้างขึ้นหรือยึดมาได้
ซ่อนโค้ดในฐานข้อมูล ไม่ใช่ในไฟล์ — โค้ดโหลดถูกเก็บในตาราง cms_block ของฐานข้อมูล Magento ซึ่งระบบใช้ประกอบเนื้อหาคงที่เข้ากับหน้าร้าน เมื่อหน้าใดดึง block นั้นมาแสดง โค้ดก็จะรันในเบราว์เซอร์ของลูกค้าทันที วิธีนี้ได้ผลเพราะเครื่องมือตรวจความสมบูรณ์ของไฟล์จะไม่เห็นความเปลี่ยนแปลงใดในซอร์สโค้ดของร้าน
คงอยู่ในเบราว์เซอร์ลูกค้า — Sansec พบโค้ดโหลด 2 เวอร์ชัน เวอร์ชันแรกเก็บ payload ที่ดึงมาจากโดเมนผู้โจมตีไว้ใน localStorage ของเบราว์เซอร์ ทำให้โค้ดรันซ้ำได้ทุกครั้งที่ลูกค้ากลับมาที่ร้าน แม้โดเมนภายนอกจะถูกปิดไปแล้วก็ตาม
คัดกรองว่าใครเป็นคนจริง — เวอร์ชันที่สองเพิ่มการเก็บลายนิ้วมือเบราว์เซอร์ (browser fingerprinting) เพื่อตัดบอตและเครื่องสแกนออก ให้เฉพาะลูกค้าจริงได้รับโค้ดอันตราย ช่วงแรกของแคมเปญใช้ Keitaro แพลตฟอร์มติดตามโฆษณาเป็นระบบกระจายทราฟฟิก (TDS) เลือกว่าจะส่ง payload ส่ง redirect หรือไม่ส่งอะไรเลยตามลักษณะผู้เยี่ยมชม ตัวอย่างเช่น เมื่อ Sansec ขอสคริปต์จาก additionalver[.]com ในฐานะผู้ใช้ Windows บนเดสก์ท็อป จะได้คำตอบเพียง “QWE=123;” ซึ่งแค่ตั้งคุกกี้ทำเครื่องหมายผู้เยี่ยมชมไว้ 24 ชั่วโมง ส่วนโดเมน deepveindrilling[.]com เลิกใช้ Keitaro แล้วย้ายตรรกะกรองบอตเข้าไปไว้ในโค้ดโหลดเองทั้งหมด
เป้าหมายสุดท้าย — ยังไม่ทราบ เพราะการกรองข้างต้นทำให้นักวิจัยยังเก็บ payload ขั้นสุดท้ายมาวิเคราะห์ไม่ได้
ผลกระทบ
ผู้ที่ได้รับผลกระทบโดยตรง คือ เจ้าของร้านค้าออนไลน์บน Magento และ Adobe Commerce ที่ยังไม่ได้ติดตั้งแพตช์ PolyShell หรือ SessionReaper รวมถึงร้านที่แพตช์แล้วแต่ดูแลบัญชีแอดมินหลวม ขณะนี้ยืนยันแล้ว 953 ร้าน และมีร้านใหม่ติดเชื้อต่อเนื่อง เห็นได้จากโดเมนล่าสุดที่ไปโผล่ใน 83 ร้านภายในไม่ถึงเดือน
ผู้ซื้อที่เข้าร้านเหล่านี้ คือ ผู้รับความเสี่ยงปลายทาง เพราะโค้ดรันในเบราว์เซอร์ของลูกค้าโดยตรง แม้ยังไม่รู้ว่า payload ทำอะไร แต่ช่องทางนี้เป็นแบบเดียวกับที่แก๊ง Magecart ใช้ขโมยข้อมูลบัตรในหน้าชำระเงิน หาก payload เป็น skimmer ร้านจะต้องรับภาระทั้งการแจ้งลูกค้า ความรับผิดตามมาตรฐาน PCI DSS และความเสียหายต่อชื่อเสียง จุดที่ทำให้เรื่องนี้เร่งด่วน คือ การหลบเครื่องสแกนและการคงอยู่ใน localStorage ทำให้ร้านอาจถูกฝังโค้ดมานานโดยไม่มีเครื่องมือภายนอกตัวใดแจ้งเตือน และการลบโค้ดออกจากฐานข้อมูลก็ไม่ได้ล้างโค้ดที่ค้างอยู่ในเบราว์เซอร์ของลูกค้าที่เคยเข้ามาแล้ว
คำแนะนำ
- ติดตั้ง APSB26-73 ทันที — เป็นแพตช์ PolyShell ของ Adobe สำหรับ Magento/Adobe Commerce เวอร์ชันที่ยังได้รับการดูแล และตรวจว่าแพตช์ SessionReaper (CVE-2025-54236) ติดตั้งแล้วด้วย ร้านที่ใช้เวอร์ชันหมดอายุควรวางแผนอัปเกรด เพราะจะไม่ได้รับแพตช์นี้
- ไล่ตรวจตาราง cms_block และ cms_page — ค้นหาแท็ก
<script>หรือ URL ภายนอกที่ไม่รู้จัก โดยเฉพาะ 5 โดเมนในตาราง IoCs ด้านล่าง และเทียบเนื้อหา block สำคัญ (ส่วนหัว ส่วนท้าย แบนเนอร์) กับแบ็กอัปที่สะอาด - ตรวจหา web shell ปลอมเป็นรูป — ดูไฟล์ในโฟลเดอร์ pub/media/custom_options/quote/ ไฟล์ .png ที่มีโค้ด PHP อยู่ข้างใน คือ สัญญาณชัดของ PolyShell
- ตรวจรายชื่อบัญชีแอดมิน — ลบบัญชีที่ไม่รู้จัก เปลี่ยนรหัสผ่านแอดมินทุกบัญชีให้แข็งแรง และเปิดการยืนยันตัวตนสองชั้นสำหรับหน้าแอดมิน
- ถ้าพบโค้ดแล้ว — ลบโค้ดออกจาก CMS block, ลบ web shell, เปลี่ยนรหัสผ่านฐานข้อมูลและคีย์ API ที่อยู่ในคอนฟิก และพิจารณาว่าลูกค้าที่เข้าร้านช่วงที่ติดเชื้ออาจได้รับผลกระทบ
- ระยะยาว — ตั้ง Content Security Policy จำกัดโดเมนที่สคริปต์โหลดได้ และเฝ้าดูการเปลี่ยนแปลงในตาราง CMS ของฐานข้อมูล ไม่ใช่เฉพาะไฟล์บนดิสก์
Indicators of Compromise (IoCs)
indicator ถูก defang แล้ว (
[.]) เพื่อป้องกันการคลิกโดยไม่ตั้งใจ
| ประเภท | Indicator | คำอธิบาย |
|---|---|---|
| Domain | manulfie[.]click | โดเมนส่งโค้ดโหลด พบครั้งแรกกรกฎาคม 2568 |
| Domain | neswnsssn[.]click | โดเมนส่งโค้ดโหลด พบครั้งแรกธันวาคม 2568 |
| Domain | lanhd6549tdhse[.]top | โดเมนส่งโค้ดโหลด พบครั้งแรกมีนาคม 2569 |
| Domain | additionalver[.]com | โดเมนส่งโค้ดโหลด พบครั้งแรกมิถุนายน 2569 (ยุคใช้ Keitaro TDS) |
| Domain | deepveindrilling[.]com | โดเมนส่งโค้ดโหลดล่าสุด จดทะเบียน 6 ต.ค. 2569 อยู่หลัง Cloudflare พบใน 83 ร้าน |
| Path | pub/media/custom_options/quote/*.png | ตำแหน่ง web shell ของ PolyShell ที่ปลอมเป็นไฟล์ภาพ |
| Response | QWE=123; | คำตอบจาก additionalver[.]com ที่ตั้งคุกกี้ทำเครื่องหมายผู้เยี่ยมชม 24 ชั่วโมง |
| IP:Port | 162.35.99[.]94:80 | เซิร์ฟเวอร์ที่ผู้โจมตี PHP2Shell ใช้ดึงไฟล์เพิ่ม (คนละแคมเปญ) |
