สรุปสั้น

แพ็กเกจ npm อันตรายระลอกใหม่กำลังพุ่งเป้าโจมตีนักพัฒนาที่ทำงานกับโครงสร้างพื้นฐานแบบ cloud และ serverless โดยภัยคุกคามที่รู้จักกันในชื่อ Shai-Hulud payload ซึ่งพกพามัลแวร์ตระกูล Hades ได้ขยายขอบเขตไปยังระบบนิเวศ Leo/RStreams ซึ่งเป็นชุดไลบรารีที่ใช้กันแพร่หลายสำหรับการทำ event streaming และ data pipeline แบบ AWS-native ทีมความปลอดภัยกำลังส่งสัญญาณเตือนเพราะการโจมตีนี้ขโมย credential ที่อ่อนไหวของนักพัฒนาอย่างเงียบ ๆ ในทันทีที่ติดตั้งแพ็กเกจ สิ่งที่ทำให้แคมเปญนี้อันตรายเป็นพิเศษคือความลึกของการขุดข้อมูล เมื่อนักพัฒนาติดตั้งแพ็กเกจที่ได้รับผลกระทบ payload จะเริ่มเก็บ credential ที่เก็บอยู่ในไฟล์ ตัวแปรสภาพแวดล้อม ประวัติ shell โทเคน GitHub CLI คีย์การเข้าถึงคลาวด์ และ secret ของ CI/CD pipeline

payload ทำงานเงียบ ๆ ในเบื้องหลังและส่งทุกอย่างที่พบไปยัง repository GitHub ที่ผู้โจมตีควบคุม ขนาดของการเปิดเผยข้อมูลนั้นมหาศาล เพราะแพ็กเกจที่ได้รับผลกระทบมียอดดาวน์โหลดราว 45,000 ครั้งในเดือนเดียว หมายความว่านักพัฒนาหลายพันคนอาจได้รับผลกระทบไปแล้วโดยไม่รู้ตัว นักวิเคราะห์จากบริษัท JFrog Security Research เป็นผู้ระบุระลอกใหม่นี้และเผยแพร่ผลการวิจัยในรายงานที่แบ่งปันกับ Cyber Security News โดยนาย Yair Benamou นักวิจัย ระบุว่านี่ไม่ใช่ภัยคุกคามใหม่ทั้งหมด แต่เป็นอีกรอบของแคมเปญเดิมที่ใช้กลไกขโมย credential ชุดเดียวกันแต่เปลี่ยนเป้าหมายใหม่และอัปเดตเครื่องหมายระบุตัวใหม่ ยืนยันว่าปฏิบัติการ Shai-Hulud ยังคงทำงานและเติบโตต่อเนื่อง

รายละเอียดข่าว

เว็บไซต์ Cyber Security News รายงานเมื่อวันที่ 25 มิถุนายน พ.ศ. 2569 ว่า แพ็กเกจ npm อันตรายระลอกใหม่กำลังพุ่งเป้านักพัฒนาที่ทำงานกับ cloud และ serverless โดยภัยคุกคาม Shai-Hulud payload ที่พกมัลแวร์ตระกูล Hades ได้ขยายไปยังระบบนิเวศ Leo/RStreams ซึ่งเป็นชุดไลบรารีที่ใช้แพร่หลายสำหรับ event streaming และ data pipeline แบบ AWS-native โดยการโจมตีจะขโมย credential ของนักพัฒนาอย่างเงียบ ๆ ทันทีที่ติดตั้งแพ็กเกจ

นักวิเคราะห์จากบริษัท JFrog Security Research ระบุระลอกใหม่นี้และเผยแพร่ผลการวิจัยในรายงานที่แบ่งปันกับ Cyber Security News โดยนาย Yair Benamou นักวิจัย ตั้งข้อสังเกตว่านี่ไม่ใช่ภัยคุกคามใหม่ทั้งหมด แต่เป็นอีกรอบของแคมเปญเดิมที่ใช้กลไกการขโมย credential ชุดเดียวกัน เพียงแต่เปลี่ยนไปโจมตีเป้าหมายใหม่และอัปเดตเครื่องหมายระบุตัว ไลบรารี Leo/RStreams อยู่ใจกลางกระบวนการพัฒนาแบบ cloud-native เพราะมันห่อหุ้มบริการ AWS อย่าง Kinesis, S3, Lambda และ DynamoDB หมายความว่านักพัฒนาที่ติดตั้งเครื่องมือเหล่านี้มีแนวโน้มทำงานอยู่ในสภาพแวดล้อมที่เต็มไปด้วย cloud credential และ deployment token

