пятница, 6 июля 2012 г.

Игры с JIT или эксплуатация CVE-2012-1723

Со времен активной эксплуатации уязвимости CVE-2012-0507 мало что изменилось и Java по прежнему остается самым популярным вектором, использующимся в популярных наборах эксплойтов. Буквально вчера появилась публичная информация об использовании CVE-2012-1723 в наборе эксплойтов BlackHole, а ведь сама уязвимость была только недавно найдена в середине июня и публичных реализаций эксплойта она не имеет. Почему же такое пристальное внимание к Java уязвимостям и они настолько оперативно попадают в наборы эксплойтов?

Все дело в том, что  Java-уязвимости довольно просто эксплуатируются и не требуют обхода DEP/ASLR и прочих механизмов безопасности. А в большинстве случаев при небольшой адаптации эксплойт может стать еще и кроссплатформенным. К примеру сделать стабильный эксплойт под тот же CVE-2012-1889 в разы сложнее. Да, собственно и разбираться с работой самой уязвимости тоже. Все, что я видел из боевых эксплойтов для CVE-2012-1889 работали с кучей допущений на Win7/Vista и по большей части эффективнее всего пробивали только WinXP.



Но, все же вернемся к теме этого поста и поговорим о CVE-2012-1723. Уязвимость довольно интересная, так как основана на коллизии в JIT-компиляторе, которая в итоге позволяет выполнить произвольный код за пределами песочницы. Итак, необходимо создать несколько статических полей (в эксплойте их 100), затем столько же обращений к этим полям и в итоге происходит задержка JIT-компиляции этого кода на стадии верификации.


В итоге все эти манипуляции позволяют выполнить произвольный апплет в обход проверок безопасности за пределами песочницы.


Вот видео с демонстрацией работы боевого эксплойта из набора BlackHole: