кивибердное 05.05.08 20:47 // оригинал
Иногда о безопасности можно писать из общих соображений. Иногда же нужно иметь представление о программировании, иначе получается такое.
1. "С присущей компьютерам проблемой переполнения буфера памяти мир безопасности вплотную познакомился" вовсе не в 1996 году, а существенно раньше. Срыв стека использовался еще в вирусе Морриса, а известен был задолго до того.
2. NULL pointer, особый указатель адреса памяти с несуществующим значением - помимо кривого определения, имеет весьма косвенное отношение к описываемой уязвимости ("если эти самые NULL-указатели так опасны, почему их до сих пор используют в кодах программ, вместо того чтобы от них отказаться?" - mamma mia). "Есть возможность заставлять некоторые приложения обращаться к произвольным адресам памяти и выполнять соответствующие коды всякий раз, когда происходит доступ к NULL pointer" - полнейший бред (жило себе приложение, с какого-то бодуна спокойно обращалось к нулевым адресам, игнорируя аппаратные исключения, и вдруг нашли способ его в этот момент обмануть - так, что ли?).
3. Уязвимость в flash-плейере в принципе не относится к типу "переполнение буфера памяти" и вряд ли может быть названа принципиально новой. Используется в ней хорошо известное целочисленное переполнение (большим unsigned int соответствуют отрицательные signed int, чем можно играть при смешивании unsigned/signed операций), которое приводит к тому, что функция выделения памяти получает в качестве параметра отрицательное число и возвращает тот самый NULL вместо осмысленного адреса памяти. Далее к возвращенному значению (отсутствие проверки на NULL и является основным источником уязвимости) прибавляются различные смещения (формируемые на основе того же полученного извне большого unsigned int), что и дает возможность писать в более-менее производные адреса памяти.