02-347-7730  |  Saeree ERP - ระบบ ERP ครบวงจรสำหรับธุรกิจไทย ติดต่อเรา

Node.js Supply Chain Attack

Node.js Supply Chain Attack
  • 1
  • มีนาคม

ช่วงปลายปี 2568 ถึงต้นปี 2569 เป็นช่วงเวลาที่มืดมนที่สุดสำหรับระบบนิเวศ (Ecosystem) ของ Node.js และ npm — เกิดเหตุการณ์โจมตีซัพพลายเชน (Supply Chain Attack) ขนาดใหญ่ต่อเนื่องหลายครั้ง ส่งผลกระทบต่อแพ็กเกจที่มียอดดาวน์โหลดรวมกันกว่า 2.6 พันล้านครั้งต่อสัปดาห์ และทำให้ CISA (Cybersecurity and Infrastructure Security Agency) ของสหรัฐฯ ต้องออกประกาศเตือนเร่งด่วนหลายฉบับ

บทความนี้จะวิเคราะห์เหตุการณ์สำคัญทั้ง 5 เรื่องอย่างละเอียด พร้อมอธิบายว่าทำไมองค์กรที่เลือกใช้เทคโนโลยี Java + PostgreSQL อย่าง Saeree ERP จึงไม่ได้รับผลกระทบจากเหตุการณ์เหล่านี้เลย

สรุปผลกระทบ (กันยายน 2568 — มกราคม 2569)

  • แพ็กเกจ npm ถูกยึดครอง: 800+ แพ็กเกจ
  • ยอดดาวน์โหลดรวมของแพ็กเกจที่ถูกโจมตี: 2.6 พันล้านครั้ง/สัปดาห์
  • GitHub Repository ที่ถูกบุกรุก: 25,000+ แห่ง
  • ช่องโหว่ CVSS สูงสุด: 10.0 (React2Shell)
  • CISA ออกประกาศเตือน: 3 ฉบับ

ลำดับเหตุการณ์

วันที่ เหตุการณ์ ผลกระทบ
8 ก.ย. 2568 chalk/debug 18 แพ็กเกจถูก Hijack 2.6 พันล้านดาวน์โหลด/สัปดาห์
14-15 ก.ย. 2568 Shai-Hulud Worm 1.0 หนอนแพร่กระจายอัตโนมัติ
23 ก.ย. 2568 CISA ออกประกาศเตือน ระดับวิกฤต
21-24 พ.ย. 2568 Shai-Hulud Worm 2.0 796 แพ็กเกจ, 132 ล้านดาวน์โหลด/เดือน
3 ธ.ค. 2568 React2Shell (CVE-2025-55182) CVSS 10.0 — RCE ระดับวิกฤต
13 ม.ค. 2569 Node.js Security Release แพตช์ 8 CVE ทุก Release Line
ม.ค. 2569 PackageGate Zero-Days 6 ช่องโหว่ใน npm/pnpm/vlt/Bun

เหตุการณ์ที่ 1: chalk/debug Package Hijack — 18 แพ็กเกจ 2.6 พันล้านดาวน์โหลด

วันที่: 8 กันยายน 2568 เวลา 13:15 UTC

วิธีโจมตี

ผู้โจมตีใช้ Phishing Attack โดยส่งอีเมลปลอมจากโดเมน npmjs.help (จดทะเบียนเมื่อ 5 กันยายน ก่อนโจมตี 3 วัน) หลอก maintainer ชื่อ "Qix-" (Josh Junon) ซึ่งดูแลแพ็กเกจ chalk, debug และอีกหลายตัว อีเมลอ้างว่า npm กำลังจะล็อคบัญชีหากไม่ยืนยันตัวตนภายใน 48 ชั่วโมง เมื่อ maintainer คลิกลิงก์ปลอม ผู้โจมตีได้ username, password และรหัส TOTP (2FA) แบบ real-time

แพ็กเกจที่ถูกยึดครอง (18 แพ็กเกจ)

แพ็กเกจ เวอร์ชันที่มีมัลแวร์ ดาวน์โหลด/สัปดาห์
chalk 5.6.1 299 ล้าน
debug 4.4.2 47 ล้าน
strip-ansi 7.1.1 รวมทั้งหมด ~2.6 พันล้าน
ansi-regex, color-convert, wrap-ansi, ansi-styles, color-name, supports-color, slice-ansi, color, color-string, is-arrayish, simple-swizzle, supports-hyperlinks, has-ansi, chalk-template, backslash เวอร์ชันต่างๆ

