Linux-ის ბირთვის AF_UNIX ნაგვის შემგროვებელი (Garbage Collector) სისტემის ერთ-ერთი ყველაზე კომპლექსური ნაწილია. მისი მთავარი ფუნქცია იმ სოკეტების მეხსიერების გათავისუფლებაა, რომლებიც მომხმარებლის სივრცისთვის მიუწვდომელი გახდა, თუმცა ბირთვის დონეზე კვლავ აქტიურია.
ცოტა ხნის წინ, ეს ქვესისტემა ნულიდან დაიწერა და გრაფიკული მოდელის საფუძველზე აიწყო, თუმცა ახალმა არქიტექტურამ ახალი გამოწვევებიც წარმოშვა.
როგორ მუშაობს AF_UNIX GC
სისტემა თვალს ადევნებს ე.წ. „in-flight“ სოკეტებს, რომლებიც SCM_RIGHTS-ის მეშვეობით იგზავნება. როდესაც სოკეტის მითითებების რაოდენობა ემთხვევა მის „in-flight“ სტატუსს, ეს ნიშნავს, რომ მასზე წვდომა მხოლოდ ბირთვს აქვს.
ძველი GC სისტემა, რომელიც 2024 წლამდე გამოიყენებოდა, ხშირად ხდებოდა ექსპლოიტების სამიზნე. ახალი რეალიზაცია მიზნად ისახავდა უფრო მსუბუქ მუშაობას, თუმცა, როგორც აღმოჩნდა, ისიც არ არის დაცული შეცდომებისგან.
გრაფიკული მოდელი და Tarjan-ის ალგორითმი
ახალი GC სოკეტებს წარმოადგენს როგორც გრაფის წვეროებს, ხოლო გადაცემულ ფაილებს — როგორც მიმართულ წიბოებს. სისტემა Tarjan-ის ალგორითმის გამოყენებით პოულობს „ძლიერ დაკავშირებულ კომპონენტებს“ (SCC), რაც ციკლების იდენტიფიცირების საშუალებას იძლევა.
GC ორ რეჟიმში მუშაობს: ნელი (სრული სკანირება) და სწრაფი (ქეშირებული SCC-ების გამოყენება).
სწრაფი გზა ამცირებს დატვირთვას, მაგრამ ეყრდნობა მონაცემთა სიზუსტეს, რაც CVE-2025-40214-ის შემთხვევაში კრიტიკულ პრობლემად იქცა.
CVE-2025-40214: მეხსიერების არასწორი მართვა
ხარვეზის მიზეზი მარტივია: ახალი სოკეტის შექმნისას, ბირთვი არ ახდენს scc_index ველის სწორ ინიციალიზაციას. შედეგად, ახალი ობიექტი იღებს მეხსიერების იმ ნაწილში დარჩენილ „ნაგავს“, რომელიც იქ წინა პროცესებისგან დარჩა.
მკვლევარებმა დაამტკიცეს, რომ ამ „მემკვიდრეობითი“ ინდექსის გამოყენებით შესაძლებელია სისტემის მოტყუება, რათა მან ლეგიტიმური სოკეტი შეცდომით „მკვდრად“ ჩათვალოს და გაანადგუროს. ეს იწვევს Use-After-Free ტიპის დაუცველობას.



დისკუსია
0 კომენტარი
ჯერ კომენტარი არ არის — იყავი პირველი.