කියවීමට පමණක් ගොනු දූෂිත කිරීමට ඉඩ සලසන Linux කර්නලය තුළ ඇති අවදානම

Linux kernel (CVE-2022-0847) හි අවදානමක් හඳුනාගෙන ඇති අතර එය O_RDONLY ධජය සමඟ විවෘත කර ඇති, හෝ ගොනු පද්ධති මත පිහිටා ඇති කියවීමට පමණක් ඇති ප්‍රකාරය ඇතුළුව ඕනෑම ගොනුවක් සඳහා පිටු හැඹිලියේ අන්තර්ගතය උඩින් ලිවීමට ඉඩ සලසයි. කියවීමට පමණක් ප්‍රකාරයේදී සවි කර ඇත. ප්‍රායෝගික වශයෙන්, අනාරක්‍ෂිතභාවය අත්තනෝමතික ක්‍රියාවලිවලට හෝ විවෘත කළ ගොනුවල දූෂිත දත්තවලට කේත එන්නත් කිරීමට භාවිත කළ හැක. උදාහරණයක් ලෙස, ඔබට sshd ක්‍රියාවලිය සඳහා authorized_keys ගොනුවේ අන්තර්ගතය වෙනස් කළ හැක. සූරාකෑමේ මූලාකෘතියක් පරීක්ෂා කිරීම සඳහා තිබේ.

මෙම ගැටලුව 2016 දී හඳුනාගත් විවේචනාත්මක අවදානම Dirty COW හා සමානව, Dirty Pipe ලෙස කේතනාම කර ඇත. අනතුරුදායක මට්ටම අනුව, Dirty Pipe Dirty COW හා සමාන මට්ටමක පවතින නමුත් එය ක්‍රියාත්මක කිරීමට වඩා පහසු බව සටහන් වේ. ලොග් සේවාදායකයකින් සම්පීඩිත සංරක්ෂිත බාගත කිරීමේ පද්ධතියක ජාලය හරහා බාගත කරන ලද ලිපිගොනු වරින් වර දූෂණය වීම පිළිබඳ පැමිණිලි විශ්ලේෂණය කිරීමේදී අවදානම හඳුනා ගන්නා ලදී (පූරණය කළ පද්ධතියක මාස 37 ක් තුළ දූෂණ 3), එය සකස් කිරීම සඳහා ස්ප්ලයිස් () මෙහෙයුම භාවිතා කරන ලදී. සහ නම් නොකළ පයිප්ප.

5.8 අගෝස්තු මාසයේදී නිකුත් කරන ලද Linux kernel 2020 සමඟින් ආරම්භ වන අවදානම දිස්වේ, එනම්. Debian 11 හි ඇත, නමුත් Ubuntu 20.04 LTS හි මූලික කර්නලයට බලපාන්නේ නැත. RHEL 8.x සහ openSUSE/SUSE 15 කර්නල් මුලින් පැරණි ශාඛා මත පදනම් වී ඇත, නමුත් ගැටළුව ඇති කරන වෙනස ඒවාට බැක්පෝට් කර ඇති බව සිතිය හැකිය (තවමත් නිශ්චිත දත්ත නොමැත). ඔබට මෙම පිටු වල බෙදාහැරීම් වල පැකේජ යාවත්කාලීන ප්‍රකාශනය නිරීක්ෂණය කළ හැක: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux. 5.16.11, 5.15.25 සහ 5.10.102 නිකුතුවල අවදානම සඳහා විසඳුමක් යෝජනා කරන ලදී. නිවැරදි කිරීම ඇන්ඩ්‍රොයිඩ් වේදිකාවේ භාවිතා කරන කර්නලයට ද ඇතුළත් වේ.

ව්‍යුහයක් වෙන් කිරීමේදී සහ යම් යම් උපාමාරු වලදී මතකය ඉවත් කර නොතිබුණද, copy_page_to_iter_pipe() සහ push_pipe() යන ශ්‍රිතවල කේතයේ “buf->flags” අගය ආරම්භ නොකිරීම හේතුවෙන් මෙම අවදානම ඇති වේ. නම් නොකළ පයිප්ප, වෙනත් මෙහෙයුමකින් අගයක්. මෙම විශේෂාංගය භාවිතා කරමින්, වරප්‍රසාද ලත් දේශීය පරිශීලකයෙකුට ධජයේ ඇති PIPE_BUF_FLAG_CAN_MERGE අගයේ පෙනුම ලබා ගත හැකිය, එමඟින් විශේෂයෙන් සකස් කරන ලද නම් නොකළ පයිප්පයකට නව දත්ත ලිවීමෙන් පිටු හැඹිලියේ දත්ත නැවත ලිවීම සංවිධානය කිරීමට ඔබට ඉඩ සලසයි.

ප්‍රහාරයක් සඳහා, ඉලක්ක ගොනුව කියවිය හැකි විය යුතු අතර, පයිප්පයට ලිවීමේදී ප්‍රවේශ හිමිකම් පරීක්ෂා නොකරන බැවින්, කියවීමට පමණක් සවිකර ඇති කොටස්වල ඇති ගොනු සඳහා පිටු හැඹිලියේ ප්‍රතිස්ථාපනය ද සිදු කළ හැක (උදාහරණයක් ලෙස, ගොනු සඳහා c CD- ROM). පිටු හැඹිලියේ තොරතුරු ප්‍රතිස්ථාපනය කිරීමෙන් පසු, ගොනුවකින් දත්ත කියවීමේදී, ක්‍රියාවලියට ලැබෙන්නේ සත්‍ය දත්ත නොව, ප්‍රතිස්ථාපනය කළ දත්ත ය.

PIPE_BUF_FLAG_CAN_MERGE ධජය ඒ හා සම්බන්ධ සියලුම මුදු ව්‍යුහයන් තුළ පිහිටුවා ඇති බව සහතික කිරීම සඳහා නම් නොකළ නාලිකාවක් නිර්මාණය කිරීම සහ අත්තනෝමතික දත්ත සමඟ එය පිරවීම දක්වා ක්‍රියාව පහළ වේ. මීලඟට, දත්ත පයිප්පයෙන් කියවනු ලැබේ, නමුත් පයිප්ප_inode_info මුදු ව්‍යුහය තුළ ඇති පයිප්ප_බෆර් ව්‍යුහයේ සියලුම අවස්ථාවන්හි ධජය සකසා ඇත. පසුව අපේක්ෂිත ඕෆ්සෙට් එකෙන් පටන් ගෙන, ඉලක්ක ගොනුවේ සිට නම් නොකළ පයිප්පයකට දත්ත කියවීමට splice() වෙත ඇමතුමක් සිදු කෙරේ. මෙම නම් නොකළ පයිප්පයට දත්ත ලිවීමේදී, PIPE_BUF_FLAG_CAN_MERGE ධජය සැකසීම හේතුවෙන්, පයිප්ප_බෆර ව්‍යුහයේ නව අවස්ථාවක් නිර්මාණය කිරීම වෙනුවට පිටු හැඹිලියේ ඇති දත්ත නැවත ලියනු ලැබේ.

මූලාශ්රය: opennet.ru

අදහස් එක් කරන්න