[ << ALL_FEED ]

Not a Pwn2Own bug

Ещё в группе «Общее»

Not a Pwn2Own bug 🙂

CVE-2024-43641: ошибка типа CWE-190 позволяла переполнить счетчик ссылок на экземпляр _CM_KEY_SECURITY. Уязвимый код располагался в ntoskrnl.exe — в функции CmpSetSecurityDescriptorInfo (скриншот 1).

Для того чтобы достигнуть уязвимого кода, необходимо открыть или создать ключ реестра в режиме транзакций. Сделать это можно через функцию RegCreateKeyTransacted. Так как нет ограничения на количество операций, которые могут быть записаны в рамках одной транзакции, мы можем последовательно вызывать функцию NtSetSecurityObject. И каждый такой вызов будет увеличивать счетчик ссылок на 1.

Для того чтобы уязвимость «сдетонировала», необходимо прокрутить значение счетчика ссылок так, чтобы его значение стало меньше реального количества операций, записанных в рамках транзакции. Если это условие будет соблюдено, то после транзакции ячейка _CM_KEY_SECURITY будет освобождена раньше, чем закончатся операции, которые нужно завершить, что приведет к использованию освободившейся памяти (скриншот 2).

На третьем скриншоте — часть функции CmpDereferenceSecurityNode, отвечающая за уменьшение числа ссылок и освобождение _CM_KEY_SECURITY.

🩹 О патче

Патч переработал то, как подсистема Cоnfiguration Manager (СM) работает со ссылками на _CM_KEY_SECURITY, добавив как минимум две новые функции — CmpKeySecurityDecrementReferenceCount и CmpKeySecurityIncrementReferenceCount, которые теперь будут выдавать bugcheck, если количество ссылок станет равным нулю или после инкремента их будет меньше, чем до (скриншот 4).

К счастью, вряд ли уязвимость можно отнести к эксплуатабельным, так как, чтобы переполнить счетчик ссылок, последовательно увеличивая его на 1, потребуется очень много времени, да и окно, в рамках которого у нас есть возможность «подсунуть» что-то, слишком маленькое и неконтролируемое.

#cve #escvr
@ptescalator

Ещё от author_vr

Ещё от author_vr

Ещё в группе «Общее»