นอกจากนี้ยังมี คลื่นลูกที่สอง ในวันถัดมา (9 กันยายน) ที่ duckdb ถูกโจมตีด้วย — แพ็กเกจ duckdb@1.3.3 มีมัลแวร์อยู่ 7-9 ชั่วโมงก่อนจะถูกลบ

มัลแวร์ทำอะไร?

โค้ดที่ฝังมาเป็น Cryptostealer — ดักจับการทำงานของ window.ethereum เพื่อขโมย MetaMask และ Crypto Wallet อื่นๆ โดยเปลี่ยนเส้นทางธุรกรรมไปยังกระเป๋าเงินของผู้โจมตี ที่แยบยลคือผู้โจมตีเลือกใช้ wallet address ที่คล้ายกับ address เดิมของเหยื่อ เพื่อลดโอกาสถูกตรวจจับ

การตรวจพบและแก้ไข

ผู้ใช้ชื่อ "informatic" สังเกตเห็นว่า เวอร์ชันบน npm ไม่ตรงกับซอร์สโค้ดบน GitHub — แจ้งเตือนชุมชน และแพ็กเกจส่วนใหญ่ถูกลบออกภายใน ~1 ชั่วโมง

บทเรียน: แม้จะมี ระบบ 2FA แต่ถ้าเป็น TOTP (Time-based OTP) ก็ยังถูก Phishing แบบ Real-time ได้ ต้องใช้ Hardware Key (FIDO2/WebAuthn) จึงจะป้องกันได้จริง

เหตุการณ์ที่ 2: Shai-Hulud Worm — หนอนที่แพร่กระจายตัวเองผ่าน npm

คลื่นแรก (กันยายน 2568)

สัปดาห์เดียวกับที่เกิดเหตุ chalk/debug — ReversingLabs ตรวจพบ หนอนคอมพิวเตอร์ (Worm) ชื่อ "Shai-Hulud" (ตั้งชื่อตามหนอนทรายจากนิยาย Dune) ที่แพร่กระจายตัวเองผ่าน npm โดยอัตโนมัติ Patient Zero คือแพ็กเกจ rxnt-authentication เวอร์ชัน 0.0.3 (เผยแพร่ 14 กันยายน) — ถูกลบภายใน ~2.5 ชั่วโมง

คลื่นที่สอง — Shai-Hulud 2.0 (พฤศจิกายน 2568)

ร้ายแรงกว่ามาก — เริ่ม 21-23 พฤศจิกายน ชุมชนตรวจพบ 24 พฤศจิกายน ใช้เวลา ~12 ชั่วโมง ในการควบคุม

ขนาดความเสียหาย Shai-Hulud 2.0:

แพ็กเกจที่ถูกยึดครอง796 แพ็กเกจ (1,092 เวอร์ชัน)
ยอดดาวน์โหลดรวม132 ล้านครั้ง/เดือน
GitHub Repository ถูกบุกรุก25,000+ แห่ง (จาก ~500 ผู้ใช้)
องค์กรที่ได้รับผลกระทบPostHog, Zapier, Postman, ENS Domains, AsyncAPI

กลไกการทำงานของ Shai-Hulud (เชิงเทคนิค)

Shai-Hulud เป็นหนอนที่ แพร่กระจายตัวเองอัตโนมัติ — ไม่ต้องมีคนควบคุม ทำงานผ่าน 5 ขั้นตอน:

  1. ใช้ช่อง preinstall lifecycle script — โค้ดรันก่อนที่การติดตั้งจะเสร็จ แม้ว่า install จะล้มเหลวก็ตาม
  2. ปลอมตัวเป็น Bun installer — สร้างไฟล์ setup_bun.js และ bun_environment.js
  3. ขโมย Credentials — ดึง npm token จาก .npmrc, GitHub token, AWS/Azure/GCP credentials, Cloud metadata service tokens
  4. แพร่กระจาย — ใช้ npm token ที่ขโมยมาเข้าสู่ระบบเป็นเหยื่อ → หาแพ็กเกจที่เหยื่อดูแล (สูงสุด 100 แพ็กเกจ) → เพิ่มเวอร์ชัน → ฝังมัลแวร์ → เผยแพร่อัตโนมัติ
  5. ส่งข้อมูลออก — สร้าง GitHub Repository ชื่อ "Shai-Hulud" ใต้บัญชีเหยื่อ แล้ว commit secrets ทั้งหมดลงไป

