พบช่องโหว่ใน Azure ทำให้สามารถเข้าถึงเครื่อง host ได้ผ่าน serverless function

สรุปรายละเอียดของช่องโหว่

Privilege escape เป็นสิทธ์ Root ได้ใน container
Container มีสิทธ์ CAP_SYS_ADMIN ซึ่งไม่เป็นไปตาม best practice จึงทำให้สามารถเข้าถึงเครื่อง Host ได้
Host เป็น single-tenant จึงทำให้สามารถเข้าถึงได้แค่ container ใน tenant

Escalating Privileges

นักวิจัยจาก Unit42 พบว่าใน container ของ Azure function จะมี service "init" ที่สามารถ Mount disk ใน container ได้ แต่ว่าตัว service มีช่องโหว่เรื่องการ validate input นักวิจัยจึงใช้ช่องโหว่นี้สร้าง shadow ไฟล์ขึ้นมาโดยใช้ password ของตัวเองแล้ว mount ไปที่ /etc/shadow ทำให้สามารถเปลี่ยน user เป็น root ได้โดยใช้ password ที่ถูกสร้างขึ้นมาใหม่

Escape to Host

เนื่องจาก container ของ Azure function มีการกำหนดสิทธิ์ Linux Capabilities มาไม่ได้ตามมาตรฐาน (Best Practice) ทำให้มีสิทธิ์หลายอย่างเข้าเงื่อนไขของ Container escape technique ที่ชื่อว่า "notify_on_release escape" ดังนี้

มีสิทธ์ root
มี SYS_ADMIN capability
สามารถใช้ mount syscall
container ต้องอ่าน และเขียน cgroup v1 virtual filesystem ได้

หลังจากที่นักวิจัยเข้าถึงเครื่อง Host ได้แล้ว พบว่าเครื่อง Host เป็น HyperV ที่จะถูกใช้งานแค่ tenant เดียว จึงทำให้ไม่มีความเสียงที่จะเข้าถึง Container ที่อยู่ใน tenant อื่นได้ นอกเหนือว่าจะมีช่องโหว่ที่ตัว HyperV นักวิจัยจึงหยุดการทดสอบ และรายงานช่องโหว่ไปที่ Microsoft

วิธีการแก้ไข 

Microsoft ได้ patch service ที่ใช้ในการ mount โดยเพิ่มการ Validate Input โดยที่ลูกค้าไม่ต้องดำเนินการใด ๆ เพิ่มเติม

ที่มา : unit42