ตำแหน่งนี้ทำให้การติดตั้งที่ถูกเจาะเพียงครั้งเดียวสามารถเปิดเผยข้อมูลได้มากกว่าเครื่องของนักพัฒนาเพียงคนเดียว ระลอกล่าสุดนี้ยืนยันว่าปฏิบัติการ Shai-Hulud ยังคงทำงานและเติบโตต่อเนื่อง แทนที่จะสร้างมัลแวร์ใหม่จากศูนย์ ผู้โจมตีกลับนำ payload ที่พิสูจน์แล้วว่าได้ผลมาใช้ซ้ำและเล็งไปยังตระกูลแพ็กเกจที่น่าเชื่อถือชุดใหม่ ทำให้ผู้ป้องกันที่อาศัยเพียงชื่อแคมเปญเก่าหรือ signature ที่ล้าสมัยมีแนวโน้มสูงที่จะพลาดการตรวจจับไปโดยสิ้นเชิง

Shai-Hulud payload steals GitHub npm cloud CI/CD and SSH credentials from developers

วิธีการโจมตี

แพ็กเกจอันตรายใช้กลเม็ดการส่งมอบที่ชาญฉลาดช่วยให้หลบผ่าน security scanner พื้นฐานได้ แทนที่จะวางโค้ดอันตรายไว้ใน npm install script มาตรฐานที่เครื่องมือส่วนใหญ่ตรวจสอบ ผู้โจมตีกลับซ่อนการรันโค้ดไว้ในไฟล์ชื่อ binding.gyp เมื่อ npm พบแพ็กเกจที่มีไฟล์นี้และไม่มี install script ที่ระบุชัดเจน มันจะรัน node-gyp โดยอัตโนมัติ ซึ่งจะประมวลผลคำสั่ง shell ที่ฝังอยู่ในไฟล์นั้น ทำให้ผู้โจมตีมีช่องทางรันโค้ดระหว่างการติดตั้งโดยไม่ถูกตรวจจับ

เมื่อเริ่มทำงาน payload จะเก็บ credential จากแหล่งต่าง ๆ บนเครื่องของนักพัฒนาอย่างกว้างขวาง ทั้งโทเคน GitHub, credential สำหรับ publish ของ npm และ PyPI, คีย์การเข้าถึง AWS, โทเคน JFrog และ Artifactory และ SSH key ข้อมูลที่ขโมยมาจะถูกบรรจุเป็นไฟล์ที่เข้ารหัสและส่งออกด้วยการสร้าง repository ใต้โทเคน GitHub ที่ขโมยมาแล้ว commit ผลลัพธ์ไว้ที่นั่น ซึ่งเป็นเทคนิคที่เรียกว่า GitHub dead drop นอกจากนี้ payload ยังไม่หยุดแค่การขโมย credential ระหว่างติดตั้ง แต่ยังวาง persistence hook หลายจุดเพื่อให้ทำงานต่อหลังการติดตั้งครั้งแรก โดยตั้งตัวเองเป็น systemd service บน Linux หรือ LaunchAgent บน macOS พร้อมทั้งแทรกแซงเครื่องมือพัฒนาที่ใช้ AI ด้วยการแก้ไขไฟล์ config ของเครื่องมือเหล่านั้น

ผลกระทบต่อไทย

นักพัฒนาและทีมวิศวกรรมในไทยจำนวนมากใช้ npm เป็นเครื่องมือหลักในการพัฒนา และพึ่งพาไลบรารีโอเพนซอร์สที่ดึงผ่าน package manager ในทุกโปรเจกต์ การโจมตีแบบ supply chain ที่ขโมย credential ทันทีที่ติดตั้งแพ็กเกจ ถือเป็นภัยร้ายแรงเพราะการติดตั้งเพียงครั้งเดียวบนเครื่องนักพัฒนาคนเดียว อาจทำให้โทเคน GitHub, คีย์ AWS และ secret ของ CI/CD ทั้งทีมรั่วไหล ลุกลามไปสู่การเจาะระบบ production และการโจมตี supply chain ต่อเนื่องที่กระทบลูกค้าปลายทาง องค์กรไทยที่มี pipeline อัตโนมัติซึ่งติดตั้งแพ็กเกจโดยไม่ตรวจสอบ ยิ่งเสี่ยงต่อการถูกฝัง payload โดยไม่รู้ตัว

คำแนะนำ

ทีมพัฒนาควรตรวจสอบแพ็กเกจ npm ที่ใช้โดยเฉพาะในระบบนิเวศ Leo/RStreams และล็อกเวอร์ชัน dependency ด้วย lockfile พร้อมตรวจสอบแพ็กเกจที่มีไฟล์ binding.gyp ที่น่าสงสัยซึ่งไม่มี install script ชัดเจน ควรใช้เครื่องมือสแกน supply chain ที่ตรวจพฤติกรรมระหว่างติดตั้ง ไม่ใช่แค่ตรวจ install script รันการติดตั้งในสภาพแวดล้อมที่แยกออก (sandbox/CI) และจำกัดสิทธิ์ token หากพบว่าติด ควร rotate credential ทั้งหมดทันที ทั้งโทเคน GitHub, npm, PyPI, คีย์ AWS, โทเคน JFrog/Artifactory และ SSH key รวมถึงตรวจสอบ persistence อย่าง systemd service และ LaunchAgent ที่ผิดปกติ และเฝ้าระวัง repository GitHub ที่ถูกสร้างขึ้นโดยไม่ทราบที่มา

