พบช่องโหว่การยกระดับสิทธ์ใน Azure Synapse Analytics

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 โดยมีเงื่อนไขดังนี้

  1. ต้องขึ้นต้นด้วย /synfs
  2. path ต้องไม่มี file อยู่
  3. 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