ในยูทิลิตี้ e2fsck ที่ให้มาเป็นส่วนหนึ่งของแพ็คเกจ
ช่องโหว่นี้เกิดจากข้อผิดพลาดในฟังก์ชัน mutate_name() ในไฟล์ rehash.c ซึ่งใช้ในการสร้างตารางแฮชที่เกี่ยวข้องกับไดเร็กทอรีใหม่ เพื่อให้มั่นใจว่าไฟล์ทั้งหมดในไดเร็กทอรีตรงกับไดเร็กทอรีนั้น ความเสียหายของโครงสร้าง hash_entry ที่เกี่ยวข้องกับไดเรกทอรีอาจส่งผลให้ผู้โจมตีเขียนข้อมูลไปยังพื้นที่นอกบัฟเฟอร์ที่จัดสรร หากมีการระบุไฟล์หลายไฟล์ที่มีชื่อเดียวกันในตารางแฮชว่าถูกผูกไว้กับไดเร็กทอรี ยูทิลิตี e2fsck จะเปลี่ยนชื่อไฟล์ที่ซ้ำกันโดยการเพิ่ม ~0, ~1 ฯลฯ ลงในชื่อ หากต้องการจัดเก็บชื่อใหม่ชั่วคราวในระหว่างการเปลี่ยนชื่อ บัฟเฟอร์ขนาด 256 ไบต์จะถูกจัดสรรบนสแต็ก
ขนาดของข้อมูลที่จะคัดลอกถูกกำหนดโดยนิพจน์ "entry->name_len & 0xff" แต่ค่าของ entry->name_len ถูกโหลดจากโครงสร้างบนดิสก์ แทนที่จะคำนวณจากขนาดจริงของชื่อ หากขนาดเป็นศูนย์ ดัชนีอาร์เรย์จะใช้ค่า -1 และเงื่อนไขจะถูกสร้างขึ้นสำหรับจำนวนเต็มล้นผ่านขอบเขตล่างของบัฟเฟอร์ (จำนวนเต็มน้อยไป) และเขียนทับข้อมูลอื่นบนสแต็กด้วยค่า “~0” สำหรับระบบ 64 บิต การใช้ประโยชน์จากช่องโหว่จะถูกประเมินว่าไม่น่าเป็นไปได้ และไม่จำเป็นต้องมีข้อจำกัดเกี่ยวกับขนาดสแต็ก (ulimit -sไม่จำกัด) สำหรับระบบ 32 บิต การเอารัดเอาเปรียบนั้นถือว่าเป็นไปได้ แต่ผลลัพธ์จะขึ้นอยู่กับวิธีการคอมไพล์ไฟล์เรียกทำงานโดยคอมไพเลอร์
ในการโจมตี ผู้โจมตีจำเป็นต้องสร้างความเสียหายให้กับข้อมูลด้วยวิธีใดวิธีหนึ่งในพาร์ติชั่นด้วยระบบไฟล์ ext2, ext3 หรือ ext4 เนื่องจากการดำเนินการนี้ต้องการสิทธิ์ผู้ใช้ขั้นสูง ช่องโหว่จึงก่อให้เกิดภัยคุกคามเมื่อยูทิลิตี e2fsck สแกนไดรฟ์ภายนอกหรืออิมเมจ FS ที่ได้รับจากภายนอก
ที่มา: opennet.ru