สรุปสั้น

GhostAction เป็นแคมเปญโจมตีห่วงโซ่อุปทานซอฟต์แวร์ที่ยึดบัญชี GitHub ของนักพัฒนา แล้วฝังไฟล์เวิร์กโฟลว์ GitHub Actions อันตรายลงใน repo เพื่อดูด secret ของ CI/CD โทเคนเผยแพร่แพ็กเกจ และรหัสผ่านที่ฝังอยู่ในซอร์สโค้ด แคมเปญนี้ถูกเปิดเผยครั้งแรกเมื่อกันยายน 2568 และกลับมาโหมหนักในเดือนตุลาคม 2569 (2026/10/075 , 2026/10/180 ) ล่าสุดบริษัท GitGuardian รายงานเมื่อ 27 ตุลาคมว่า ระหว่างวันที่ 13-21 ตุลาคม ผู้โจมตี push 72,000 commit เข้า repo สาธารณะ 23,000 แห่ง ในจำนวนนี้ 8,000 แห่งเป็นเป้าใหม่ และส่ง payload ต่างกัน 5 แบบตามชนิดเครื่องที่รันเวิร์กโฟลว์ (runner)

ข่าวดี คือ GitHub ตรวจพบและสกัดไม่ให้เวิร์กโฟลว์อันตรายทำงานได้ ระลอกนี้จึงแทบล้มเหลวทั้งหมด ข่าวร้าย คือ ผู้โจมตียังเข้าถึงบัญชีที่ยึดไว้ได้เกือบ 1,800 บัญชี ส่วนใหญ่เป็นบัญชีเดิมที่ใช้ในระลอก 8 ตุลาคม แปลว่าโทเคนที่ถูกขโมยยังไม่ถูกเพิกถอน และ payload ชุดใหม่ชี้ว่าผู้โจมตีกำลังขยับไปยังเครื่องของนักพัฒนาและบัญชีคลาวด์ ซึ่งมีด่านป้องกันระดับแพลตฟอร์มน้อยกว่า เจ้าของ repo ที่เคยโดนควรลบไฟล์ตามรายการ IoC ทุก branch เพิกถอนโทเคน และหมุนเวียน secret ทั้งหมดทันที

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

เว็บไซต์ Dark Reading รายงานเมื่อวันที่ 27 ตุลาคม 2569 ว่าคลื่นการโจมตีระลอกใหม่ของ GhostAction ล้มเหลวเป็นส่วนใหญ่ แต่ผู้อยู่เบื้องหลังยังอยู่ในตำแหน่งที่ก่อปัญหาต่อได้ ข้อมูลหลักมาจากงานวิจัยของ GitGuardian ที่เผยแพร่ในวันเดียวกัน

ไทม์ไลน์ของเดือนตุลาคมมี 3 ช่วง ช่วงแรกวันที่ 8-12 ตุลาคม ผู้โจมตี push เวิร์กโฟลว์ security-audit.yml เข้า repo ราว 30,000 แห่งผ่านบัญชีที่ยึดไว้ ช่วงที่สองวันที่ 13-21 ตุลาคม เป็นระลอกที่ GitGuardian รายงานล่าสุด และช่วงที่สามวันที่ 22-26 ตุลาคม ผู้โจมตีเพิ่ม loader แบบ PolinRider ลงใน repo ที่เคยโดน GhostAction ไปแล้ว

ด้านนาย Gaetan Ferry นักวิจัยของ GitGuardian ระบุว่าผู้โจมตีถือบัญชีที่ยึดไว้ 1,792 บัญชี โดย 1,382 บัญชีเคยถูกใช้แล้วเมื่อ 8 ตุลาคม จึงสรุปว่าโทเคนเดิมที่ถูกขโมยยังใช้งานได้ เขาประเมินว่าฝั่งเวิร์กโฟลว์อันตรายไม่ได้ผลเลย ใน payload ทั้ง 5 แบบ มีเพียง stealer ฝั่งเครื่องนักพัฒนาแบบ PolinRider ที่มีโอกาสทำงานสำเร็จ แต่ GitGuardian ไม่มีหลักฐานว่ามันได้ทำงานจริง

ส่วนนาง Jenn Gile ผู้ร่วมก่อตั้ง OpenSourceMalware ซึ่งติดตาม GhostAction และพบร่องรอยการลอกแบบ PolinRider ก่อนหน้านี้ มองว่าสิ่งที่เห็นเป็นการเลียนแบบมากกว่าการพัฒนาขึ้น เทคนิคฟอนต์ปลอมลอกมาจากแคมเปญ PolinRider ของเกาหลีเหนือที่ใช้มาเกือบตลอดปี 2569 (2026/07/049 ) ส่วน payload หลายแบบเป็นเพียงรูปแบบต่างของแนวคิดเดิม เธอพบเวิร์กโฟลว์ 5 รุ่นภายในราว 10 วันใน repo เดียว และมองว่าน่าจะมี LLM ช่วยผู้โจมตีทดลองรุ่นต่าง ๆ

ข้อจำกัดของหลักฐาน คือ GitGuardian ยังประเมินไม่ได้ว่า GhostAction กับ PolinRider เกี่ยวข้องกันหรือไม่ สมมติฐานที่เป็นไปได้ คือ ผู้โจมตีลอก launcher ของ PolinRider ที่เผยแพร่สาธารณะมาใช้กับกลุ่มเหยื่อที่ทับซ้อนกัน

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

