
GhostAction เจาะผู้สร้าง pyxel ลบรหัสจากโค้ดแล้วก็ยังเสี่ยง
Socket รายงานว่า GhostAction ลามถึงคลังโค้ดหลายหมื่นแห่ง โดยใช้บัญชีผู้ดูแลที่ถูกยึดเพิ่มงานขโมยรหัสตั้งแต่ 7 ตุลาคม แปลว่าความเสี่ยงเกินโปรเจกต์ดัง และรวมบัญชีผู้สร้าง pyxel เครื่องมือทำเกมย้อนยุคด้วย Python (Socket) ข่าวนี้เกี่ยวกับทั้งคนฝึกเขียนเกมและทีมเล็กที่ส่งโปรแกรมให้คนอื่นใช้ เพราะรหัสที่เคยลบจากไฟล์แล้วก็ยังถูกค้นได้จากประวัติโค้ด (StepSecurity)
งานอันตรายใช้ชื่อ “Security Audit” หรือการตรวจความปลอดภัย แต่หน้าที่จริงคือเก็บข้อมูลลับส่งออกไป (The Hacker News) สำหรับคนเล่นเกมที่สร้างด้วย pyxel ต้องแยกเรื่องนี้ให้ชัด: ณ 9 ตุลาคม ยังไม่พบการปล่อยแพ็กเกจอันตรายจากข้อมูลรับรองการเผยแพร่ที่ถูกขโมยในรอบนี้ (Socket)
สรุป 30 วินาที: เกิดอะไรขึ้น
GitHub คือบริการเก็บโค้ดและทำงานร่วมกัน ส่วน repository หรือคลังโค้ดคือพื้นที่ของแต่ละโปรเจกต์ ในเหตุการณ์นี้ ผู้โจมตีใช้บัญชี Takashi Kitao ผู้สร้าง pyxel และ Henry Wu ผู้เขียน athenadriver เพิ่มงานอัตโนมัติอันตรายโดยใช้ชื่อเจ้าของบัญชีจริง (StepSecurity) จึงต้องตรวจเนื้อหาการเปลี่ยนแปลง แม้ชื่อผู้ส่งจะเป็นคนที่ทีมไว้ใจครับ
Carthage Electronics สรุปรอบบัญชีผู้ดูแลคู่นี้ไว้ที่ 345 คลังโค้ด แปลว่าเป็นจำนวนโปรเจกต์ในคลื่นที่ติดตามเฉพาะกลุ่มนั้น (Carthage Electronics หัวข้อ GhostAction) ส่วน Socket รายงานมากกว่า 500 บัญชีในขอบเขตกว้างกว่า แปลว่าเป็นจำนวนบัญชีที่เพิ่มงานอันตราย ไม่ใช่จำนวนโปรเจกต์ในรอบเดียวกัน (Socket) ห้ามเอาสองยอดนี้มาบวกหรือใช้แทนกัน
สิ่งใหม่คือการค้นข้อมูลลับในประวัติโค้ดทั้งหมดที่งานนั้นเข้าถึงได้ แทนที่จะเก็บเฉพาะข้อมูลลับของงานอัตโนมัติเหมือนรอบเดิม (StepSecurity) ข้อปฏิบัติจึงเปลี่ยนตาม: การลบไฟล์อันตรายหรือเปลี่ยนเฉพาะรหัสปัจจุบันยังไม่ครอบคลุม ต้องตรวจรหัสที่เคยบันทึกไว้ด้วย (Socket)
ทำไมเรื่องนี้เกี่ยวกับคุณ
ถ้าคุณเป็นนักเรียนหรือทำเกมเป็นงานอดิเรก โปรเจกต์ส่วนตัวก็อยู่ในขอบเขตที่ควรตรวจ Socket พบว่ารอบนี้ไปถึงคลังโค้ดที่เงียบมานาน ไม่ได้เลือกเฉพาะงานที่กำลังพัฒนา (Socket) ดังนั้นอย่าตัดโปรเจกต์เก่าออกจากรายการเพียงเพราะเปิดครั้งสุดท้ายตอนส่งการบ้าน
สำหรับทีมเล็ก PyPI คือแหล่งเผยแพร่ชุดโปรแกรม Python ให้คนอื่นติดตั้งไปใช้ รหัสหรือโทเคนเผยแพร่ คือข้อมูลที่ระบบใช้ยืนยันสิทธิ์ในการส่งโปรแกรมขึ้นบริการนั้น StepSecurity พบว่างานอันตรายของ pyxel เจาะจงข้อมูลรับรอง PyPI รวมถึงโทเคนเผยแพร่ของ crates.io ซึ่งเป็นแหล่งชุดโปรแกรมภาษา Rust และโทเคนบัญชี GitHub (StepSecurity) ความเสี่ยงจึงอาจตามไปถึงผู้ใช้โปรแกรม หากสิทธิ์เผยแพร่ถูกนำไปใช้ภายหลัง
คนทำงานทั่วไปอาจไม่ได้เขียน Python แต่ใช้โปรแกรมที่ทีมอื่นดูแลอยู่ นี่คือความเสี่ยงแบบ supply chain หรือการโจมตีผ่านผู้ผลิตและเครื่องมือที่คนปลายทางเชื่อใจ Socket อธิบายว่าข้อมูลรับรองที่ถูกขโมยอาจใช้ส่งโปรแกรมอันตรายภายใต้ชื่อแพ็กเกจเดิมได้ (Socket) นั่นเป็นความเป็นไปได้จากสิทธิ์ที่หลุด ไม่ใช่หลักฐานว่าเกมทุกเกมติดอันตรายแล้ว
สำหรับพ่อแม่หรือผู้เล่นเกม สิ่งที่ควรแยกคือ “บัญชีผู้สร้างถูกยึด” กับ “โปรแกรมที่ดาวน์โหลดมีอันตราย” Socket ยังไม่พบแพ็กเกจอันตรายจากเหตุการณ์นี้ ณ 9 ตุลาคม (Socket) แหล่งข้อมูลชุดนี้ไม่ได้ระบุจำนวนผู้ใช้ไทยที่ได้รับผลกระทบ จึงยังบอกไม่ได้ว่าอุปกรณ์ของคุณเกี่ยวข้องหรือไม่
ทำงานยังไง
GitHub Actions คือระบบทำงานอัตโนมัติให้โปรเจกต์ เช่น ตรวจโค้ดหรือเตรียมโปรแกรมเผยแพร่ ส่วน workflow คือชุดคำสั่งที่กำหนดว่างานนั้นทำอะไร ผู้โจมตีเพิ่ม workflow ปลอมลงคลังโค้ดโดยตรง และมันเริ่มทำงานเมื่อมีการส่งการเปลี่ยนแปลงเข้าโปรเจกต์ (Socket) ไม่จำเป็นต้องมีคนเปิดไฟล์อันตรายบนเครื่องตัวเองก่อน
Secrets คือข้อมูลลับที่เก็บไว้ให้ระบบอัตโนมัติใช้งาน เช่น รหัสบริการหรือโทเคนเผยแพร่ ส่วน API key คือรหัสที่ให้โปรแกรมเรียกใช้บริการแทนบัญชีเรา รอบนี้มีทั้งการเก็บ secrets ของ Actions และค้นรหัสบริการคลาวด์หรือ AI ในไฟล์กับประวัติโค้ด (The Hacker News) คลาวด์หมายถึงระบบคอมพิวเตอร์ที่ใช้ผ่านบริการออนไลน์ ไม่จำเป็นต้องอยู่บนเครื่องเรา
Git คือระบบบันทึกการเปลี่ยนแปลงของโค้ด แต่ละบันทึกเรียกว่า commit การลบรหัสในบันทึกใหม่ไม่ได้ทำให้ข้อความในบันทึกเก่าหายไปด้วย Socket ระบุว่างานอันตรายค้นประวัติของทั้งสายพัฒนาและจุดบันทึกรุ่นที่ยังเข้าถึงได้ จึงอาจเจอรหัสที่เจ้าของคิดว่าลบไปแล้ว (Socket) ลบจากหน้าปัจจุบันแล้ว ทำไมยังไม่จบ?
ลองนึกถึงสมุดจดงานที่บ้านครับ คุณเขียนรหัสไว้แล้วฉีกหน้านั้นทิ้ง แต่รอยกดปากกายังอยู่บนหน้าถัดไป คนที่พลิกดูทั้งเล่มอาจอ่านร่องรอยได้ ประวัติ Git ต่างจากสมุดตรงที่มันเก็บข้อความเก่าเป็นบันทึกจริง จึงไม่ต้องอาศัยการเดารอยกดเพื่อหารหัสที่เคยอยู่ในนั้น (StepSecurity)
StepSecurity ยกกรณีรหัสที่เคยบันทึกในปี 2019 แล้วลบวันถัดมา แปลว่าข้อมูลที่เก่าหลายปีก็ยังอยู่ในขอบเขตการค้นครั้งนี้ (StepSecurity) คำว่า “ค้นทั้งประวัติ” ไม่ได้ยืนยันว่ารหัสทุกชิ้นถูกค้นพบหรือยังใช้ได้ แต่หมายถึงการตรวจไฟล์ล่าสุดอย่างเดียวไม่พอจะประเมินความเสี่ยง (Socket)
จุดหักมุม: งานตรวจความปลอดภัยกลับเป็นตัวขโมยรหัส
แต่ชื่อคนที่ส่งโค้ดก็ไม่ได้ช่วยยืนยันความปลอดภัยในรอบนี้ StepSecurity พบว่าการเพิ่มงานอันตรายใช้ตัวตนของผู้ดูแลจริง และเข้ากิ่งหลักโดยไม่ผ่านข้อเสนอให้รีวิวก่อน (StepSecurity) ป้าย “ตรวจความปลอดภัย” จึงเป็นแค่ชื่อ ไม่ใช่ผลตรวจครับ
แต่มีกรณีที่ระบบอนุมัติหยุดมันได้จริง StepSecurity รายงานว่างานในคลังโค้ดหนึ่งค้างรออนุมัติ และการส่งข้อมูลลับออกไปไม่ได้ทำงาน (StepSecurity) จุดนี้ทำให้ข่าวไม่ได้มีแต่เรื่องรหัสหลุด ยังมีหลักฐานว่าการควบคุมก่อนรันช่วยลดความเสียหายได้
เรื่องเงิน / ผลกระทบ
Socket อธิบายว่ารหัสคลาวด์อาจเปิดทางเข้าถึงระบบประมวลผล พื้นที่เก็บข้อมูล และข้อมูลของบัญชี ส่วนรหัสบริการ AI อาจถูกนำไปใช้กับงานที่คิดค่าบริการ (Socket) สำหรับร้านเล็กหรือทีมรับงาน ความเสี่ยงจึงมีทั้งค่าใช้จ่ายและงานลูกค้า แต่แหล่งข้อมูลไม่ได้ระบุยอดความเสียหายเป็นเงินบาทหรือบิลของผู้ใช้ไทย
ผลกระทบขึ้นอยู่กับสิทธิ์ของรหัสแต่ละตัวด้วย Socket แยกรหัสสำหรับเผยแพร่โปรแกรมออกจากรหัสบริการอื่น เพราะอย่างแรกอาจใช้ส่งรุ่นอันตรายให้คนที่เชื่อใจโปรเจกต์เดิม (Socket) การตรวจจึงควรถามว่ารหัสนั้นทำอะไรได้ ไม่ใช่เพียงว่ามันเป็นข้อความยาวหน้าตาเหมือนรหัสผ่านหรือไม่
สำหรับทีมเผยแพร่ Python งานที่ต้องทำเพิ่มคือเพิกถอนสิทธิ์เก่า ออกรหัสใหม่ และตรวจประวัติการปล่อยแพ็กเกจ Socket แนะนำให้ตรวจรุ่นที่ไม่คาดคิดในช่วงเสี่ยง และเทียบไฟล์เผยแพร่กับสิ่งที่ทีมสร้างเอง (Socket) Carthage Electronics ยังแนะนำให้หยุดเผยแพร่จากคลังที่ได้รับผลกระทบจนกว่าจะทำความสะอาดเรียบร้อย (Carthage Electronics หัวข้อ GhostAction)
ขอบเขตงานอาจใหญ่กว่าบัญชีส่วนตัว ผู้ดูแลที่มีสิทธิ์เขียนในองค์กรสามารถทำให้โปรเจกต์ขององค์กรถูกเพิ่ม workflow ไปด้วย ตามกรณี athenadriver ที่ Socket วิเคราะห์ (Socket) ทีมจึงควรตรวจทุกพื้นที่ที่บัญชีนั้นมีสิทธิ์ รวมถึงสำเนาโปรเจกต์ที่เรียกว่า fork ไม่ใช่ตรวจเฉพาะงานที่เจ้าตัวเป็นเจ้าของ
ข้อมูลที่ยังไม่ชัด และจุดที่แหล่งข่าวพูดไม่ตรงกัน
ยอดคลังโค้ดในรอบผู้ดูแลคู่นี้ยังไม่ตรงกัน StepSecurity และ Carthage Electronics ระบุ 345 แห่ง แปลว่าเป็นยอดเฉพาะคลื่น pyxel กับ athenadriver ตามรายงานของแต่ละแหล่ง (StepSecurity, Carthage Electronics หัวข้อ GhostAction) แต่ Socket ระบุ 346 แห่ง แปลว่ารายงานนั้นนับรายการของสองบัญชีและคลัง athenadriver ของ Uber แยกไว้ด้วย (Socket) แหล่งเหล่านี้ไม่ได้อธิบายตรงกันว่าความต่างของยอดเกิดจากรายการใด จึงไม่ควรฟันธงแทนผู้ตรวจ
ยอดวงกว้างไม่ได้หักล้างยอดคลื่นย่อย Socket อัปเดตว่าพบมากกว่า 500 บัญชี แปลว่าเป็นจำนวนบัญชีที่เพิ่ม workflow ตั้งแต่ 7 ตุลาคมในวงกว้าง (Socket) The Hacker News รายงานยอดคลังโค้ดหลายหมื่นแห่งโดยอ้าง Socket แปลว่าเป็นจำนวนโปรเจกต์ในขอบเขตเดียวกับการอัปเดตนั้น ไม่ใช่การนับอิสระอีกชุด (The Hacker News) จึงต้องอ่านทั้งหน่วยนับและช่วงที่แต่ละรายงานครอบคลุม
วิธียึดบัญชียังไม่ได้รับการยืนยัน StepSecurity ประเมินว่าอาจมาจากโทเคนบัญชีที่รั่วผ่านบันทึกของโปรแกรมขโมยข้อมูล แต่ Socket ระบุว่าไม่ได้สังเกตเห็นขั้นตอนที่ผู้โจมตีได้ข้อมูลรับรองมา (StepSecurity, Socket) นี่เป็นข้อสันนิษฐานเรื่องทางเข้า ไม่ใช่หลักฐานว่าผู้ดูแลติดโปรแกรมขโมยข้อมูลแน่นอน
เสียงเตือนภัยและข้อจำกัดของหลักฐานต้องอยู่ด้วยกัน StepSecurity ยืนยันว่ามีงานใน athenadriver ส่งข้อมูลออกสำเร็จ และเตือนว่าข้อมูลรับรองที่ถูกเก็บอาจยังเสี่ยงจนกว่าจะเปลี่ยน (StepSecurity) ฝั่ง Socket ให้ข้อมูลที่ค้านข้อสรุปว่าแพ็กเกจถูกวางยาแล้ว: ณ 9 ตุลาคม ยังไม่พบรุ่นอันตรายบน PyPI หรือ crates.io จากเหตุการณ์นี้ (Socket) ไม่มีแหล่งใดในชุดข้อมูลนี้ปฏิเสธว่าการโจมตีเกิดขึ้น ความต่างอยู่ที่สิ่งซึ่งยืนยันได้กับสิ่งที่ยังไม่พบ
แหล่งข้อมูลยังไม่บอกว่ารหัสที่ค้นเจอทั้งหมดใช้ได้กี่ชิ้น หรือบัญชีผู้ใช้ไทยเกี่ยวข้องเท่าไร และไม่มีรายละเอียดว่าการเพิกถอนรหัสของทุกผู้เสียหายเสร็จครบแล้วหรือยัง การ “ยังไม่พบแพ็กเกจอันตราย” จึงมีขอบเขตเวลา ไม่ใช่ใบรับรองความปลอดภัยตลอดไป ตามคำเตือนของ StepSecurity (StepSecurity)
แล้วเราควรทำอะไร
คนทั่วไปหรือผู้เล่นเกมที่สร้างด้วย pyxel
- แยกสิ่งที่ยืนยันแล้วออกจากสิ่งที่ยังเป็นความเสี่ยง ณ 9 ตุลาคม Socket ยังไม่พบแพ็กเกจอันตรายจากรหัสเผยแพร่ที่ถูกขโมยในเหตุการณ์นี้ จึงอย่าสรุปจากข่าวบัญชีถูกยึดว่าเกมที่คุณมีเป็นอันตรายทันที (Socket)
- ถ้าคุณมีคลังโค้ดหรือสำเนาโปรเจกต์บน GitHub แม้ไม่ได้ดูแลทุกวัน ให้ตรวจการเพิ่มไฟล์งานอัตโนมัติที่ไม่คาดคิดด้วย The Hacker News แนะนำให้ตรวจ workflow อันตรายและสำเนาของคลังที่ติดเหตุการณ์ (The Hacker News)
นักเรียน นักพัฒนาเกม และคนทำ Python เป็นงานอดิเรก
- ตรวจไฟล์งานอัตโนมัติและบันทึกการเปลี่ยนแปลงย้อนหลัง มองหางานที่อ้างว่าตรวจความปลอดภัยแต่คุณไม่ได้เพิ่มหรือรีวิว ตรวจสำเนาและโปรเจกต์ที่เก็บถาวรด้วย ตามคำแนะนำในหัวข้อ GhostAction ของ Carthage Electronics (Carthage Electronics)
- ถ้าเจองานต้องสงสัย ให้ตรวจประวัติการรันและจัดการเป็นเหตุบัญชีถูกยึด Socket แนะนำให้เพิกถอนการเข้าใช้งานและสิทธิ์ที่เกี่ยวข้อง พร้อมเปิดการยืนยันตัวตนหลายขั้น ซึ่งใช้หลักฐานอีกอย่างนอกเหนือจากรหัสผ่าน โดยเลือกวิธีต้านการหลอกขโมยข้อมูลได้ (Socket)
- ตรวจข้อมูลลับทั้งในไฟล์ปัจจุบันและประวัติโค้ด เพิกถอนหรือเปลี่ยนทุกรหัสที่เคยบันทึกไว้ตามคำแนะนำของ Socket การลบบรรทัดเก่าอย่างเดียวไม่ทำให้รหัสเดิมเลิกใช้ได้ (Socket)
- เปิดระบบตรวจจับข้อมูลลับของ GitHub และการป้องกันก่อนส่งโค้ด พร้อมตรวจ workflow ก่อนเปิด Actions บนสำเนาที่มาจากคลังได้รับผลกระทบ Socket แนะนำทั้งสองอย่างเพื่อลดโอกาสรับงานอันตรายเข้ามา (Socket)
ทีม IT และทีมเล็กที่เผยแพร่แพ็กเกจ
- ทำรายการทุกคลังที่บัญชีผู้ดูแลมีสิทธิ์เขียน รวมพื้นที่องค์กรและสำเนา อย่าใช้เพียงรายการโปรเจกต์ที่จำได้ เพราะ Socket แนะนำให้ไล่ตามสิทธิ์ของบัญชีจริง (Socket)
- เพิกถอนข้อมูลรับรองบัญชีที่ถูกยึดก่อน แล้วเปลี่ยน secrets ของ Actions รวมถึงรหัสบริการที่เคยอยู่ในประวัติ ลบ workflow อันตรายจากทุกสายพัฒนาและตรวจสำเนาตามคำแนะนำของ Carthage Electronics (Carthage Electronics หัวข้อ GhostAction)
- ตรวจประวัติการเผยแพร่บน PyPI และบริการอื่นที่ทีมใช้ หารุ่นที่ไม่คาดคิดและเทียบสิ่งที่เผยแพร่กับงานสร้างของทีม ตามคำแนะนำของ Socket (Socket) หยุดเผยแพร่จากคลังที่ได้รับผลกระทบจนตรวจเสร็จ ตามข้อเสนอของ Carthage Electronics (Carthage Electronics)
- กำหนดให้การแก้ workflow ผ่านการรีวิว และให้การรันต้องได้รับอนุมัติในกรณีที่ทำได้ StepSecurity ยกการรออนุมัติเป็นมาตรการที่หยุดการส่งข้อมูลออกได้จริงในรอบนี้ (StepSecurity) ทีมที่ดูแลระบบรันงานควรจำกัดปลายทางเครือข่ายให้เหลือเฉพาะบริการที่จำเป็นตามคำแนะนำเดียวกัน
ผมมองว่า…
ผมมองว่า เรื่องนี้ไม่ใช่แค่การลบรหัสออกจากไฟล์ แต่คือการถอนสิทธิ์ของรหัสที่เคยหลุดไปแล้วทั้งหมด ถ้าทีมตรวจเฉพาะสิ่งที่เห็นวันนี้ ก็อาจตกหล่นรหัสในบันทึกเก่า คำเตือนของ StepSecurity ว่าการเปลี่ยนเฉพาะ secrets ปัจจุบันไม่ครอบคลุมการค้นประวัติ เป็นเหตุผลที่ต้องขยายรายการตรวจให้กว้างขึ้น (StepSecurity)
ผมมองว่า คนฝึก Python ไม่จำเป็นต้องเลิกแบ่งปันงานเพราะข่าวนี้ แต่ควรทำให้การดูแลสิทธิ์เป็นส่วนหนึ่งของการทำโปรเจกต์ สำหรับทีมเล็ก การระบุคนรีวิว workflow และเจ้าของรหัสแต่ละตัวน่าจะช่วยให้ลงมือแก้ได้ตรงจุด หลักฐานเรื่องงานที่หยุดรออนุมัติแสดงว่า กติกาที่ทำงานจริงมีค่ากว่าชื่อไฟล์ที่ฟังดูปลอดภัย (StepSecurity)
ปิดท้าย: สิ่งที่ต้องจับตา
ความปลอดภัยของโปรเจกต์ต้องครอบคลุมสิทธิ์และประวัติที่ยังเข้าถึงได้ด้วย เรื่องแรกที่ควรติดตามคือการเพิกถอนข้อมูลรับรองเผยแพร่ของโปรเจกต์ที่ได้รับผลกระทบ เพราะ StepSecurity ระบุว่าช่วงเสี่ยงยังเปิดอยู่จนกว่าจะเปลี่ยนรหัสเหล่านั้น (StepSecurity) อีกเรื่องคือรายงานแพ็กเกจอันตรายหลังจุดตรวจ ณ 9 ตุลาคม ซึ่ง Socket ยังไม่พบในเวลานั้น แต่แหล่งข้อมูลไม่ได้ให้วันประกาศผลตรวจรอบถัดไป (Socket)
ในโปรเจกต์ Python ของคุณ รหัสที่เคยเผลอบันทึกลงโค้ดถูกเพิกถอนแล้ว หรือเพียงลบออกจากไฟล์ครับ?
Recap
- เกิดอะไรขึ้น: บัญชีผู้ดูแลถูกใช้เพิ่ม workflow ตรวจความปลอดภัยปลอม รวมบัญชีผู้สร้าง pyxel ตาม StepSecurity
- ตัวเลขที่ต้องจำ: Carthage Electronics รายงาน 345 คลังในคลื่นผู้ดูแลคู่นี้ แปลว่าเป็นขอบเขตเฉพาะรอบ ไม่ใช่ยอดทั้งหมด (Carthage Electronics หัวข้อ GhostAction)
- ใครรายงานต่าง: Socket นับ 346 คลังในรอบย่อย แปลว่ามียอดต่างจากรายงานข้างต้น และรายงานวงกว้างแยกจากรอบนี้ (Socket)
- ยังไม่รู้อะไร: วิธีได้ข้อมูลรับรองบัญชียังไม่ยืนยัน และแหล่งข้อมูลไม่ระบุจำนวนผู้เสียหายในไทย
- กระทบคุณยังไง: ผู้ดูแลต้องตรวจรหัสเก่าและสิทธิ์เผยแพร่ ส่วนผู้เล่นควรจำว่า ณ 9 ตุลาคมยังไม่พบแพ็กเกจอันตรายจากเหตุการณ์นี้ (Socket)
- ทำและจับตา: ตรวจ workflow เพิกถอนรหัสที่เคยบันทึก ตั้งการอนุมัติ และติดตามประวัติแพ็กเกจ ตาม StepSecurity และ Socket
- แหล่งอ้างอิง: 1 — StepSecurity, 2 — Socket, 3 — The Hacker News, 4 — Carthage Electronics เฉพาะหัวข้อ GhostAction