В ядре Linux устранена следующая уязвимость: KVM: x86: Исправить жесткий блокировку VM после длительного бездействия с периодическим таймер…
В ядре Linux устранена следующая уязвимость: KVM: x86: Исправить жесткий блокировку VM после длительного бездействия с периодическим таймером HV При продвижении срока действия цели для гайморите гайшины APIC в периодической режим, установите истечение до "сейчас", если срок действия цели в прошлом (подобно тому, что сделано в update_target_expiration()). Слепое добавление период до предыдущего срока действия цели может привести к генерации KVM практически безграничное количество печатных IRQ из-за программирования и истекший таймер снова и снова. В экстремальных сценариях, например, если пользовательская приостанавливает/приостанавливает VM на длительный срок, это может даже вызвать тяжело Замки в хостах. В настоящее время ошибка затрагивает только процессоры Intel при использовании гипервизорного таймера (HV таймер), он же таймер упреждения VMX. В отличие от таймера программного обеспечения, a.k.a.hrtimer, который KVM продолжает работать даже на выходах в пространство пользователя, HV таймер работает только тогда, когда гость активен. В результате, если vCPU не работает в течение длительного времени, будет огромный разрыв между Истекшая цель и текущее время работы vCPU. Потому что срок действия целевого срока действия на каждый из них увеличился только на один период Истекатель времени, это приводит к серии истечения таймера, происходящих быстро после возобновления vCPU/VM. Более важно, когда vCPU впервые запускает периодический таймер HV истечение срока годности после возобновления, продление срока действия только на один период Это приведет к истечению срока действия цели в прошлом. В результате, дельта Может быть рассчитано как отрицательное значение. Когда дельта преобразуется в абсолютное значение (tscedline - неподписанный u64), полученное значение может переполнить то, что HV-таймер способен программировать. Т.е. большой значение превысит максимальную ширину бит таймера VMX cpu_preemption_timer_multi + 32, и таким образом заставляют KVM переключаться с HV таймер для таймера программного обеспечения (hrtimers). После перехода на таймер программного обеспечения, периодические звонки с истекающим временем времени может быть выполнен последовательно в пределах одного обработчика прерывания часов, потому что краткие часы выполняют просьбу KVM об истечении срока годности в прошлом и Немедленно отзывается об обратном звонке KVM после перепрограммирования. И потому, что обработчик прерываний работает с отключенными IRQ, перезапуская таймер KVM снова и снова, пока цель не будет расширена до «сейчас», может привести к в жесткой изоляторе. Например, следующий жесткий замок был спровоцирован в хосте при запуске Windows VM (имеет значение только потому, что использовала таймер APIC в периодическом режиме) после возобновления ВМ из длинной приостановки (в хосте). NMI сторожевой пёс: Сторожевой пёс обнаружил жесткий ЛОКУП на cpu 45 ... RIP: 0010:advance_periodic_periodic_expiration+0x4d/0x80 [kvm] ... СРП: 0018:ff4f88f5d98d8ef0 ФАГОВ: 00000046 RAX: ff0103f91be678e RBX: fff0103f91be678e RCX: 00843a7d9e127bcc RDX: 00000000000002 RSI: 0052ca4003697505 RDI: ff440d5bfbdbd500 РУБП: ff440d5956f99200 R08: ff2ff2a42deb6a84 R09: 000000000002a6c0 Р10: 0122д794016332b3 R11: 00000000000000 R12: ff440db1af39cfc0 R13: ff440db1af39cfc0 R14: ffffffffc0d4a560 R15: ff440db1af39d0f8 ФС: 00007f04a6ffd700(0000) GS:ff440db1af380000 (0000) knlGS:000000e38a3b8000 КСС: 0010 ДС: 0000 ЭС: 0000 КР0: 00000080050033 CR2: 000000d5651ffeff8 CR3: 000000684e038002 CR4: 0000000000773ee0 PKRU: 5555554 Трейс по вызову: <IRQ> apic_timer_fn+0x31/0x50 [kvm] __hrtimer_run_queues+0x100/0x280 hrtimer_interrupt+0x100/0x210 ? ttwu_do_wakeup+0x19/0x160 smp_apic_timer_interrupt+0x6a/0x130 apic_timer_interrupt+0xf/0x20 </IRQ> Более того, если приостановка длительности виртуальной машины недостаточно долго чтобы вызвать жесткий замок в этом сценарии, так как совершите 98c25ead5eda («KVM: VMX: Переместить упреждающий таймер <=> hrtimer dance to common x86»), KVM будет продолжать использовать таймер программного обеспечения до тех пор, пока гость не перепрограммирует APIC таймер в некотором смысле. Так как периодический таймер не требует частого APIC таймер регистр программирования, гость может продолжать использовать программное обеспечение таймер в ---усеченный---
Программный продукт не обеспечивает надлежащего захвата или освобождения блокировки ресурса, что приводит к непредвиденным изменениям состояния ресурса и нештатному поведению.
https://cwe.mitre.org/data/definitions/667.html →Открыть в коллекции CWE →Злоумышленник провоцирует и эксплуатирует состояние взаимоблокировки в целевом программном обеспечении, чтобы вызвать отказ в обслуживании. Взаимоблокировка может возникнуть, когда два или более конкурирующих действия ожидают завершения друг друга и в итоге ни одно из них не завершается. Состояния взаимоблокировки бывает сложно обнаружить.
https://capec.mitre.org/data/definitions/25.html →Открыть в коллекции CAPEC →Злоумышленник нацеливается на состояние гонки, возникающее когда несколько процессов одновременно обращаются к одному ресурсу и манипулируют им, а результат выполнения зависит от конкретного порядка этих обращений. Злоумышленник может эксплуатировать состояние гонки, «участвуя в гонке»: изменяя ресурс и нарушая нормальный порядок выполнения. Например, состояние гонки может возникнуть при обращении к файлу: злоумышленник может обмануть систему, подменив исходный файл своей версией и заставив систему прочитать вредоносный файл.
https://capec.mitre.org/data/definitions/26.html →Открыть в коллекции CAPEC →Данная атака эксплуатирует использование символических ссылок (Symlink) для записи в конфиденциальные файлы. Злоумышленник может создать символическую ссылку на целевой файл, к которому у него нет прямого доступа. Когда привилегированная программа пытается создать временный файл с тем же именем, что и символическая ссылка, она фактически записывает данные в целевой файл, на который указывает символическая ссылка злоумышленника. Если злоумышленник может поместить вредоносное содержимое во временный файл, он тем самым запишет его в конфиденциальный файл через символическую ссылку. Состояние гонки возникает потому, что система проверяет существование временного файла, а затем создаёт его. Злоумышленник, как правило, создаёт символическую ссылку в промежутке между проверкой и созданием временного файла.
https://capec.mitre.org/data/definitions/27.html →Открыть в коллекции CAPEC →| Продукт | Вендор | Статус |
|---|---|---|
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux-5.10 | Отслеживается | |
| linux-6.1 | Отслеживается | |
| linux-allwinner-5.19 | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается |