ช่องโหว่ใน Docker ที่ช่วยให้คุณหลบหนีจากคอนเทนเนอร์ได้

ในชุดเครื่องมือสำหรับการจัดการ Linux Docker Containers ที่แยกออกมา ระบุ ช่องโหว่ (CVE-2018-15664) ซึ่งภายใต้สถานการณ์บางอย่าง จะทำให้คุณสามารถเข้าถึงสภาพแวดล้อมโฮสต์จากคอนเทนเนอร์ได้ หากคุณสามารถเปิดอิมเมจของคุณบนระบบหรือสามารถเข้าถึงคอนเทนเนอร์ที่ทำงานอยู่ได้ ปัญหาปรากฏใน Docker ทุกเวอร์ชันและยังคงไม่ได้รับการแก้ไข (เสนอ แต่ยังไม่ได้รับการยอมรับ แก้ไขซึ่งใช้ระบบกันสะเทือนของคอนเทนเนอร์ขณะดำเนินการกับ FS)

ช่องโหว่นี้ทำให้สามารถแตกไฟล์จากคอนเทนเนอร์ไปยังส่วนใดส่วนหนึ่งของระบบไฟล์ของระบบโฮสต์ได้ตามอำเภอใจ เมื่อรันคำสั่ง “docker cp” การแยกไฟล์จะดำเนินการโดยใช้สิทธิ์รูท ซึ่งทำให้สามารถอ่านหรือเขียนไฟล์ใด ๆ ในสภาพแวดล้อมของโฮสต์ได้ ซึ่งเพียงพอสำหรับการควบคุมระบบโฮสต์ (ตัวอย่างเช่น คุณสามารถเขียนทับ /etc/shadow ได้)

การโจมตีสามารถทำได้เฉพาะเมื่อผู้ดูแลระบบดำเนินการคำสั่ง “docker cp” เพื่อคัดลอกไฟล์ไปยังหรือจากคอนเทนเนอร์ ดังนั้นผู้โจมตีจำเป็นต้องโน้มน้าวผู้ดูแลระบบ Docker ถึงความจำเป็นในการดำเนินการนี้และคาดการณ์เส้นทางที่ใช้ในการคัดลอก ในทางกลับกัน การโจมตีสามารถดำเนินการได้ เช่น เมื่อบริการคลาวด์จัดเตรียมเครื่องมือสำหรับการคัดลอกไฟล์การกำหนดค่าลงในคอนเทนเนอร์ ซึ่งสร้างขึ้นโดยใช้คำสั่ง “docker cp”

ปัญหาเกิดจากข้อบกพร่องในการใช้งานฟังก์ชัน ติดตาม SymlinkInScopeซึ่งคำนวณเส้นทางสัมบูรณ์ในระบบไฟล์หลักตามเส้นทางสัมพัทธ์ โดยคำนึงถึงตำแหน่งของคอนเทนเนอร์ ขณะดำเนินการคำสั่ง "docker cp" ระยะสั้น สภาพการแข่งขันซึ่งเส้นทางได้รับการตรวจสอบแล้ว แต่ยังไม่ได้ดำเนินการ เนื่องจากการคัดลอกจะดำเนินการในบริบทของระบบไฟล์หลักของระบบโฮสต์ ภายในระยะเวลาที่กำหนด คุณสามารถจัดการเพื่อแทนที่ลิงก์ด้วยเส้นทางอื่น และเริ่มการคัดลอกข้อมูลไปยังตำแหน่งที่ต้องการในระบบไฟล์ภายนอก คอนเทนเนอร์.

เนื่องจากกรอบเวลาสำหรับสภาพการแข่งขันที่จะเกิดขึ้นนั้นมีจำกัดอย่างมากในการเตรียมตัว ใช้ประโยชน์จากต้นแบบ เมื่อดำเนินการคัดลอกจากคอนเทนเนอร์ อาจเป็นไปได้ที่จะบรรลุการโจมตีที่ประสบความสำเร็จในเวลาน้อยกว่า 1% ของกรณีเมื่อแทนที่ลิงก์สัญลักษณ์ในเส้นทางที่ใช้ในการคัดลอกแบบวนรอบ (การโจมตีที่ประสบความสำเร็จเกิดขึ้นหลังจากพยายามประมาณ 10 วินาที เพื่อคัดลอกไฟล์อย่างต่อเนื่องในวงด้วยคำสั่ง "docker cp")

ด้วยการดำเนินการคัดลอกลงในคอนเทนเนอร์ คุณสามารถโจมตีระบบโฮสต์ซ้ำๆ ได้โดยเขียนทับไฟล์ได้ด้วยการวนซ้ำเพียงไม่กี่ครั้ง ความเป็นไปได้ของการโจมตีเกิดจากการที่เมื่อคัดลอกลงในคอนเทนเนอร์จะใช้แนวคิด "chrootarchive" ตามที่กระบวนการ archive.go แยกไฟล์เก็บถาวรไม่อยู่ใน chroot ของรูทคอนเทนเนอร์ แต่อยู่ใน chroot ของ ไดเร็กทอรีพาเรนต์ของเส้นทางเป้าหมาย ซึ่งควบคุมโดยผู้โจมตี และไม่ได้หยุดการดำเนินการของคอนเทนเนอร์ (chroot ถูกใช้เป็นสัญญาณในการใช้ประโยชน์จากสภาวะการแข่งขัน)

ที่มา: opennet.ru

เพิ่มความคิดเห็น