ส่วนที่น่ากลัวที่สุด: ถ้าหนอนไม่สามารถขโมย credentials หรือส่งข้อมูลออกได้ มันจะ ลบไฟล์ทั้งหมดใน home directory ของเหยื่อ โดยเขียนทับข้อมูลก่อนลบ (secure wipe) เพื่อป้องกันการกู้คืน

เหตุการณ์ที่ 3: React2Shell (CVE-2025-55182) — CVSS 10.0 สูงสุดเท่าที่เป็นไปได้

วันที่: 29 พฤศจิกายน 2568 (รายงาน) → 3 ธันวาคม (เปิดเผย) → 5 ธันวาคม (ถูกโจมตีจริง)

CVSS Score: 10.0 / 10.0

ช่องโหว่คืออะไร?

ช่องโหว่อยู่ใน React Server Components (RSC) — ระบบใหม่ที่ Meta สร้างขึ้นให้ React ทำงานฝั่ง server ปัญหาอยู่ที่ "Flight" protocol ที่ใช้รับส่งข้อมูลระหว่าง client กับ server มีช่องโหว่ Insecure Deserialization — ผู้โจมตีส่ง HTTP POST request เพียงครั้งเดียวก็สามารถ รันโค้ดอะไรก็ได้บน server (Remote Code Execution) ด้วยอัตราสำเร็จเกือบ 100%

เวอร์ชันที่ได้รับผลกระทบ

Framework เวอร์ชันที่มีช่องโหว่ เวอร์ชันที่แก้ไขแล้ว
React (RSC) 19.0, 19.1.0, 19.1.1, 19.2.0 19.0.1, 19.1.2, 19.2.1+
Next.js (App Router) 14.3.0-canary+, 15.x, 16.x 15.0.5, 15.1.9, 15.2.6, 15.5.7, 16.0.7
React Router, Waku, Parcel, Vite, RedwoodSDK เวอร์ชันที่ใช้ React 19 RSC อัปเดตตาม React

ขนาดผลกระทบ

  • 39% ของ cloud environment มีอินสแตนซ์ที่มีช่องโหว่ (ข้อมูลจาก Wiz)
  • 61% ของ cloud environment มี Next.js application ที่เปิดสู่อินเทอร์เน็ต
  • ภายใน 24 ชั่วโมง หลังเปิดเผย มีแคมเปญโจมตีหลายกลุ่มเกิดขึ้น
  • CISA เพิ่มเข้า Known Exploited Vulnerabilities (KEV) ใน 2 วัน

กลุ่มผู้โจมตี

AWS Threat Intelligence และ Google Cloud ยืนยันว่ามี กลุ่มภัยคุกคามจากจีน (China-nexus) ที่ใช้ช่องโหว่นี้อย่างรวดเร็ว โดยติดตั้ง backdoor หลายตัว:

  • MINOCAT — tunneler สำหรับเจาะเข้าเครือข่ายภายใน
  • SNOWLIGHT — downloader สำหรับดาวน์โหลดมัลแวร์เพิ่มเติม
  • HISONIC / COMPOOD — backdoor สำหรับควบคุมเซิร์ฟเวอร์ระยะไกล
  • XMRIG — ขุดเหมืองคริปโตบนเซิร์ฟเวอร์เหยื่อ
  • Sliver Framework — ขโมย cloud credentials

เหตุการณ์ที่ 4: Node.js Security Release — แพตช์ 8 ช่องโหว่ทุก Release Line

วันที่: 13 มกราคม 2569

Node.js ออกแพตช์ความปลอดภัยฉุกเฉินสำหรับทุก Release Line (20, 22, 24, 25) แก้ไข 8 CVE โดย 3 ตัวเป็นระดับ HIGH

