Azure Synapse Analytics เป็นบริการที่ใช้สำหรับวิเคราะห์ และประมวลผลข้อมูล โดยใช้รันไทม์ประเภทต่าง ๆ เช่น SQL pools, Apache Spark, Data Explorer และอื่น ๆ
วิธีหนึ่งที่ใช้ในการประมวลผลคือการตั้งค่า Apache Spark pool ร่วมกับ Python, .NET, Scala และ SQL Notebooks, custom package management และ development tools ต่าง ๆ
นักวิจัยจาก Orca จึงลองเรียกใช้ Python reverse shell ใน Apache Spark pool และเรียกใช้ pool ที่ชื่อว่า "systemreservedpool-dataflow" ซึ่งปกติจะใช้เฉพาะในการ debugging "Data flows" ใน Synapse
เมื่อนักวิจัยลองตรวจสอบ reverse shell ใน reserved Spark pool นี้ก็พบว่า จะเป็นการสั่งงานโดย user ที่ชื่อ “trusted-service-user” แต่ไม่ใช่สิทธิ์ root และไม่มีสิทธ์อ่าน credentials ที่เครื่อง
นักวิจัยพบว่า trusted-service-user สามารถ run script /usr/lib/notebookutils/bin/filesharemount.sh ด้วยสิทธิ์ root โดยที่ filesharemount.sh จะมีการตรวจสอบ path ที่ mount โดยมีเงื่อนไขดังนี้
- ต้องขึ้นต้นด้วย /synfs
- path ต้องไม่มี file อยู่
- path ต้องเป็น empty directory
นักวิจัยจึงใช้ symlink race condition bypass การตรวจสอบ path ใน filesharemount.sh โดยการส่ง path /synfs/mysymlink ไปหลังจากที่ script ตรวจสอบ path
แล้วสร้าง symlink /synfs/mysymlink ชี้ไปที่ /usr/lib/notebookutils/bin/ เมื่อ script mount path แล้วจึงเปลี่ยน ownership ของ path ที่ mount ทำให้ user สามารถแก้ไข filesharemount.sh ได้
หลังจากที่ได้สิทธิ root มาแล้วนักวิจัยจึงสามารถ requests Instance Metadata Service เพื่อดูข้อมูล Instance credentials และ file credentials อื่น ๆ ในเครื่องได้
ปัจจุบัน Microsoft ดำเนินการแก้ไขช่องโหว่ดังกล่าวไปเรียบร้อยแล้ว ผู้ใช้งาน Azure ไม่ต้องดำเนินการใด ๆ เพิ่มเติม
ที่มา : orca.security