ยึดบัญชีแล้วฝังเวิร์กโฟลว์ — เวิร์กโฟลว์ คือ ไฟล์ที่บอก GitHub Actions ว่าต้องรันโค้ดอะไรเมื่อเกิดเหตุการณ์ เช่น มีการ push commit หรือเปิด pull request GitHub เชื่อใจไฟล์เหล่านี้สูงตามการออกแบบ เมื่อผู้โจมตีใช้บัญชีที่ยึดไว้ push เวิร์กโฟลว์อันตรายเข้า repo โค้ดนั้นจะรันพร้อมสิทธิ์อ่าน secret ของ repo ทันที secret ที่ได้มาจึงนำไปเจาะ repo ระบบ CI/CD และคลาวด์อื่นต่อเป็นทอด ๆ

payload 5 แบบตามชนิด runner — ระลอกนี้ผู้โจมตีเลือก payload ตามว่า repo รันบน runner ของ GitHub หรือ runner ที่องค์กรตั้งเอง (self-hosted)

  • seven workflows ค้นหา credential รวมถึง API key ของผู้ให้บริการ AI ใน repo และ wiki
  • security-audit.yml รุ่นเดิมจากระลอกก่อน ค้นหา credential ในซอร์สโค้ดและประวัติ git
  • payload สำหรับ self-hosted runner เล็งเครื่อง CI ที่อยู่ในเครือข่ายขององค์กรเอง
  • payload ขอโทเคน OIDC สั่งให้ GitHub ออกโทเคน OIDC แล้วใช้สวมบทบาท (assume role) ใน AWS เพื่อเข้าบัญชีคลาวด์โดยตรง
  • font stealer ติดตั้ง stealer ที่เขียนด้วย Node.js บนเครื่องนักพัฒนา โดยพรางเป็น task ของ VS Code ที่รันเมื่อเปิดโฟลเดอร์ เทคนิคนี้ลอกมาจาก PolinRider

ทำไมระลอกนี้ล้ม แต่ยังน่ากังวล — GitHub ตรวจจับและหยุดเวิร์กโฟลว์อันตรายก่อนรันได้ แต่ font stealer ไม่ได้พึ่ง GitHub Actions เลย มันรอให้นักพัฒนาโคลน repo แล้วเปิดด้วย VS Code บนเครื่องตัวเอง เช่นเดียวกับ payload OIDC ที่ชี้ว่าเป้าถัดไป คือ บัญชีคลาวด์ ทั้งสองทางอยู่นอกขอบเขตที่ GitHub ปกป้องได้ นาย Ferry คาดว่าจะมีระลอกใหม่พร้อม payload ที่ปรับแล้วในเร็ว ๆ นี้ เพราะผู้โจมตีรายนี้ใช้กลยุทธ์ลองให้พลาดเร็วแล้วปรับเร็วมาตลอด

ผลกระทบ

ผู้ที่ได้รับผลกระทบโดยตรง คือ เจ้าของบัญชี GitHub ที่ถูกยึด 1,792 บัญชี และเจ้าของ repo สาธารณะ 23,000 แห่งที่ถูก push commit อันตรายเข้าไปในระลอกนี้ ผู้ที่เสี่ยงทางอ้อม คือ นักพัฒนาที่โคลน repo เหล่านี้ไปเปิดบนเครื่อง และองค์กรที่ผูกบทบาท AWS ไว้กับ GitHub OIDC โดยกำหนดเงื่อนไขกว้างเกินไป

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

คำแนะนำ

  • ลบไฟล์อันตรายทุก branch — เจ้าของ repo ที่เคยโดนให้ค้นและลบไฟล์ตามรายการ IoC ในบล็อกของ GitGuardian ทุก branch ไม่ใช่เฉพาะ branch หลัก
  • เพิกถอนโทเคนทั้งหมดของบัญชีที่ถูกยึด — ทั้ง personal access token, OAuth app และ SSH key แล้วเปิด 2FA ใหม่ เพราะโทเคนเดิมยังถูกใช้ข้ามระลอก
  • หมุนเวียน secret ทุกตัวที่เกี่ยวข้อง — รวม credential ที่เคย commit ใน repo หรือประวัติ git, Actions secret และ credential ใน wiki
  • ตรวจ trust policy ของบทบาท AWS ที่ผูกกับ GitHub OIDC — จำกัด sub ให้ระบุ repo และ branch ชัดเจน และตรวจ CloudTrail หาการเรียก AssumeRoleWithWebIdentity ที่ผิดปกติ
  • ตรวจเครื่องนักพัฒนาที่เปิด repo ที่โดน — ดูไฟล์ .vscode/tasks.json ที่สั่งรันเมื่อเปิดโฟลเดอร์ และไฟล์ฟอนต์ที่มีโค้ดปน ถ้าพบให้ถือว่า credential บนเครื่องรั่วแล้ว
  • ระยะยาว — ใช้ fine-grained token ที่มีอายุสั้น ตั้ง branch protection และบังคับ review ไฟล์ใน .github/workflows/ และปิด automatic tasks ของ VS Code สำหรับโฟลเดอร์ที่ยังไม่เชื่อถือ (Workspace Trust)

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