CVE ระดับ ประเภท รายละเอียด
CVE-2025-55131 HIGH Buffer Memory Leak Buffer.alloc() อาจมีข้อมูลเก่าหลุดออกมา เช่น token หรือ password ที่เคยอยู่ในหน่วยความจำ
CVE-2025-55130 HIGH FS Permission Bypass ใช้ symlink หลอกระบบ --allow-fs-read/write เข้าถึงไฟล์นอก scope ที่อนุญาตได้
CVE-2025-59465 HIGH HTTP/2 DoS ส่ง HEADERS frame ที่ผิดรูปแบบ ทำให้ Node.js process crash ได้จากระยะไกล
CVE-2025-59466 MEDIUM async_hooks Crash Stack overflow ที่จับ error ไม่ได้
CVE-2025-59464 MEDIUM TLS Memory Leak หน่วยความจำรั่วจาก TLS certificate (Node 24)
CVE-2026-21636 MEDIUM Unix Socket Bypass Bypass permission ผ่าน Unix Domain Socket
CVE-2026-21637 MEDIUM TLS PSK/ALPN DoS DoS + File Descriptor leak จาก TLS callback
CVE-2025-55132 LOW fs.futimes Bypass เลี่ยง read-only permission ได้

เหตุการณ์ที่ 5: PackageGate — 6 Zero-Days ใน npm, pnpm, vlt และ Bun

วันที่: มกราคม 2569

บริษัทความปลอดภัย Koi เปิดเผย 6 ช่องโหว่ Zero-Day ในตัวจัดการแพ็กเกจ JavaScript หลักทั้งหมด — ที่ร้ายกว่าคือช่องโหว่เหล่านี้ ทำลายมาตรการป้องกันที่แนะนำหลังเหตุ Shai-Hulud

Package Manager ช่องโหว่ ผลกระทบ
npm Git dependency + .npmrc ปลอม RCE แม้ปิด script แล้ว
pnpm Script-disable ใช้ได้แค่ build phase RCE เงียบๆ ตอน install
vlt Path traversal ใน tarball เขียนไฟล์ที่ไหนก็ได้
Bun Allow-list ตรวจแค่ชื่อ ไม่ตรวจที่มา ปลอมแพ็กเกจได้
pnpm + vlt เก็บแค่ URL ไม่เก็บ integrity hash แก้ไข tarball ได้ตอน reinstall

ที่น่าสนใจคือ npm ปฏิเสธว่าเป็นช่องโหว่ — ระบุว่าเป็น "expected behavior" ในขณะที่ pnpm, vlt และ Bun ออกแพตช์แก้ไขแล้ว

ทำไม Saeree ERP ไม่ได้รับผลกระทบ?

เหตุการณ์ทั้ง 5 เรื่องข้างต้นมีจุดร่วมเดียวกัน — ทั้งหมดเกิดขึ้นใน ระบบนิเวศ JavaScript/Node.js/npm ซึ่ง Saeree ERP ไม่ได้ใช้เลยแม้แต่ชิ้นเดียว

ด้าน ระบบที่ถูกโจมตี Saeree ERP
ภาษาโปรแกรม JavaScript / TypeScript Java (มาตรฐานอุตสาหกรรมมากว่า 29 ปี)
Runtime Node.js Web Application Server (JBoss)
Package Manager npm / pnpm / Bun Maven Central (มีกระบวนการตรวจสอบเข้มงวด)
ฐานข้อมูล ไม่เกี่ยวข้อง PostgreSQL (Open Source ที่เสถียรที่สุด)
Framework React, Next.js Angular + Jersey JAX-RS
Dependency ทั้งหมด npm: 500+ dependencies ต่อโปรเจกต์ Maven: ควบคุมเข้มงวด dependency น้อยกว่ามาก

ทำไม Java + Maven ปลอดภัยกว่า?

  1. Maven Central มีกระบวนการ Verify ที่เข้มงวด — ต้องยืนยัน Group ID (เช่น com.grandlinux) ผ่านการพิสูจน์ domain ownership ไม่สามารถเผยแพร่แพ็กเกจด้วยชื่อที่คล้ายกับแพ็กเกจอื่นได้ง่ายๆ
  2. ไม่มี lifecycle script — Maven ไม่มีระบบ preinstall/postinstall ที่ npm มี ทำให้ช่องทางโจมตีแบบ Shai-Hulud เป็นไปไม่ได้
  3. Dependency Tree ตื้นกว่า — โปรเจกต์ Node.js มักมี dependency 500-1,000+ ตัว (รวม transitive) ในขณะที่โปรเจกต์ Java มักมีน้อยกว่าหลายเท่า ทำให้ attack surface แคบกว่ามาก
  4. Type Safety ระดับ Compile-time — Java ตรวจสอบ type ตั้งแต่ compile ทำให้ช่องโหว่แบบ Insecure Deserialization (เหมือน React2Shell) ตรวจจับได้ง่ายกว่า
  5. WAF (Web Application Firewall) — Saeree ERP มีระบบ WAF ป้องกันการโจมตี เช่น XSS และ Prototype Pollution ได้ 100% ตามที่ยืนยันจากเหตุการณ์จริง

