В рамках ежемесячного просмотра свежезапатченных уязвимостей мы в команде ESC-VR обращаем пристальное внимание на уязвимости, помеченные как эксплуатируемые в дикой природе. Такие уязвимости становятся нашей главной целью, особенно если отсутствует какая бы то ни было информация о публичных эксплойтах.
Уязвимость CVE-2024-38178 — это повреждение памяти типа Type Confusion (CWE-843). Говоря по-простому: ситуация, когда область памяти, занимаемая объектом типа A, интерпретируется кодом как объект типа B.
Проанализировав патч, мы обнаружили, что изменения сделаны в функции, отвечающей за оптимизацию работы с массивами, в частности в функции
GlobOpt::OptArraySrc
. После исправления добавилась обработка ситуации, когда оптимизатор не замечает, что иногда тип переменной может изменяться в runtime
.Если вы следите за деятельностью
Google ProjectZero
так же активно, как и мы, то вы уже обо всем догадались 😉Функция
GlobOpt::OptArraySrc
уже фигурировала в ITW-эксплойте, а именно в посте, описывающем CVE-2022-41128. В посте есть
PoC
, который демонстрирует эксплуатацию CVE-2022–41128. Взяв из него ключевые строки, мы провели поиск в публичных и приватных источниках по файлам, загруженным недавно, используя следующие подстроки:•
6E6577204F626A656374287B0D0A20
•
206E657720496E7433324172726179
Мы нашли всего один файл. Он был загружен из
KR
, и эксплойт, вероятно, использовался в атаках в этой стране, о чем косвенно свидетельствует информация из бюллетени Microsoft. Прогнав файл в системах с патчем и без него, мы быстро поняли, что это именно то, что мы искали. В связи с большой схожестью с CVE-2022-41128 мы считаем, что и эта уязвимость была найдена через фаззинг, который проводился с использованием
PoC
для CVE-2022-41128 и CVE-2021-34480.Эксплойт создает ситуацию, когда JIT-компилятор убежден, что переменная X имеет тип
js::TypedArray<int,0>
, но на самом деле X содержит значение Y типа js::DynamicObj
. Далее эксплойт использует доступ по индексу 4, 11, 12, чтобы модифицировать внутренние поля массива js::JavaScriptNativeArray
, находящегося в одном из свойств значения Y. Модифицируемые поля хранят размер массива. В результате эксплойт дает возможность для доступа за пределы этого массива для того, чтобы получить примитивы на относительную запись и чтение. Дальнейшее описание заняло бы неприлично много места в рамках поста, поэтому stay tunned и happy hunting 🙂
YARA-правило (на файл):
rule exploit_CVE_2024_38178 {
strings:
$a = { 6E6577204F626A656374287B0D0A20 }
$b = { 206E657720496E7433324172726179 }
condition:
all of them
}
IoCs:
SHA256: 736092B71A9686FDE43D3C4ABD941A6774721B90B17D946C9D05AF19C84DF0A4
http://img[.]mobonad[.]com/images/20230912/43
#escvr #itw #jscript9 #reverse
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM