ข้ามไปเนื้อหาหลัก

เจาะลึกความปลอดภัย CI: บทเรียนจากการส่งมอบ ego-lite

ถอดบทเรียนความปลอดภัย CI จาก Maya Patel เมื่อการใช้แท็ก action ไม่ตรึง SHA และปัญหาคิวรันงานถล่มทำลายโควต้าจนหมดเกลี้ยง

เรียบเรียงโดย AI
Inewgen
23 Oct 2026ที่มา: Dev.to3 นาทีอ่าน (0 ครั้ง)
แชร์
เจาะลึกความปลอดภัย CI: บทเรียนจากการส่งมอบ ego-lite

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

ขนาดตัวอักษร
  • การใช้ Action แบบระบุแท็กแทน SHA เสี่ยงโดนแอบขโมย Token ภายใน 90 นาที
  • ปัญหา Concurrency เผาโควต้า Linux Runner 3 สัปดาห์หมดใน 6 ชั่วโมง
  • แบ่งไปป์ไลน์เป็น 2 โซนระหว่าง PR Gate (ไม่น่าเชื่อถือ) และ Publish Stage (เชื่อถือได้)
  • การทำ Smoke Test ด้วย Agent Relay จริงช่วยแก้ปัญหาหน้าจอเบราว์เซอร์เปล่าที่ Unit Test มองไม่เห็น

Maya Patel นักพัฒนาซอฟต์แวร์ได้เผยแพร่บทความบน Dev.to สะท้อนเหตุการณ์ความปลอดภัยครั้งสำคัญในไตรมาสเดียวกันที่สร้างความเสียหายเกินกว่ารายงานหลังเกิดเหตุจะประเมินไว้ โดยปัญหาแรกเกิดขึ้นจากการใช้ Action แบบไม่ตรึงค่า SHA เช่น uses: some-org/setup-toolchain@v1 ซึ่งเป็นเพียงแท็กธรรมดา เมื่อแท็กดังกล่าวถูกขยับเปลี่ยนในวันอังคาร ส่งผลให้สคริปต์ติดตั้งเบื้องหลังอ่านค่า $GITHUB_TOKEN แล้วแอบพุชคอมมิตไปยังสาขาที่ทีมงานไม่ได้เฝ้าระวัง ทีมงานใช้เวลาถึง 90 นาทีจึงจับผิดได้เนื่องจากมีผู้รีวิวสังเกตเห็นขั้นตอนการสร้าง (Build Step) ที่เปลี่ยนชื่อไปในล็อก

ปัญหาที่สองคือภาวะ Concurrency Fork Bomb เมื่อการพุชโค้ดทุกครั้งไปยัง PR Branch ไปกระตุ้น Full Matrix ทั้งหมดโดยไม่มีการยกเลิกงานเดิม และลูปการบังคับพุช (Force-push) ของผู้ร่วมContributor รายหนึ่งทำให้มีคิวงานค้างเติ่งถึง 1,100 งานข้ามคืน ส่งผลให้โควต้า Linux Runner ที่มีอยู่ถูกเผาผลาญไปถึง 3 สัปดาห์ภายในเวลาเพียง 6 ชั่วโมงเท่านั้น โดยที่ตัวบิลด์ไม่ได้พัง แต่กลับสร้างภาระหนักอึ้งให้กับระบบ

90นาทีที่ใช้ตรวจจับการแอบพุชคอมมิตจาก Action ที่ไม่ตรึง SHA
1,100คิวงานที่ถูกสร้างข้ามคืนจากปัญหา Concurrency Fork Bomb
3สัปดาห์ของโควต้า Linux Runner ที่ถูกเผาผลาญใน 6 ชั่วโมง

บทเรียนเหล่านี้เกิดขึ้นระหว่างการผสาน citrolabs/ego-lite ซึ่งเป็นทูล킷ที่ส่งมอบเซสชันเบราว์เซอร์ที่ล็อกอินแล้วให้กับกระบวนการของ Agent โดยผู้เขียนระบุว่าทางออกไม่ใช่การเพิ่มแฟล็กในไฟล์ YAML แต่เป็นการแบ่งไปป์ไลน์ออกเป็นโซนที่มีกฎเกณฑ์ชัดเจน ได้แก่ PR Gate สำหรับอินพุตที่ไม่น่าเชื่อถือ (สิทธิ์แบบอ่านอย่างเดียว ไม่มีซีเคร็ต ยกเลิกงานดุดัน และตรึง Action ทุกตัวด้วย SHA พร้อมระบุเวอร์ชันในคอมเมนต์) และ Publish Stage สำหรับฝั่งที่เชื่อถือได้ (ทำงานเฉพาะบน Branch หลัก สืบทอดซีเคร็ต และไม่มีการยกเลิกกลางคัน)

software developer working on laptop in modern office

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

นอกจากการแบ่งโซนแล้ว การทำ Smoke Test ยังมีความสำคัญอย่างยิ่ง เนื่องจากหน้าที่ของ ego-lite คือการส่งมอบเซสชันเบราว์เซอร์ให้อージェントกระบวนการทำงาน ซึ่งความเสียหายส่วนใหญ่มักแสดงผลในรูปแบบเบราว์เซอร์เปิดขึ้นมาแต่ Agent ได้หน้าจอเปล่า (Blank Page) ซึ่ง Unit Test ทั่วไปไม่สามารถตรวจจับได้ การชี้ BaseURL ไปยัง Staging Relay จึงช่วยจับข้อผิดพลาดด้านการกำหนดค่า (Config Regressions) ได้อย่างแม่นยำ

ไม่อยากพลาดข่าวใหม่?

สมัครรับสรุปข่าวสารใหม่ทางอีเมล ไม่บ่อยจนรำคาญ

โฆษณา

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

ท้ายที่สุด ความท้าทายที่ยังคงหลงเหลืออยู่คือการตัดสินใจว่าจะอนุมัติคำขอพุชอัตโนมัติ (Auto-merge) สำหรับ Dependabot เพื่ออัปเดต SHA หรือจะยังคงใช้มนุษย์ตรวจสอบเช่นเดิม แม้การรีวิวด้วยมือจะปลอดภัยกว่าแต่ก็กลายเป็นคอขวดเมื่อต้องจัดการกับ Action จำนวนมากในแต่ละสัปดาห์

ที่มา: Dev.to

ความคิดเห็น

แสดงความคิดเห็น
0/2000

พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้