การเลือกเทคโนโลยีพื้นฐาน (Technology Stack) ไม่ใช่แค่เรื่องของ performance หรือ feature — แต่เป็นเรื่องของ ความปลอดภัยในระยะยาว ที่ส่งผลต่อความเสี่ยงขององค์กรทั้งหมด

- ทีมงาน Saeree ERP

บทเรียนสำหรับองค์กร — เลือกเทคโนโลยีอย่างไรให้ปลอดภัย

จากเหตุการณ์เหล่านี้ สิ่งที่ผู้บริหาร IT และ CTO ควรนำไปพิจารณา:

1. อย่าเลือกเทคโนโลยีตามกระแส

Node.js และ npm ได้รับความนิยมมากเพราะเข้าถึงง่ายและพัฒนาเร็ว แต่ ความนิยมไม่ได้หมายถึงความปลอดภัย ยิ่ง ecosystem ใหญ่ ยิ่ง attack surface กว้าง

2. ประเมิน Supply Chain Risk ของเทคโนโลยีที่ใช้

ถามว่า:

  • Package Manager มีกระบวนการ verify อย่างไร?
  • มี lifecycle script ที่รันอัตโนมัติหรือไม่?
  • โปรเจกต์ต้องพึ่งพา dependency กี่ตัว?
  • ถ้า dependency ตัวหนึ่งถูกยึดครอง ผลกระทบจะแค่ไหน?

3. สำหรับระบบ ERP/Mission-Critical — เลือกเทคโนโลยีที่ "น่าเบื่อ" แต่เสถียร

Java อาจไม่ "เท่" เท่า Node.js แต่สำหรับระบบที่ต้องทำงาน 24/7 จัดการข้อมูลทางการเงิน และมีคนใช้หลายร้อยคนพร้อมกัน ความเสถียร ความปลอดภัย และ ecosystem ที่ตรวจสอบได้ สำคัญกว่า "ความเร็วในการพัฒนา" มาก

4. ตรวจสอบมาตรฐานความปลอดภัยของ vendor

เมื่อเลือก ERP หรือซอฟต์แวร์สำคัญ ให้ถามว่า:

สรุป

ช่วง 5 เดือนที่ผ่านมา (กันยายน 2568 — มกราคม 2569) เป็นบทพิสูจน์ว่า การเลือกเทคโนโลยีที่ถูกต้องตั้งแต่แรกเป็นเรื่องสำคัญที่สุดอย่างหนึ่ง ในการรักษาความปลอดภัยขององค์กร

องค์กรที่ใช้ระบบบน Node.js/npm ต้องเผชิญกับ:

  • การ audit dependency หลายร้อยตัว
  • การแพตช์ด่วนหลายรอบ
  • ความเสี่ยงจาก zero-day ที่ยังไม่ได้แก้
  • ค่าใช้จ่ายด้าน incident response

ในขณะที่ Saeree ERP ที่พัฒนาด้วย Java + PostgreSQL ไม่ได้รับผลกระทบจากเหตุการณ์ใดเลย — เพราะเลือกเทคโนโลยีที่ ผ่านการพิสูจน์มากว่า 29 ปี มี ecosystem ที่มีกระบวนการตรวจสอบเข้มงวด และเหมาะกับระบบ mission-critical ขององค์กร

หากต้องการปรึกษาเรื่องความปลอดภัยของระบบ ERP หรือต้องการทราบว่า Saeree ERP มีมาตรการรักษาความปลอดภัยอย่างไร สามารถติดต่อทีมที่ปรึกษาได้เลย

แหล่งอ้างอิง

ปรึกษาเรื่องความปลอดภัยระบบ ERP

Saeree ERP พัฒนาด้วย Java + PostgreSQL — ปลอดภัยจากภัยคุกคาม Supply Chain Attack ใน JavaScript Ecosystem

ขอ Demo ฟรี

โทร 02-347-7730 | sale@grandlinux.com

Saeree ERP Team

เกี่ยวกับผู้เขียน

ทีมงานผู้เชี่ยวชาญด้านระบบ ERP จากบริษัท แกรนด์ลีนุกซ์ โซลูชั่น จำกัด พร้อมให้คำปรึกษาและบริการด้านระบบ ERP ครบวงจร