11 мая 2010 года в паблике была обнародована информация об уязвимости в Adobe Shockwave Player существующая вплоть до версии 11.5.6.606. По описанию этой баги (читаем тут http://www.zeroscience.mk/en/vulnerabilities/ZSL-2010-4937.php) уязвимость присутствует в дллке DIRAPI.DLL, относится к классу переполнения буфера и позволяет злоумышленниику выполнить атаку удаленного выполнения кода или DoS’а при открытии специально сформированного .DIR файла. Автор предлагает даже POC, написанный на Си, создающий зловредный .DIR файл. Однако, в паблике код привиден с ошибками, по ссылке привожу исправленный мною вариант.
Код компилируем, запускаем и получаем необходимый .dir файл. При открытии в броузере IE вылетает ошибка, смотрим в отладчике почему и видим Access violation to read… Тупо меняю в функции memset значение 0×41 на другие значения, изменяю size_junk на большие значения – все также эксепшн из-за ошибки чтения по адресу такому-то. Меняются регистры, но не eip, вызов виртуальных функций (а-ля call eax) вблизи не видно (где-то там вдалеке правда такой вызов виднелся))). Ну хорошо, обойти ошибку чтения по адресу не удается путем изменения значения заполняющего переполняемый буфер (в коде выше в функции memset), чтож попробуем несуществующие области памяти создать путем heap spray техники. Создаем html страничку, в которой будет открываться зловредный .DIR файл и… облом, .DIR’ы в хтмл не вставляются, только .DCR файлы. Если провести аналогию с флэшем, то .DIR это типа .FLA файлы, а .DCR – это какбы .SWF файлы. А дальше тупик… Ошибка в dirapi.dll модуле и компиляция dir’а в dcr ни к чему не приведет.
Возможно ли выполнение кода через эту уязвимость на современных системах!?? Я такую возможность к сожалению не нашел…