.\" Automatically generated by Podwrapper::Man 1.50.1 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "guestfs-security 1" .TH guestfs-security 1 "2023-02-21" "libguestfs-1.50.1" "Virtualization Support" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "НАЗВА" .IX Header "НАЗВА" guestfs-security \- захист libguestfs .SH "ОПИС" .IX Header "ОПИС" Цю сторінку підручника присвячено обговоренню питань щодо безпеки у користуванні libguestfs, зокрема проблемам ненадійних або шкідливих гостьових систем або образів дисків. .SH "ЗВІТУВАННЯ ЩОДО ПРОБЛЕМ ІЗ БЕЗПЕКОЮ" .IX Header "ЗВІТУВАННЯ ЩОДО ПРОБЛЕМ ІЗ БЕЗПЕКОЮ" Якщо ви хочете конфіденційно повідомити про ваду захисту, будь ласка, скористайтеся безпечною процедурою Red Hat, описаною тут: https://access.redhat.com/security/team/contact .PP Якщо проблема захисту не така серйозна, ви можете просто створити повідомлення про ваду (див. розділ \*(L"ВАДИ\*(R" нижче) або надіслати повідомлення електронною поштою до нашого списку листування (https://www.redhat.com/mailman/listinfo/libguestfs). Можете не підписуватися на список листування, якщо не хочете. Втім, для непідписаних користувачів повідомлення з'являються у списку із затримкою, потрібною на модерацію. .SH "ЗАГАЛЬНІ ВАДИ" .IX Header "ЗАГАЛЬНІ ВАДИ" .SS "Захист змонтованих файлових систем" .IX Subsection "Захист змонтованих файлових систем" Ніколи не монтуйте файлову систему ненадійної гостьової системи безпосередньо до ядра вашої основної системи (наприклад, за допомогою петльового пристрою або kpartx). .PP Коли ви монтуєте файлову систему, помилки у реалізації файлової системи у ядрі (\s-1VFS\s0) можуть призвести до експлуатації зловмисниками шляхом створення відповідної файлової системи. Такі вразливості є дуже серйозними з двох причин. По\-перше, у ядрі дуже багато драйверів файлових систем, багато з них використовуються нерегулярно, вони не часто привертають увагу розробників. Простір користувача Linux допомагає потенційним зловмисникам виявленням типу файлової системи і автоматичним вибором правильного драйвера \s-1VFS,\s0 навіть якщо тип файлової системи є неочікуваним. По\-друге, вразливість на рівні ядра — це локальна вразливість із правами доступу адміністратора (що є ще гіршою у певному сенсі), яка надає негайний і повний доступ до системи, аж до рівня обладнання. .PP Ці вразливості могли бути присутніми у ядрі доволі довго (https://lwn.net/Articles/538898/). .PP У libguestfs реалізовано багатошаровний підхід до захисту вашої системи від експлоїтів: .PP .Vb 9 \& ненадійна файлова система \& \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \& ядро базової системи \& \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \& процес qemu, запущений не від імені root \& \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \& sVirt [якщо використано libvirt + SELinux] \& \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \& ядро основної системи .Ve .PP Ми запускаємо ядро Linux всередині віртуальної машини qemu, зазвичай від імені непривілейованого користувача. Зловмиснику доведеться написати файлову систему, яка спочатку експлуатуватиме вразливість у ядрі, а потім експлуатуватиме вразливість або у віртуалізації qemu (наприклад, у неякісному драйвері qemu), або у протоколі libguestfs, і нарешті, щоб отримати результат, еквівалентний до вразливості у ядрі, доведеться якось отримати права доступу адміністратора (root). Крім того, якщо ви використовуєте модуль обробки libvirt та SELinux, для обмеження прав доступу qemu використовується sVirt. Тому таке розширення доступу, яке має виконуватися за допомогою статичного коду, можна вважати надзвичайно важким завданням, хоча ми ніколи не кажемо «ніколи» щодо вразливостей у захисті. .PP Функції виклику також можуть значно звузити можливості нападу, якщо примусово вказуватимуть тип файлової системи при монтуванні (використовуватимуть \*(L"guestfs_mount_vfs\*(R" in \fBguestfs\fR\|(3)). .SS "Загальні зауваження щодо захисту" .IX Subsection "Загальні зауваження щодо захисту" Будьте обережні із будь\-якими файлами або даними, які ви отримуєте із гостьової системи (під терміном «отримуєте» ми маємо на увазі не лише виконання команди \*(L"guestfs_download\*(R" in \fBguestfs\fR\|(3), але і виконання будь\-якої команди, яка читає файли, назви файлів, каталоги або будь\-які інші дані з образу диска). Зловмисник може змінити дані так, щоб змусити вашу програму виконати якісь потрібні йому дії. Слід зважати на такі можливі випадки: .IP "\(bu" 4 даних (файла чи чогось іншого) немає .IP "\(bu" 4 дані є, але вони порожні .IP "\(bu" 4 даних набагато більше, ніж звичайно .IP "\(bu" 4 дані є довільними 8\-бітовими значеннями .IP "\(bu" 4 дані представлено у неочікуваному кодуванні .IP "\(bu" 4 назви даних містять гомогліфи. .SS "Захист протоколу" .IX Subsection "Захист протоколу" Протокол розроблено із врахуванням питань безпеки, засновано на \s-1RFC 4506\s0 (\s-1XDR\s0) із визначеною верхньою межею розміру повідомлення. Втім, програмам, у яких використано libguestfs, також слід вживати певних заходів захисту. Наприклад, ви можете написати програму, яка отримує виконуваний файл із образу диска і виконує його у локальній системі. Ніякий захист у протоколі не вбереже вашу систему від небезпечних наслідків виконання шкідливої програми. .SS "Інспектування захисту" .IX Subsection "Інспектування захисту" Елементи програмного інтерфейсу інспектування (див. \*(L"ІНСПЕКТУВАННЯ\*(R" in \fBguestfs\fR\|(3)) повертають довільні рядки безпосередньо з гостьової системи. Повернуті рядки можуть містити довільні 8\-бітові дані. У функціях, які викликають такі елементи програмного інтерфейсу, слід подбати про екранування даних до виведення їх до структурованого файла (наприклад, екранування коду \s-1HTML,\s0 якщо створюється вебсторінка). .PP Налаштування гостьової системи може бути змінено у незвичний спосіб адміністратором віртуальної машини. Дані у файлах налаштувань можуть бути неактуальними (особливо у ненадійних або активно шкідливих гостьових системах). Наприклад, ми отримуємо назву вузла із файлів налаштувань, наприклад \fI/etc/sysconfig/network\fR, які зберігаються у гостьовій системі, але адміністратор гостьової системи може легко внести зміни до цих файлів так, щоб надавати неправильну назву вузла. .PP Програмний інтерфейс інспектування обробляє налаштування гостьових систем за допомогою двох зовнішніх бібліотек: Augeas (налаштування Linux) та hivex (реєстр Windows). Розробники обох бібліотек подбали про стійкість коду до шкідливих даних, але атаки з метою викликати відмову в обслуговуванні усе ще можливі. Наприклад, для цього можна скористатися файлами налаштувань величезних розмірів. .SS "Запуск незахищених команд гостьової системи" .IX Subsection "Запуск незахищених команд гостьової системи" Будьте дуже обережні із запуском програм з гостьової системи. Запускаючи програму з гостьової системи, ви надаєте процесорний час виконуваному файлу, який ви не контролюєте, для того самого облікового запису, від імені якого працює бібліотека, хоча і замкненому у віртуальному просторі qemu. Докладніший опис варіантів запуску можна знайти у розділі \*(L"ВИКОНАННЯ КОМАНД\*(R" in \fBguestfs\fR\|(3). .SH "ІСТОРИЧНО ВІДОМІ ВАДИ ЗАХИСТУ У LIBGUESTFS" .IX Header "ІСТОРИЧНО ВІДОМІ ВАДИ ЗАХИСТУ У LIBGUESTFS" .SS "\s-1CVE\-2010\-3851\s0" .IX Subsection "CVE-2010-3851" https://bugzilla.redhat.com/642934 .PP Ця вада у захисті стосується автоматичного визначення формату диска, яке qemu виконує для образів дисків. .PP Простий (raw) образ диска — це просто набір байтів без заголовка. У інших форматах образів дисків, зокрема qcow2, міститься спеціальний заголовок. Qemu шукає у образі один із відомих заголовків і, якщо такого заголовка не буде знайдено, вважає образ диска простим. .PP Це надає змогу гостьовій системі, якій надано простий образ диска, записати до нього якийсь інший заголовок. Під час наступного завантаження (або доступу до образу диска за допомогою libguestfs) qemu має виконати автовизначення і на основі заголовка від гостьової системи визначити, що форматом образу диска є, скажімо» qcow2. .PP Сама процедура встановлення заголовків не є проблемною. Проблема полягає у тому, що у формат qcow2 передбачено багато можливостей, одна з яких надає змогу образу диска посилатися на інший образ (який називається «резервним диском»). Реалізується ця можливість шляхом запису адреси резервного диска до заголовка qcow2. Ця адреса не перевіряється і може вказувати на будь\-який файл у основній системі (наприклад, «/etc/passwd»). Далі, доступ до даних резервного диска надається через «дірки» у образі диска qcow2, який, звичайно ж, може потрапити під повний контроль зловмисника. .PP У libguestfs скористатися цією вразливістю доволі складно, окрім двох випадків: .IP "1." 4 Вами увімкнено мережу або відкрито диск у режимі запису. .IP "2." 4 Ви також запускаєте ненадійний код з гостьової системи (див. \*(L"ЗАПУСК КОМАНД\*(R" in \fBguestfs\fR\|(3)). .PP Цих проблем можна уникнути, вказавши очікуваний формат диска під час додавання дисків (необов'язковий параметр \f(CW\*(C`format\*(C'\fR у \*(L"guestfs_add_drive_opts\*(R" in \fBguestfs\fR\|(3)). Вам завжди варто вказувати формат, якщо дані диска зберігаються у простому форматі (raw). У інших випадках цим теж не варто нехтувати. (Див. також \*(L"ФОРМАТИ ОБРАЗІВ ДИСКІВ\*(R" in \fBguestfs\fR\|(3)). .PP Для дисків, які додаються з libvirt за допомогою викликів, подібних до \*(L"guestfs_add_domain\*(R" in \fBguestfs\fR\|(3), дані щодо формату отримуються від libvirt і передаються далі ланцюжком обробки. .PP Для засобів libguestfs використовувати параметр командного рядка \fI\-\-format\fR у належний спосіб. .SS "\s-1CVE\-2011\-4127\s0" .IX Subsection "CVE-2011-4127" https://bugzilla.redhat.com/752375 .PP Це вада у ядрі, яка надавала змогу гостьовим системам перезаписувати частини дисків основної системи, до яких вони за звичайних умов не повинні були мати доступу. .PP Достатньо оновити libguestfs до будь\-якої версії ≥ 1.16, яка містить зміну, що усуває проблему. .SS "\s-1CVE\-2012\-2690\s0" .IX Subsection "CVE-2012-2690" https://bugzilla.redhat.com/831117 .PP У старих версіях програми virt-edit та команди \f(CW\*(C`edit\*(C'\fR guestfish створювався новий файл, у якому зберігалися зміни, але не встановлювалися права доступу та інші параметри так, щоб вони збігалися із параметрами старого редагованого файла. У результаті після редагування конфіденційного файла, зокрема \fI/etc/shadow\fR, він ставав доступним для сторонніх користувачів. .PP Достатньо оновити libguestfs до будь\-якої версії ≥ 1.16. .SS "\s-1CVE\-2013\-2124\s0" .IX Subsection "CVE-2013-2124" https://bugzilla.redhat.com/968306 .PP Ця вада захисту була «діркою» у засобі інспектування, пов'язаною з тим, що відповідним чином створена гостьова система за допомогою приготованого файла, що у ній зберігався, могла призвести до подвійного вивільнення пам'яті у бібліотеці мовою C (спричинити відмову в обслуговуванні). .PP Достатньо оновити libguestfs до версії, у якій вразливість усунено: libguestfs ≥ 1.20.8, ≥ 1.22.2 або ≥ 1.23.2. .SS "\s-1CVE\-2013\-4419\s0" .IX Subsection "CVE-2013-4419" https://bugzilla.redhat.com/1016960 .PP Якщо використано параметр \fBguestfish\fR\|(1) \fI\-\-remote\fR або guestfish \fI\-\-listen\fR, guestfish має створити сокет у відомому місці (\fI/tmp/.guestfish\-$UID/socket\-$PID\fR). .PP Місце має бути наперед відомим, щоб за його допомогою обидва боки каналу зв'язку могли обмінюватися даними. Втім, не виконується перевірки, чи належить відповідний каталог (\fI/tmp/.guestfish\-$UID\fR) користувачеві. Тому цей каталог може бути створено іншим користувачем, який, потенційно, може перехопити сокети клієнта або сервера guestfish. .PP Достатньо оновити libguestfs до версії, у якій вразливість усунено: libguestfs ≥ 1.20.12, ≥ 1.22.7 або ≥ 1.24. .SS "Відмова у обслуговуванні при інспектуванні образів дисків із пошкодженими томами btrfs" .IX Subsection "Відмова у обслуговуванні при інспектуванні образів дисків із пошкодженими томами btrfs" Можна було спричинити аварійне завершення роботи libguestfs (та програм, які використовують libguestfs як бібліотеку) передаванням їм образу диска, на якому містився пошкоджений том btrfs. .PP Причиною було розіменування нульового вказівника, яке спричиняло відмову в обслуговуванні. Ми вважаємо, що ширше використання цієї вразливості неможливе. .PP Див. внесок d70ceb4cbea165c960710576efac5a5716055486 із виправленням. Це виправлено включено до стабільних гілок libguestfs ≥ 1.26.0, ≥ 1.24.6 та ≥ 1.22.8, а також до \s-1RHEL\s0 ≥ 7.0. Старіші версії libguestfs не є вразливими. .SS "\s-1CVE\-2014\-0191\s0" .IX Subsection "CVE-2014-0191" У попередніх версіях libguestfs використовувала незахищені програмні інтерфейси libxml2 для обробки \s-1XML\s0 libvirt. Ці програмні інтерфейси типово надавали доступ до встановлення з'єднань мережі, якщо передавалися документи \s-1XML\s0 певного вмісту. За допомогою спеціально сформованого документа \s-1XML\s0 також можна було вичерпати можливості комп'ютера за процесорним часом, пам'яттю або дескрипторами файлів. .PP Оскільки \s-1XML\s0 libvirt надходить із надійного джерела (фонової служби libvirt), ми вважаємо, що цією вразливістю неможливо було скористатися. .PP Вразливість виправлено у libguestfs ≥ 1.27.9, виправлення було зворотно портовано до стабільних версій ≥ 1.26.2, ≥ 1.24.9, ≥ 1.22.10 та ≥ 1.20.13. .SS "Shellshock (bash \s-1CVE\-2014\-6271\s0)" .IX Subsection "Shellshock (bash CVE-2014-6271)" Вада у bash опосередковано торкнулася libguestfs. Докладніша інформація: https://www.redhat.com/archives/libguestfs/2014\-September/msg00252.html .SS "\s-1CVE\-2014\-8484\s0" .IX Subsection "CVE-2014-8484" .SS "\s-1CVE\-2014\-8485\s0" .IX Subsection "CVE-2014-8485" Ці дві вади є вадами програми із комплекту binutils \s-1GNU\s0 \fBstrings\fR\|(1). Через них вразливими стали інтерфейси \*(L"guestfs_strings\*(R" in \fBguestfs\fR\|(3) та \*(L"guestfs_strings_e\*(R" in \fBguestfs\fR\|(3) у libguestfs. Обробка за допомогою strings відповідно сформованого файла могла призвести до виконання довільного коду (область виконання обмежено базовою системою libguestfs). .PP У libguestfs ≥ 1.29.5 та ≥ 1.28.3 використано параметр \f(CW\*(C`strings\*(C'\fR \fI\-a\fR для того, щоб уникнути обробки файлів за допомогою \s-1BFD.\s0 .SS "\s-1CVE\-2015\-5745\s0" .IX Subsection "CVE-2015-5745" https://bugzilla.redhat.com/show_bug.cgi?id=1251157 .PP Це не вразливість у libguestfs, але оскільки ми завжди надаємо порт virtio-serial для кожної гостьової системи (оскільки так здійснюється обмін даними між гостьовою і основною системами), можливе проникнення з базової системи до процесу qemu основної системи. Це може стосуватися таких випадків: .IP "\(bu" 4 ваша програма libguestfs запускає ненадійні програми з гостьової системи (за допомогою \*(L"guestfs_sh\*(R" in \fBguestfs\fR\|(3) тощо) або .IP "\(bu" 4 у коді файлових систем ядра буде виявлено іншу властивість (наприклад), яка надає змогу відповідним чином створеній файловій системі захопити контроль над базовою системою. .PP Якщо ви використовуєте sVirt для обмеження qemu, це може запобігти деяким нападам. .SS "Права доступу до \fI.ssh\fP і \fI.ssh/authorized_keys\fP" .IX Subsection "Права доступу до .ssh і .ssh/authorized_keys" https://bugzilla.redhat.com/1260778 .PP У програмах \fBvirt\-customize\fR\|(1), \fBvirt\-sysprep\fR\|(1) та \fBvirt\-builder\fR\|(1) передбачено параметр \fI\-\-ssh\-inject\fR для вставляння ключа \s-1SSH\s0 до образів дисків віртуальної машини. Для виконання цього завдання програми можуть створювати каталог \fI~user/.ssh\fR і файл \fI~user/.ssh/authorized_keys\fR у гостьовій системі. .PP У libguestfs < 1.31.5 та libguestfs < 1.30.2 для нового каталогу і файла вибираються режими доступу \f(CW0755\fR і \f(CW0644\fR, відповідно. Втім, такі права доступу (особливо до \fI~user/.ssh\fR) є ширшими за ті, які використовує OpenSSH. У поточних версіях libguestfs каталог і файл створюються із режимом доступу \f(CW0700\fR і \f(CW0600\fR, відповідно. .SS "\s-1CVE\-2015\-8869\s0" .IX Subsection "CVE-2015-8869" https://bugzilla.redhat.com/CVE\-2015\-8869 .PP Ця вразливість у OCaml може стосуватися усіх інструментів віртуалізації, які написано мовою програмування OCaml. Вона стосується лише 64\-бітових платформ. Оскільки ця вада стосується створення коду, важко визначити точний перелік вражених програм, тому рекомендують повторно зібрати libguestfs за допомогою версії компілятора OCaml, де цю ваду виправлено (або попросити розробників вашого дистрибутива Linux зробити це для вас). .SS "\s-1CVE\-2017\-5208, CVE\-2017\-5331, CVE\-2017\-5332, CVE\-2017\-5333, CVE\-2017\-6009, CVE\-2017\-6010, CVE\-2017\-6011\s0" .IX Subsection "CVE-2017-5208, CVE-2017-5331, CVE-2017-5332, CVE-2017-5333, CVE-2017-6009, CVE-2017-6010, CVE-2017-6011" Вразливості у програмі \fBwrestool\fR\|(1) з пакунка \f(CW\*(C`icoutils\*(C'\fR може бути використано для локального виконання коду у основній системі. .PP Коли засіб інспектування libguestfs (див. \*(L"Inspection security\*(R" вище) виявляє гостьову систему Windows \s-1XP\s0 або Windows 7 і отримує запит щодо пошуку пов'язаної піктограми гостьової системи, засіб інспектування отримує файл, який не є безпечним, з гостьової системи і запускає \f(CW\*(C`wrestool \-x\*(C'\fR для цього файла. Це може призвести до виконання коду у основній системі. Зловмисники можуть створити образ диска або гостьову систему, яка виглядатиме як гостьова система Windows для засобу інспектування libguestfs, тому те, що у вас немає гостьових систем Windows, не допоможе вберегтися від вразливості. .PP Потенційно вразливими є усі програми, які викликають програмний інтерфейс libguestfs \f(CW\*(C`guestfs_inspect_get_icon\*(C'\fR. Такими програмами, зокрема, є \fBvirt\-inspector\fR\|(1) та \fBvirt\-manager\fR\|(1). .PP Усунути проблему можна, оновивши icoutils до невразливої версії (принаймні до 0.31.1). .SS "\s-1CVE\-2017\-7244, CVE\-2017\-7245, CVE\-2017\-7246\s0" .IX Subsection "CVE-2017-7244, CVE-2017-7245, CVE-2017-7246" Вразливостями у \s-1PCRE\s0 можна скористатися для спричинення аварійного завершення роботи libguestfs (тобто, спричинити відмову в обслуговуванні) під час виконання інспектування віртуальної машини, до якої можуть мати доступ зловмисники. .PP Усунути проблему можна, оновивши \s-1PCRE\s0 до версії, де вади виправлено (основної версії ≥ 8.41). .SS "\s-1CVE\-2018\-11806\s0" .IX Subsection "CVE-2018-11806" Вразливості у засобах обробки роботи користувача qemu у мережі (\s-1SLIRP\s0) надають змогу за допомогою спеціально сформованого образу файлової системи перебрати контроль над qemu і за її допомогою атакувати основну систему. .PP Це впливає на роботу libguestfs, якщо встановлено модуль обробки \f(CW\*(C`direct\*(C'\fR \fIі\fR увімкнено роботу у мережі. .PP Модуль direct є типовим для програми із основної гілки розробки, але не у дистрибутивах Linux, які використовують qemu, зокрема у Fedora, Red Hat Enterprise Linux та CentOS. Цей модуль може бути також вибрано за допомогою значення змінної середовища \f(CW\*(C`LIBGUESTFS_BACKEND=direct\*(C'\fR або виклику \f(CW\*(C`guestfs_set_backend (g, "direct")\*(C'\fR. .PP Робота у мережі автоматично вмикається деякими програмами (наприклад \fBvirt\-builder\fR\|(1)) або під час виклику у коді \f(CW\*(C`guestfs_set_network (g, 1)\*(C'\fR (нетипові параметри функції). .PP Модуль обробки libvirt є невразливим. .PP Усунути проблему можна оновленням qemu до виправленої версії (див. https://lists.gnu.org/archive/html/qemu\-devel/2018\-06/msg01012.html). .SS "\s-1CVE\-2022\-2211\s0" .IX Subsection "CVE-2022-2211" https://bugzilla.redhat.com/CVE\-2022\-2211 .PP The \f(CW\*(C`get_keys\*(C'\fR function in \fIlibguestfs\-common/options/keys.c\fR collects those \fI\-\-key\fR options from the command line into a new array that match a particular block device that's being decrypted for inspection. The function intends to size the result array such that potentially all \fI\-\-key\fR options, plus a terminating \f(CW\*(C`NULL\*(C'\fR element, fit into it. The code mistakenly uses the \f(CW\*(C`MIN\*(C'\fR macro instead of \f(CW\*(C`MAX\*(C'\fR, and therefore only one element is allocated before the \f(CW\*(C`NULL\*(C'\fR terminator. .PP Passing precisely two \fI\-\-key \s-1ID:...\s0\fR options on the command line for the encrypted block device \f(CW\*(C`ID\*(C'\fR causes \f(CW\*(C`get_keys\*(C'\fR to overwrite the terminating \f(CW\*(C`NULL\*(C'\fR, leading to an out-of-bounds read in \f(CW\*(C`decrypt_mountables\*(C'\fR, file \fIlibguestfs\-common/options/decrypt.c\fR. .PP Passing more than two \fI\-\-key \s-1ID:...\s0\fR options on the command line for the encrypted block device \f(CW\*(C`ID\*(C'\fR causes \f(CW\*(C`get_keys\*(C'\fR itself to perform out-of-bounds writes. The most common symptom is a crash with \f(CW\*(C`SIGSEGV\*(C'\fR later on. .PP This issue affects \*(-- broadly speaking \*(-- all libguestfs-based utilities that accept \fI\-\-key\fR, namely: \f(CW\*(C`guestfish\*(C'\fR, \f(CW\*(C`guestmount\*(C'\fR, \f(CW\*(C`virt\-cat\*(C'\fR, \f(CW\*(C`virt\-customize\*(C'\fR, \f(CW\*(C`virt\-diff\*(C'\fR, \f(CW\*(C`virt\-edit\*(C'\fR, \f(CW\*(C`virt\-get\-kernel\*(C'\fR, \f(CW\*(C`virt\-inspector\*(C'\fR, \f(CW\*(C`virt\-log\*(C'\fR, \f(CW\*(C`virt\-ls\*(C'\fR, \f(CW\*(C`virt\-sparsify\*(C'\fR, \f(CW\*(C`virt\-sysprep\*(C'\fR, \f(CW\*(C`virt\-tail\*(C'\fR, \f(CW\*(C`virt\-v2v\*(C'\fR. .SH "ТАКОЖ ПЕРЕГЛЯНЬТЕ" .IX Header "ТАКОЖ ПЕРЕГЛЯНЬТЕ" \&\fBguestfs\fR\|(3), \fBguestfs\-internals\fR\|(1), \fBguestfs\-release\-notes\fR\|(1), \fBguestfs\-testing\fR\|(1), http://libguestfs.org/. .SH "АВТОРИ" .IX Header "АВТОРИ" Richard W.M. Jones (\f(CW\*(C`rjones at redhat dot com\*(C'\fR) .SH "АВТОРСЬКІ ПРАВА" .IX Header "АВТОРСЬКІ ПРАВА" Copyright (C) 2009\-2023 Red Hat Inc. .SH "LICENSE" .IX Header "LICENSE" .SH "BUGS" .IX Header "BUGS" To get a list of bugs against libguestfs, use this link: https://bugzilla.redhat.com/buglist.cgi?component=libguestfs&product=Virtualization+Tools .PP To report a new bug against libguestfs, use this link: https://bugzilla.redhat.com/enter_bug.cgi?component=libguestfs&product=Virtualization+Tools .PP When reporting a bug, please supply: .IP "\(bu" 4 The version of libguestfs. .IP "\(bu" 4 Where you got libguestfs (eg. which Linux distro, compiled from source, etc) .IP "\(bu" 4 Describe the bug accurately and give a way to reproduce it. .IP "\(bu" 4 Run \fBlibguestfs\-test\-tool\fR\|(1) and paste the \fBcomplete, unedited\fR output into the bug report.