Indicators of Compromise (IoCs)

แพ็กเกจ npm ที่ถูกฝัง payload (Leo/RStreams ที่ถูก hijack):

ประเภทตัวบ่งชี้คำอธิบาย
npm Packageleo-auth v4.0.6แพ็กเกจ Leo/RStreams ที่ถูก hijack (XRAY-1009715)
npm Packageleo-aws v2.0.4แพ็กเกจ Leo/RStreams ที่ถูก hijack (XRAY-1009716)
npm Packageleo-cache v1.0.2แพ็กเกจ Leo/RStreams ที่ถูก hijack (XRAY-1009726)
npm Packageleo-cdk-lib v0.0.2แพ็กเกจ Leo/RStreams ที่ถูก hijack (XRAY-1009721)
npm Packageleo-cli v3.0.3แพ็กเกจ Leo/RStreams ที่ถูก hijack (XRAY-1009724)
npm Packageleo-config v1.1.1แพ็กเกจ Leo/RStreams ที่ถูก hijack (XRAY-1009720)
npm Packageleo-connector-elasticsearch v2.0.6แพ็กเกจ Leo/RStreams ที่ถูก hijack (XRAY-1009713)
npm Packageleo-connector-mongo v3.0.8แพ็กเกจ Leo/RStreams ที่ถูก hijack (XRAY-1009714)
npm Packageleo-connector-mysql v3.0.3แพ็กเกจ Leo/RStreams ที่ถูก hijack (XRAY-1009729)
npm Packageleo-connector-oracle v2.0.1แพ็กเกจ Leo/RStreams ที่ถูก hijack (XRAY-1009718)
npm Packageleo-connector-redshift v3.0.6แพ็กเกจ Leo/RStreams ที่ถูก hijack (XRAY-1009725)
npm Packageleo-cron v2.0.2แพ็กเกจ Leo/RStreams ที่ถูก hijack (XRAY-1009723)
npm Packageleo-logger v1.0.8แพ็กเกจ Leo/RStreams ที่ถูก hijack (XRAY-1009727)
npm Packageleo-sdk v6.0.19แพ็กเกจ Leo/RStreams ที่ถูก hijack (XRAY-1009717)
npm Packageleo-streams v2.0.1แพ็กเกจ Leo/RStreams ที่ถูก hijack (XRAY-1009728)
npm Packagerstreams-metrics v2.0.2แพ็กเกจ Leo/RStreams ที่ถูก hijack (XRAY-1009731)
npm Packagerstreams-shard-util v1.0.1แพ็กเกจ Leo/RStreams ที่ถูก hijack (XRAY-1009732)
npm Packageserverless-convention v2.0.4แพ็กเกจ Leo/RStreams ที่ถูก hijack (XRAY-1009719)
npm Packageserverless-leo v3.0.14แพ็กเกจ Leo/RStreams ที่ถูก hijack (XRAY-1009730)
npm Packagesolo-nav v1.0.1แพ็กเกจ Leo/RStreams ที่ถูก hijack (XRAY-1009722)

ตัวบ่งชี้ด้านเครือข่ายและ persistence:

ประเภทตัวบ่งชี้คำอธิบาย
URLhxxps[:]//api[.]anthropic[.]com/v1/apiปลอมตัวเป็น Anthropic API สำหรับการสื่อสาร payload
URLhxxps[:]//api[.]github[.]comGitHub API ใช้ทำ dead-drop exfiltration
URLhxxps[:]//github[.]com/oven-sh/bun/releases/download/bun-v1.3.13/ดาวน์โหลด Bun runtime โดย payload
File Path/tmp/p*.jsสคริปต์ payload ชั่วคราว
File Path/tmp/b-/bunBun runtime binary ที่ถูกดรอปใน temp
File Path~/.config/gh-token-monitor/ไดเรกทอรี config สำหรับ persistence
File Path~/.config/systemd/user/gh-token-monitor.servicesystemd persistence service บน Linux
File Path~/Library/LaunchAgents/com.user.gh-token-monitor.plistLaunchAgent persistence บน macOS

หมายเหตุ: URL ถูก defang (เช่น hxxps[:]//, [.]) เพื่อป้องกันการ resolve หรือคลิกโดยไม่ตั้งใจ ให้ re-fang เฉพาะภายในแพลตฟอร์ม threat intelligence ที่ควบคุมได้ เช่น MISP, VirusTotal หรือ SIEM ขององค์กรเท่านั้น

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