ADEX ติดตามการติดเชื้อ macOS แบบสดจากกระบวนการแปลกประหลาดหนึ่งไปยังภัยคุกคามห่วงโซ่อุปทานที่ใหญ่กว่าซึ่งแพร่กระจายผ่านเครื่องมือสำหรับนักพัฒนาของ Apple คดีนี้มุ่งเน้นที่ XCSSET ซึ่งเป็นมัลแวร์ตระกูลหนึ่งที่ซ่อนตัวอยู่ในไฟล์โปรเจกต์ Xcode แทนที่จะซ่อนในแอปที่สร้างเสร็จแล้ว โดยรอให้นักพัฒนาสร้างโปรเจกต์และเรียกใช้ payload
เบาะแสที่จุดชนวนคดี

สัญญาณแรกเล็กน้อยแต่ผิดปกติ: กิจกรรม osascript ที่เกิดขึ้นซ้ำๆ จาก /tmp/jl AppleScript เป็นเครื่องมือ macOS ปกติ แต่ตำแหน่งที่ตั้งนั้นสำคัญ ไดเรกทอรี /tmp เป็นพื้นที่ชั่วคราว ไม่ใช่สถานที่ที่ซอฟต์แวร์ปกติควรรีสตาร์ทสคริปต์อายุสั้นที่มีอาร์กิวเมนต์ที่เข้ารหัสขนาดใหญ่ซ้ำๆ
ADEX คัดลอกไฟล์ก่อนที่มันจะหายไป เมื่อจับได้แล้ว /tmp/jl ปรากฏว่าเป็น AppleScript ที่คอมไพล์แล้ว เนื้อหาของมันถูกบีบอัดด้วยการเข้ารหัส base64 หลายชั้น ซึ่งเป็นวิธีทั่วไปที่มัลแวร์ใช้ซ่อนการเคลื่อนไหวครั้งต่อไปจากการตรวจสอบอย่างรวดเร็ว
หลังจากถอดรหัส ตัวอย่างเผยให้เห็น shell script ที่รวบรวมรายละเอียดของระบบ โดยเก็บข้อมูลชื่อผู้ใช้ ภาษา เวอร์ชัน macOS ประเภท CPU สถานะ System Integrity Protection หมายเลขซีเรียล Mac และข้อมูลที่เกี่ยวข้องกับ Chrome ข้อมูลดังกล่าวถูกส่งไปยัง riggletoy.ru ซึ่งเป็นโดเมน command-and-control ที่ ADEX ระบุว่าไม่ปรากฏในฟีดภัยคุกคามสาธารณะในขณะนั้น โดเมนที่สอง netcdndev.in ซึ่งพบในภายหลังในส่วน GitHub ของการสืบสวน ก็ไม่มีอยู่ในรายการ indicator-of-compromise สาธารณะใดๆ เช่นกัน
ไฟล์ Build กลายเป็นประตูทางเข้า
อันตรายของ XCSSET มาจากที่ซ่อนตัว โปรเจกต์ Xcode ประกอบด้วยไฟล์ project.pbxproj ที่บอกซอฟต์แวร์พัฒนาของ Apple ว่าต้องรันอะไรระหว่างการ build สคริปต์ที่เป็นอันตรายที่วางไว้ที่นั่นสามารถรันภายใต้บัญชีของนักพัฒนาเองเมื่อโปรเจกต์ถูกคอมไพล์
นั่นทำให้การโจมตีเงียบงัน ไม่จำเป็นต้องมีตัวติดตั้งที่แปลกประหลาด ไม่มีไอคอนแอปที่ชัดเจนปรากฏขึ้น นักพัฒนาอาจโคลนโปรเจกต์จาก GitHub เปิดใน Xcode กด Build และมอบโอกาสที่มัลแวร์ต้องการ
จากนั้นการติดเชื้อจะค้นหาโปรเจกต์ Xcode อื่นๆ บนเครื่อง ADEX พบโปรเจกต์ที่ถูกแก้ไขมากกว่า 20 โปรเจกต์บนเวิร์กสเตชันที่ได้รับผลกระทบ ทั้งหมดถูกเปลี่ยนแปลงภายในนาทีเดียวกัน เวลาดังกล่าวชี้ให้เห็นการกวาดล้างอัตโนมัติ ไม่ใช่การแก้ไขโดยมนุษย์ เวิร์กสเตชันที่ติดเชื้อหนึ่งเครื่องกลายเป็นจุดพักสำหรับการแพร่กระจายต่อไปแล้ว
ความคงอยู่คือปัญหาที่แท้จริง
การทำความสะอาดโปรเจกต์เดียวไม่สามารถแก้ปัญหาได้ ADEX พบ Launchpad.app ปลอมที่ฝังอยู่ในโฟลเดอร์แคชของผู้ใช้ ในขณะที่ Launchpad จริงอยู่ใน /System/Applications/Launchpad.app รายละเอียดนั้นตรงกับ "dock method" ที่รู้จักกัน ซึ่งมัลแวร์เปลี่ยนเส้นทางไอคอน Dock เพื่อให้ผู้ใช้เปิดทั้งแอปจริงและ payload ที่ซ่อนอยู่โดยไม่รู้ตัว
รายงานได้อธิบายเส้นทางความคงอยู่เพิ่มเติม รวมถึง launch agents การเปลี่ยนแปลง shell profile และ git hooks บทเรียนนั้นชัดเจน: โปรเจกต์ที่ติดเชื้อเป็นเพียงอาการ กลไกที่ทำให้การติดเชื้อคงอยู่ต้องถูกกำจัดก่อน
ลำดับการทำความสะอาดของ ADEX เข้มงวด ลบจุด autostart รีบูต จากนั้นกู้คืนโปรเจกต์ Xcode จากสถานะ git ที่สะอาด การกลับลำดับนั้นเสี่ยงต่อการให้มัลแวร์เขียนทับไฟล์ที่ทำความสะอาดแล้วอีกครั้ง
GitHub แสดงร่องรอยที่กว้างขึ้น
การสืบสวนย้ายจากเครื่องหนึ่งไปยัง repositories สาธารณะ ADEX รายงาน 24 GitHub repositories ที่มี XCSSET payload chains ในตัวอย่างได้แก่ PrinceMittal1/DemoForAuthFlow, zzzznick/dummy-ios และ dvillegastech/ReaxBD
Repository หนึ่ง คือ usamajaved357/Breezy ใช้ riggletoy.ru ซึ่งเป็นโดเมนเดียวกันกับที่พบในตัวอย่างสด อีกอันคือ xiaoyouPrince/XYDevTool ใช้ netcdndev.ในโดเมนที่ ADEX อธิบายว่าไม่มีอยู่ในรายการ indicator-of-compromise สาธารณะในขณะที่ตรวจสอบ ซึ่งบ่งชี้ว่าผู้ดำเนินการหมุนเวียนโครงสร้างพื้นฐานเร็วกว่าที่ฟีดภัยคุกคามสาธารณะจะติดตามได้ สิบสองใน 24 repositories ได้รับ commits ในปี 2026 โดย repository ล่าสุดเพิ่งเกิดขึ้นหนึ่งวันก่อนการตรวจสอบ หลาย repositories มีกิจกรรมในปี 2026 ซึ่งบ่งชี้ว่าแคมเปญยังคงแพร่กระจายผ่านโค้ดที่แชร์
ตัวเลขเหล่านี้มีความสำคัญเพราะความไว้วางใจของนักพัฒนาเป็นส่วนหนึ่งของเส้นทางการโจมตี ไฟล์โปรเจกต์ Xcode มักถูกมองว่าเป็นเรื่องปกติ มองเห็นได้น้อยกว่า source code หรือ dependencies XCSSET ใช้ประโยชน์จากนิสัยนั้น
ความเสี่ยงสำหรับนักพัฒนา Apple
เป้าหมายโดยตรงไม่ใช่ผู้ใช้ App Store แต่เป็นบุคคลที่สร้างซอฟต์แวร์ พร้อมกับข้อมูลรับรอง เซสชันเบราว์เซอร์ repositories และโทเค็นที่เก็บไว้ในเครื่องนั้น
XCSSET สามารถดึงข้อมูลจากเบราว์เซอร์ Keychain และไฟล์การกำหนดค่า รวมถึง cloud keys, AWS tokens, SSH keys และ Git credentials แทนที่ที่อยู่กระเป๋าเงิน Bitcoin หรือ Ethereum ที่คัดลอกมา และเปลี่ยนแปลงพฤติกรรมของเบราว์เซอร์ผ่านโค้ด JavaScript ที่ฉีดเข้าไป สำหรับทีมซอฟต์แวร์ นั่นหมายความว่า Mac ที่ถูกบุกรุกเพียงเครื่องเดียวสามารถทำให้ source code บัญชี และโปรเจกต์ downstream ตกอยู่ในความเสี่ยง
การป้องกันเชิงปฏิบัติเริ่มต้นก่อนกดปุ่ม build นักพัฒนาควรตรวจสอบ Xcode build phases ที่ไม่คุ้นเคยและเก็บไฟล์ project.pbxproj ไว้ใน version control ดู global git hooks เปิด System Integrity Protection ไว้ และตรวจสอบ outbound traffic ที่ไม่คาดคิด ทีมรักษาความปลอดภัยควรปฏิบัติต่อแล็ปท็อปของนักพัฒนาเป็นส่วนหนึ่งของห่วงโซ่อุปทาน ไม่ใช่ endpoint ทั่วไป








