
ThaiCERT ได้ติดตามสถานการณ์ภัยคุกคามทางไซเบอร์ และพบรายงานวพบ 36 แพ็กเกจอันตรายใน npm registry ปลอมตัวเป็นปลั๊กอินของ Strapi CMS โดยใช้ชื่อขึ้นต้น “strapi-plugin-” เพื่อหลอกให้นักพัฒนาดาวน์โหลด ทั้งที่ปลั๊กอินทางการของ Strapi ใช้ชื่อแพ็กเกจในรูปแบบ “@strapi/…” โค้ดอันตรายถูกฝังใน “postinstall.js” และสามารถทำงานอัตโนมัติระหว่าง “npm install” ด้วยสิทธิ์ของผู้ติดตั้ง ส่งผลให้ผู้โจมตีสามารถโจมตี Redis และ PostgreSQL, เปิด reverse shell, ขโมย “.env”/credential/กุญแจลับ และติดตั้ง persistence เพื่อคงอยู่ในระบบได้ [1]
1. รายละเอียด
แพ็กเกจอันตรายถูกอัปโหลดผ่าน 4 บัญชีปลอม ได้แก่ “umarbek1233”, “kekylf12”, “tikeqemif26” และ “umar_bektembiev1” ภายในช่วงเวลาประมาณ 13 ชั่วโมง นักวิจัยพบ payload อย่างน้อย 8 รูปแบบ ตั้งแต่การใช้ Redis เพื่อเขียน cron job และ web shell, ความพยายาม escape ออกจาก Docker container, การเปิด bash/Python reverse shell, การค้นหา environment variables และไฟล์ลับ, การใช้ credential ที่ฝังตายตัวเพื่อเชื่อมต่อ PostgreSQL โดยตรง, ไปจนถึงการฝัง persistent implant สำหรับคงการเข้าถึงระยะยาว
2. ผลิตภัณฑ์ที่ได้รับผลกระทบ [2]
– ระบบที่ใช้ npm ในการติดตั้ง dependencies และมีการติดตั้งแพ็กเกจอันตรายที่ปลอมเป็นปลั๊กอินของ Strapi
– ระบบ CI/CD เช่น build servers, runners และ automation pipelines
– คอนเทนเนอร์และเซิร์ฟเวอร์ที่มีการรัน npm install หรือ npm ci
3. แนวทางการแก้ไข
– หากเคยติดตั้งแพ็กเกจข้างต้น ให้ assume compromise ทันทีและเร่ง rotate credentials ทั้งหมดที่อาจเกี่ยวข้อง เช่น API keys, database credentials, SSH keys, cloud secrets, wallet secrets และ token ของ CI/CD
– ถอดแพ็กเกจอันตรายออกจาก dependency tree, ตรวจสอบ `package-lock.json`/image/container ที่ build ไปแล้ว, และ rebuild จากแหล่งที่เชื่อถือได้เท่านั้น
– ตรวจสอบร่องรอย persistence และ IoC สำคัญ เช่น “/tmp/.node_gc.js”, cron entries ที่ผิดปกติ, “/app/public/uploads/shell.php”, “/app/public/uploads/revshell.js”, “/tmp/redis_exec.sh”, การแก้ไขไฟล์ใน node_modules, รวมถึงการเชื่อมต่อไปยัง 144[.]31[.]107[.]231 ที่พอร์ต 9999, 4444 และ 8888
– สำหรับการตรวจสอบหรือทดสอบแพ็กเกจในสภาพแวดล้อมควบคุม อาจตั้งค่า `ignore-scripts=true` หรือใช้การติดตั้งแบบไม่รัน scripts เพื่อป้องกัน `postinstall` ทำงานซ้ำระหว่างการวิเคราะห์ [3]
4. หากยังไม่สามารถดำเนินการแก้ไขได้ควรดำเนินการดังนี้
– แยกเครื่องนักพัฒนา, CI runners, container หรือเซิร์ฟเวอร์ Strapi ที่อาจได้รับผลกระทบออกจากเครือข่ายโดยเร็ว
– ตรวจสอบ Redis และ PostgreSQL logs, cron, `.env` files, Docker/Kubernetes secrets และการเข้าถึงไฟล์กุญแจส่วนตัวหรือ wallet files
– ตรวจสอบว่ามีการติดตั้งปลั๊กอินจากแหล่งที่เชื่อถือได้เท่านั้น โดยเฉพาะจาก Strapi Marketplace หรือแพ็กเกจทางการใน scope “@strapi/”
– เนื่องจากกรณีนี้เป็น malicious package / supply chain attack ไม่ใช่ช่องโหว่ที่แก้ได้ด้วยแพตช์เดียว จึงไม่ควรรอ workaround แต่ควรเร่ง containment, credential rotation, forensic review และ rebuild ระบบ โดยเร็วที่สุด [4]
แหล่งอ้างอิง
