เมื่อเร็ว ๆ นี้ ประกาศเปิดตัว Glibc 2.34 เวอร์ชันใหม่แล้ว ซึ่งเกิดขึ้นหลังจากหกเดือนของการพัฒนาและมีการเปลี่ยนแปลงที่สำคัญหลายอย่าง ซึ่งการรวมไลบรารี libpthread, libdl, libutil และ libanl รวมถึงการแก้ไขข้อผิดพลาดต่างๆ ซึ่งหนึ่งในนั้นทำให้เกิดการอุดตัน
สำหรับผู้ที่ไม่คุ้นเคยกับ Glibc ควรรู้ว่ามันคืออะไร ห้องสมุด GNU C, ที่เรียกกันทั่วไปว่า glibc เป็นไลบรารีรันไทม์มาตรฐานของ GNU C บนระบบที่ใช้ ไลบรารี C นี้ที่ จัดเตรียมและกำหนดการเรียกระบบและฟังก์ชันพื้นฐานอื่นๆ ซึ่งใช้โดยโปรแกรมเกือบทั้งหมด
คุณสมบัติใหม่หลักของ Glibc 2.34
ในเวอร์ชันใหม่ของ Glibc 2.34 ที่นำเสนอ libpthread, libdl, libutil และ libanl ได้ถูกรวมเข้ากับไลบรารีหลักแล้วการใช้ฟังก์ชันการทำงานในแอปพลิเคชันไม่จำเป็นต้องผูกกับแฟล็ก -lpthread, -ldl, -lutil และ -lanl อีกต่อไป
นอกจากนี้ยังมีการกล่าวถึงว่า มีการเตรียมการเพื่อรวม libreolv เข้ากับ libc ด้วยการบูรณาการ จะช่วยให้กระบวนการอัปเดต glibc ราบรื่นขึ้น และจะทำให้การใช้งานรันไทม์ง่ายขึ้นและยังมีไลบรารี stub ให้เข้ากันได้กับแอปพลิเคชันที่สร้างด้วย glibc เวอร์ชันก่อนหน้า
ในส่วนของการเปลี่ยนแปลงนั้นเน้นที่ Linux Glibc 2.34 ไฮไลท์ เพิ่มความสามารถในการใช้ประเภท 64 บิต time_t ใน configs ที่เดิมใช้ time_t type 32 บิต. คุณลักษณะนี้มีเฉพาะในระบบที่มีเคอร์เนล 5.1 ขึ้นไปเท่านั้น
การเปลี่ยนแปลงเฉพาะอีกประการสำหรับ Linux คือ การใช้งานฟังก์ชั่น execveatที่ อนุญาตให้เรียกใช้ไฟล์เรียกทำงานจากไฟล์ descriptor ที่เปิดอยู่. ฟังก์ชั่นใหม่นี้ยังใช้ในการใช้งานการเรียก fexecve ซึ่งไม่ต้องการระบบไฟล์หลอก / proc เมื่อเริ่มต้น
เพิ่มฟังก์ชันนี้ด้วย close_range () ซึ่งมีให้สำหรับ Linux เวอร์ชัน 5.9 และสูงกว่าซึ่งสามารถ ใช้เพื่อให้กระบวนการปิดตัวอธิบายไฟล์ทั้งหมด เปิดพร้อมกัน มันยังใช้พารามิเตอร์ glibc.pthread.stack_cache_size ซึ่งสามารถใช้เพื่อปรับขนาดของแคช pthread stack
นอกจากนี้ เพิ่มฟังก์ชัน _Fork การแทนที่ สำหรับฟังก์ชั่น ส้อม ซึ่งตรงตามข้อกำหนด "async-signal-safe" ซึ่งหมายความว่าสามารถเรียกได้อย่างปลอดภัยจากตัวจัดการสัญญาณ ระหว่างการดำเนินการ _Fork สภาพแวดล้อมขั้นต่ำจะถูกสร้างขึ้น เพียงพอที่จะเรียกใช้ฟังก์ชันในตัวจัดการสัญญาณ เช่น ยกและเรียกทำงาน โดยไม่ต้องเรียกใช้คุณสมบัติที่สามารถเปลี่ยนการล็อกหรือสถานะภายในได้
สำหรับส่วนของช่องโหว่ที่แก้ไขใน Glibc 2.34 มีการกล่าวถึงสิ่งต่อไปนี้:
CVE-2021-27645: กระบวนการ nscd (เนมเซิร์ฟเวอร์แคช daemon) ล้มเหลวเนื่องจากการเรียกใช้ฟังก์ชันฟรีสองครั้งขณะประมวลผลคำขอกลุ่มเครือข่ายที่สร้างขึ้นเป็นพิเศษ
CVE-2021-33574: การเข้าถึงพื้นที่หน่วยความจำที่ว่างแล้ว (หลังใช้งานฟรี) ในฟังก์ชัน mq_notify เมื่อใช้ประเภทการแจ้งเตือน SIGEV_THREAD ที่มีแอตทริบิวต์เธรดซึ่งมีการตั้งค่ารูปแบบการโยง CPU สำรองไว้ ปัญหาอาจทำให้เกิดการหยุดทำงาน แต่ไม่รวมตัวเลือกการโจมตีอื่นๆ
CVE-2021-35942: ขนาดพารามิเตอร์ล้นในฟังก์ชัน wordexp อาจทำให้แอปพลิเคชันขัดข้อง
จากการเปลี่ยนแปลงอื่น ๆ ที่โดดเด่น:
- เพิ่มฟังก์ชัน timespec_getres ที่กำหนดไว้ในร่างมาตรฐาน ISO C2X และฟังก์ชัน timespec_get เพิ่มขึ้นด้วยความสามารถที่คล้ายกับฟังก์ชัน POSIX clock_getres
- ในไฟล์ gconv-modules มีเพียงชุดโมดูล gconv หลักที่น้อยที่สุดเท่านั้น และส่วนที่เหลือถูกย้ายไปยังไฟล์ gconv-modules-extra.conf เพิ่มเติมที่อยู่ในไดเร็กทอรี gconv-modules.d
- การใช้ลิงก์สัญลักษณ์เพื่อเชื่อมโยงอ็อบเจ็กต์ที่ใช้ร่วมกันที่ติดตั้งได้กับเวอร์ชัน Glibc ได้ถูกลบออกแล้ว ขณะนี้วัตถุเหล่านี้ได้รับการติดตั้งตามที่เป็นอยู่ (เช่น libc.so.6 ตอนนี้เป็นไฟล์แทนที่จะเป็นลิงก์ไปยัง libc-2.34.so)
- บน Linux ฟังก์ชันเช่น shm_open และ sem_open ต้องการระบบไฟล์สำหรับหน่วยความจำที่ใช้ร่วมกันที่ติดตั้งบนจุดเชื่อมต่อ / dev / shm
ในที่สุด หากคุณสนใจที่จะทราบข้อมูลเพิ่มเติม ของเวอร์ชันใหม่นี้คุณสามารถตรวจสอบไฟล์ รายละเอียดตามลิงค์ต่อไปนี้