Project Zero แจ้งเตือนช่องโหว่ใน GitHub Actions อาจนำมาใช้เพื่อทำการโจมตีแบบ Command Injection ได้

Felix Wilhelm จาก Google Project Zero เปิดเผยช่องโหว่ใหม่รหัส CVE-2020-15228 ใน Github Actions ที่ได้มีการแจ้งเตือนไปตั้งแต่ปลายเดือนกรกฎาคม โดยช่องโหว่ดังกล่าวเกิดจากการคำสั่งในกลุ่ม workflow commands ที่ทำให้ Actions runner สามารถรันคำสั่ง shell ใน runner machine ได้ ซึ่งทำให้ช่องโหว่นี้มีความเสี่ยงที่จะถูกโจมตีเพื่อทำ command injection

ช่องโหว่จริงๆ อยู่ที่วิธีการที่ Action runner ประมวลผล workflow commands โดยปกตินั้นหากต้องการเรียกใช้ workflow command เราจะทำการเรียกใช้โดยใช้คำสั่ง echo ของ Linux จากนั้นให้ใส่ workflow commands ที่ครอบด้วย marker ลงไป โดย marker แตกต่างกันตามเวอร์ชันของ Action runner เช่นหากเป็นรุ่นแรกนั้น marker คือตัวอักษร ## และสำหรับรุ่นที่ 2 จะมี marker คือ :: ตามตัวอย่างเช่น echo '::set-output name=SELECTED_COLOR::green'

Action runner จะมองหา workflow commands จาก STDOUT ของคำสั่ง echo หรือคำสั่งใดๆ ก็ตามและนำข้อมูลทั้งหมดไปรัน Felix ระบุว่ากระบวนการตรงนี้มีโอกาสที่สูงมากที่จะถูกทำ command injection หากภายใน echo นั้นมี untrusted code อยู่ หรือมีการรับข้อมูลจากผู้ใช้มารัน ผู้ไม่ประสงค์ดีสามารถทำการ inject ข้อมูลในส่วนนี้ จากนั้นใช้คำสั่งอย่าง set-env หรือ add-path เพื่อแก้ไข environment varible ของ runner machine ตอน workflow กำลังทำงานอยู่ได้

การจะโจมตีช่องโหว่ได้นั้นขึ้นอยู่กับว่ามีการรับ untrusted input เข้าไปประมวลผลใน workflow ในขั้นตอนใด ตัวอย่างซึ่ง Felix ยกมานั้นคือโครงการหนึ่งของ vscode ซึ่งนำ GitHub Actions มาใช้ในการกระจาย Issues ไปยังโครงการอื่นโดยมีการรับข้อมูลจาก Issues มา ผู้โจมตีสามารถทำการ inject คำสั่งผ่านการสร้าง Issues เพื่อโจมตีช่องโหว่นี้ได้

GitHub ใช้เวลาเกือบ 3 เดือนในการแก้ไขปัญหานี้แต่กลับไม่สามาถรปิดการใช้งานหรือแก้ไขช่องโหว่โดยตรงได้ GitHub จึงได้มีการออกคำแนะนำในการใช้งานเพื่อลดความเสี่ยงแทนที่ https://github.