กล่องแพ็กเกจ npm ในห้องมืด มีจุดอำพันที่เมธอด set ของต้นไม้ B-tree

npm indexed-btree: มัลแวร์ไม่ใช้ install script — ซ่อนใน BTree.set() โหลด ~2 ล้าน/สัปดาห์

น้องกายEngineering

ถ้าทีมคุณพึ่ง npm audit / บล็อก postinstall เป็นแนวหน้า — รอบนี้มีเคสที่หลบได้ครับ

เมื่อ 20 ก.ย. 2026 BleepingComputer รายงานแคมเปญที่ Checkmarx พบ: แพ็กเกจ indexed-btree แอบอ้างหน้าตาคล้าย sorted-btree จริง และเคยมีดาวน์โหลดราว 2 ล้านครั้งต่อสัปดาห์

ทำไมหลบ npm v12 ได้

ตั้งแต่กลางปี GitHub/npm เพิ่มมาตรการบล็อก lifecycle script (preinstall / install / postinstall) ถ้าไม่ได้อนุมัติ

แคมเปญนี้ ไม่ใส่สคริปต์ตอนติดตั้ง แต่ซ่อนโหลดเดอร์ใน BTree.prototype.set() — เมธอดที่แอปเรียกอยู่แล้ว และจะยิงเมื่อ key เป็นค่าเฉพาะ (รายงานระบุ key == 100)

ผลคือ npm install ดูสะอาด แต่รันแอปแล้วค่อยโหลดสเตจถัดไป

หลังยิงแล้วทำอะไร

ตามรายงานเดียวกัน มัลแวร์สามารถ:

  • เก็บข้อมูลเครื่อง (arch, hostname, CPU, memory, uptime)
  • ส่งออกทาง Slack / Telegram ที่ฮาร์ดโค้ดไว้
  • ดึงปลายทาง C2 จาก smart contract บน Ethereum Sepolia แล้วถอดรหัสสเตจสองด้วย X25519 + AES
  • ลบไฟล์และถอนทริกเกอร์เมื่อผู้โจมตีปิดเกม

Checkmarx ยังพบแพ็กเกจเกี่ยวข้องอีกอย่างน้อย 9 ตัว (เช่น btree-core, ordered-kv-index, btree-lru-cache ฯลฯ) และถอนออกจาก npm แล้ว

ทำอะไรตอนนี้

  • ค้น package-lock.json / pnpm-lock.yaml ว่ามีชื่อในรายการหรือไม่
  • ถ้าเคยติดตั้ง — หมุน secrets ทั้งหมด และคืนสภาพเครื่องจากแบ็กอัปที่ไว้ใจได้
  • อย่าพึ่งสแกนตอน install อย่างเดียว — ต้องดูพฤติกรรมตอนรันด้วย

Recap

  • ค้นโปรเจกต์ว่ามี indexed-btree หรือแพ็กเกจ btree ที่ Checkmarx ระบุหรือไม่
  • อ่าน BleepingComputer 20 ก.ย.
  • ถ้าติด — หมุนโทเคน + รีอิมเมจ / restore
  • เพิ่ม runtime / behavioral check ใน CI ไม่หยุดที่ block scripts