สรุปสั้น
แฮ็กเกอร์เจาะแพ็กเกจ Python จำนวน 19 ตัวบน PyPI ที่รวมยอดดาวน์โหลดหลายแสนครั้ง ในแคมเปญ Shai-Hulud คลื่นใหม่ที่มุ่งเป้านักวิทยาศาสตร์ข้อมูลสาย bioinformatics ปล่อยมัลแวร์ที่ขโมยความลับของนักพัฒนาออกไปอย่างเงียบ หลายแพ็กเกจที่ติดมัลแวร์เป็นเครื่องมือชีวสารสนเทศยอดนิยม เช่น Dynamo, Spateo, CoolBox, U-FISH และ Napari-UFISH ซึ่งใช้กันในห้องวิจัยและสถาบันการศึกษาทั่วโลก บริษัท Socket ซึ่งเป็นบริษัทด้านความปลอดภัยแอปพลิเคชันเป็นผู้ค้นพบและขยายผลว่ามี 37 รีลีสที่เป็นอันตราย ครอบคลุม 19 แพ็กเกจที่เชื่อมโยงกับ maintainer รายเดียวกัน
วิธีโจมตีใหม่ใช้ไฟล์ .pth แบบ executable วาง setup.pth ลงในแพ็กเกจ ทำให้แค่ Python เริ่มทำงานก็ทริกเกอร์การโหลด Bun JavaScript runtime จาก GitHub แล้วรันสคริปต์ _index.js ที่ obfuscate ไว้ มัลแวร์ขโมย GitHub token, npm token, ความลับ AWS, GCP, Azure, Kubernetes, Vault, SSH key, Docker credential, ไฟล์ .env .npmrc .pypirc, shell history และ Claude/MCP configuration Socket ติดตามคลัสเตอร์ Shai-Hulud ทั้งหมดที่มีจำนวน 453 รายการแล้ว และแนะนำให้องค์กรที่ติดตั้งแพ็กเกจในรายการนี้ให้ rotate ความลับทั้งหมดและคืนค่า environment จาก backup ที่ปลอดภัย
รายละเอียดข่าว
เว็บไซต์ BleepingComputer รายงานเมื่อวันที่ 8 มิถุนายน พ.ศ. 2569 ว่าบริษัท Socket ค้นพบ Shai-Hulud คลื่นใหม่ที่เจาะ PyPI 19 แพ็กเกจสายชีวสารสนเทศ ปล่อย 37 รีลีสมุ่งร้ายในชื่อ maintainer คนเดียว โดยใช้กลไกใหม่ผ่านไฟล์ .pth แบบ executable ทริกเกอร์ Bun JavaScript runtime ขโมยความลับนักพัฒนา แพ็กเกจที่ติดมัลแวร์รวมถึง Dynamo, Spateo, CoolBox, U-FISH และ Napari-UFISH ซึ่งใช้ใน workflow ทางพันธุศาสตร์ การวิเคราะห์ภาพชีววิทยาเชิงพื้นที่ และ FISH imaging มียอดดาวน์โหลดรวมหลายแสนครั้ง
นักวิจัยของ Socket อธิบายว่า artifact ที่เป็นอันตรายประกอบด้วยไฟล์ *-setup.pth และ JavaScript payload ที่ obfuscate ชื่อ _index.js ผู้ใช้แค่เริ่ม Python ก็ทริกเกอร์การทำงานของไฟล์ PTH ซึ่งจะดาวน์โหลด Bun JavaScript runtime จาก GitHub มารันสคริปต์ ลักษณะนี้น่ากังวลเพราะ wheel ที่ถูกเจาะสามารถเปลี่ยนการติดตั้ง dependency แบบ passive ให้กลายเป็น delayed execution trigger คือ Python, pip, test run, notebook kernel, CI job หรือ package management command ตัวต่อไปที่เริ่ม Python ก็จะประมวลผล .pth ตัวร้ายโดยอัตโนมัติ
Socket เชื่อว่าแคมเปญนี้เป็นส่วนหนึ่งของ Shai-Hulud ที่กว้างกว่า เพราะมัลแวร์มีลักษณะคล้ายเทคนิคในแคมเปญก่อนหน้า และตอนนี้รายการ artifact ของ Shai-Hulud มีถึง 453 รายการแล้ว ขยายขอบเขตจาก npm สู่ PyPI เป็นครั้งแรก วิธี exfiltrate ข้อมูลหลักยังคงคล้ายปฏิบัติการ Shai-Hulud เดิม โดยสร้าง GitHub repository อัตโนมัติเพื่อเก็บความลับที่เขียนผ่าน GitHub Actions และมีช่องทางที่สองผ่าน HTTPS ตรงไปที่ endpoint ของ Anthropic API ปลอม api.anthropic.com/v1/api ที่ Socket เชื่อว่าใช้พรางตัว
รายละเอียดช่องโหว่
หลักการของไฟล์ .pth คือ Python จะรันโค้ดที่ขึ้นต้นด้วย import ในไฟล์ .pth ใน site-packages โดยอัตโนมัติทุกครั้งที่ interpreter เริ่มทำงาน ทำให้กลายเป็น persistence ที่ผู้ใช้ไม่รู้ตัว ไม่ต้องรันคำสั่งใด ๆ เพิ่มจาก import แพ็กเกจปกติ JavaScript payload ที่วิเคราะห์ได้มุ่งเป้าความลับนักพัฒนาในวงกว้าง ประกอบด้วย GitHub token และ GitHub Actions secret, publishing token ของ npm PyPI RubyGems JFrog, credential AWS GCP Azure Kubernetes Vault, SSH key, Docker credential, ไฟล์ .env .npmrc .pypirc, shell history, ไฟล์ configuration ของ Claude/MCP และความลับอื่นใน workstation และ CI/CD pipeline
มัลแวร์มีกลไก evasion ได้แก่ การตรวจ Russian locale/environment เพื่อไม่ทำงาน และตรวจเครื่องมือความปลอดภัย StepSecurity Harden-Runner รวมถึงสร้าง persistence ผ่าน systemd service บน Linux และ LaunchAgent บน macOS พร้อมใช้ไฟล์ workflow ของ GitHub และ configuration ของ Claude/MCP
ผลกระทบต่อไทย
นักวิจัยและห้องปฏิบัติการชีวสารสนเทศของไทยในสถาบันการศึกษาและโรงพยาบาลที่ใช้แพ็กเกจสาย bioinformatics เหล่านี้มีความเสี่ยงโดยตรง โดยเฉพาะกลุ่มวิจัยพันธุศาสตร์ ระบบประมวลผลภาพชีววิทยา และทีม data science ที่พึ่งพา Dynamo Spateo CoolBox U-FISH นักพัฒนาไทยที่ใช้ Claude Code, MCP server หรือ AI coding tool บนเครื่องเดียวกันมีความเสี่ยงสูงเพราะมัลแวร์ระบุไฟล์ configuration ของ Claude/MCP เป็นเป้าหมาย หากความลับเหล่านี้รั่ว ผู้โจมตีจะสามารถใช้ AI agent ในชื่อของเหยื่อ ทะลุเข้า code repository และ cloud workload
องค์กรไทยที่ใช้ self-hosted CI/CD pipeline (GitHub Actions, GitLab CI) ที่รัน Python script ภายในเครื่องเดียวกับ runner เสี่ยงต่อการรั่วของ credential ที่ใช้ deploy production ทำให้เปิดทาง supply chain attack ทอดสอง
คำแนะนำ
ตรวจสอบโดยทันทีว่ามี Python package ที่มี executable .pth startup hook ที่ไม่ควรมีอยู่หรือไม่ และค้นหา download ของ Bun JavaScript runtime จาก GitHub ที่ไม่คาดคิด รวมถึง process chain ที่ Python เปิด Bun เพื่อรัน _index.js หากพบว่าติดตั้งแพ็กเกจในรายการที่ Socket เผยแพร่ ให้ rotate ความลับทั้งหมดทันที ทั้ง GitHub token, cloud credential, SSH key และ publishing token แล้วคืนค่า environment จาก backup ที่ปลอดภัย
ใช้ pip option --require-hashes พร้อม pinned version และตั้ง egress filter บน developer workstation และ CI runner ให้บล็อกการดาวน์โหลดจาก GitHub release ที่ไม่ได้อยู่ใน allowlist ตรวจสอบไฟล์ persistence เช่น systemd service บน Linux, LaunchAgent บน macOS และ GitHub Actions workflow ที่สร้างขึ้นโดยอัตโนมัติ พร้อมตรวจ configuration ของ Claude/MCP เผื่อมีการ exfiltrate พิจารณาแยกสภาพแวดล้อมรันโค้ดวิจัยออกจาก workstation ที่มี cloud credential และ AI assistant configuration เพื่อจำกัดความเสียหายในเหตุการณ์ supply chain attack
