ในชุดเครื่องมือสำหรับการจัดการ Linux Docker Containers ที่แยกออกมา ช่องโหว่ () ซึ่งภายใต้สถานการณ์บางอย่าง จะทำให้คุณสามารถเข้าถึงสภาพแวดล้อมโฮสต์จากคอนเทนเนอร์ได้ หากคุณสามารถเปิดอิมเมจของคุณบนระบบหรือสามารถเข้าถึงคอนเทนเนอร์ที่ทำงานอยู่ได้ ปัญหาปรากฏใน Docker ทุกเวอร์ชันและยังคงไม่ได้รับการแก้ไข (เสนอ แต่ยังไม่ได้รับการยอมรับ ซึ่งใช้ระบบกันสะเทือนของคอนเทนเนอร์ขณะดำเนินการกับ FS)
ช่องโหว่นี้ทำให้สามารถแตกไฟล์จากคอนเทนเนอร์ไปยังส่วนใดส่วนหนึ่งของระบบไฟล์ของระบบโฮสต์ได้ตามอำเภอใจ เมื่อรันคำสั่ง “docker cp” การแยกไฟล์จะดำเนินการโดยใช้สิทธิ์รูท ซึ่งทำให้สามารถอ่านหรือเขียนไฟล์ใด ๆ ในสภาพแวดล้อมของโฮสต์ได้ ซึ่งเพียงพอสำหรับการควบคุมระบบโฮสต์ (ตัวอย่างเช่น คุณสามารถเขียนทับ /etc/shadow ได้)
การโจมตีสามารถทำได้เฉพาะเมื่อผู้ดูแลระบบดำเนินการคำสั่ง “docker cp” เพื่อคัดลอกไฟล์ไปยังหรือจากคอนเทนเนอร์ ดังนั้นผู้โจมตีจำเป็นต้องโน้มน้าวผู้ดูแลระบบ Docker ถึงความจำเป็นในการดำเนินการนี้และคาดการณ์เส้นทางที่ใช้ในการคัดลอก ในทางกลับกัน การโจมตีสามารถดำเนินการได้ เช่น เมื่อบริการคลาวด์จัดเตรียมเครื่องมือสำหรับการคัดลอกไฟล์การกำหนดค่าลงในคอนเทนเนอร์ ซึ่งสร้างขึ้นโดยใช้คำสั่ง “docker cp”
ปัญหาเกิดจากข้อบกพร่องในการใช้งานฟังก์ชัน ซึ่งคำนวณเส้นทางสัมบูรณ์ในระบบไฟล์หลักตามเส้นทางสัมพัทธ์ โดยคำนึงถึงตำแหน่งของคอนเทนเนอร์ ขณะดำเนินการคำสั่ง "docker cp" ระยะสั้น ซึ่งเส้นทางได้รับการตรวจสอบแล้ว แต่ยังไม่ได้ดำเนินการ เนื่องจากการคัดลอกจะดำเนินการในบริบทของระบบไฟล์หลักของระบบโฮสต์ ภายในระยะเวลาที่กำหนด คุณสามารถจัดการเพื่อแทนที่ลิงก์ด้วยเส้นทางอื่น และเริ่มการคัดลอกข้อมูลไปยังตำแหน่งที่ต้องการในระบบไฟล์ภายนอก คอนเทนเนอร์.
เนื่องจากกรอบเวลาสำหรับสภาพการแข่งขันที่จะเกิดขึ้นนั้นมีจำกัดอย่างมากในการเตรียมตัว เมื่อดำเนินการคัดลอกจากคอนเทนเนอร์ อาจเป็นไปได้ที่จะบรรลุการโจมตีที่ประสบความสำเร็จในเวลาน้อยกว่า 1% ของกรณีเมื่อแทนที่ลิงก์สัญลักษณ์ในเส้นทางที่ใช้ในการคัดลอกแบบวนรอบ (การโจมตีที่ประสบความสำเร็จเกิดขึ้นหลังจากพยายามประมาณ 10 วินาที เพื่อคัดลอกไฟล์อย่างต่อเนื่องในวงด้วยคำสั่ง "docker cp")
ด้วยการดำเนินการคัดลอกลงในคอนเทนเนอร์ คุณสามารถโจมตีระบบโฮสต์ซ้ำๆ ได้โดยเขียนทับไฟล์ได้ด้วยการวนซ้ำเพียงไม่กี่ครั้ง ความเป็นไปได้ของการโจมตีเกิดจากการที่เมื่อคัดลอกลงในคอนเทนเนอร์จะใช้แนวคิด "chrootarchive" ตามที่กระบวนการ archive.go แยกไฟล์เก็บถาวรไม่อยู่ใน chroot ของรูทคอนเทนเนอร์ แต่อยู่ใน chroot ของ ไดเร็กทอรีพาเรนต์ของเส้นทางเป้าหมาย ซึ่งควบคุมโดยผู้โจมตี และไม่ได้หยุดการดำเนินการของคอนเทนเนอร์ (chroot ถูกใช้เป็นสัญญาณในการใช้ประโยชน์จากสภาวะการแข่งขัน)
ที่มา: opennet.ru
