Окно с порносайтом случайно появляется при загрузке игры
Современные браузеры снабжены приватным режимом работы. Переключение в него означает открытие нового окна браузера, которое обладает рядом особенностей. Записанные браузере куки не будут учитываться при сёрфинге, а установленные нигде не останутся. Открытые в приватном окне страницы не попадут в историю. Не будут записываться введённые в формы данные, чтобы они не появились позже в автодополнении набора.
По окончании работы в режиме инкогнито пользователь может закрыть окно, будто ничего и не было. Но это «что-то» было, и есть множество способов выяснить, что. Эван Андерсон обратил внимание на ещё один: видеопамять графического ускорителя не обнуляет данные кадровых буферов.
Приватный режим имеет много сценариев использования: это просмотр порносайтов, необходимость дать другому человеку возможность быстро посмотреть почту или проверка неких технических моментов при веб-разработке. Во многих примерах использования важна приватность данных, то есть никто другой не должен узнать, куда заходил пользователь.
Хотя какие-то проблемы решаются, режим инкогнито не является панацеей. Многое могут знать те, кто обеспечивает доступ к информации: владельцы посещённых сайтов, провайдеры услуг связи. Что-то знают компании интернет-статистики. Совокупность установленных расширений в браузере составляет уникальный слепок, отслеживаемость которого можно проверить инструментом Panopticlick «Фонда электронных рубежей». Что-то остаётся в кэше запросов службы доменных имён.
Обычно такие способы подразумевают желание выяснить скрываемое. Пример Андерсона коварен случайностью утечки.
Андерсон посетил порноресурс в Google Chrome. Прошло несколько часов. Затем на том же компьютере была запущена игра Diablo III. Несколько секунд при загрузке главного меню на экране отображалось приватное окно браузера, вернее, его графическая составляющая. Член семьи Эвана даже успел сделать скриншот. Содержимое закрытого часы назад окна идеально сохранилось.
Контент был зацензурен.
Подобная утечка стала возможной благодаря тому, как работают драйверы видеоускорителя Nvidia. После передачи доступа к памяти от одного приложения другому драйвер не очищает память. После закрытия приватного окна фреймбуфер браузера Chrome попал в пул свободной памяти, но его содержимое не было удалено. Когда игра Diablo III запросила свой кадровый буфер, видеокарта дала доступ к тому, что раньше использовался браузером. Игра тоже не почистила содержимое буфера, поэтому на экране появился порносайт.
Другой бы быстро забыл этот казус с демонстрацией порнопристрастий членам семьи. Но Андерсон написал простое приложение, которое сканирует память на ненулевые пиксели. Так удалось идеально воссоздать окно браузера с открытым «Реддитом».
Как указывает Эван, баг удаётся воспроизвести на видеокартах AMD и Nvidia, но не встроенной графике Intel. Андерсон использовал Mac OS X. Подобное не всегда работает. Иногда получается каша с фрагментами окна.
Такая особенность работы драйверов не только допускает возможность подсматривания, но и означает случайные неприятные неожиданности при работе обычных приложений. Есть несколько решений. На стороне драйвера достаточно очищать фреймбуфер так, как операционная система очищает память при передаче доступа от одного приложения к другому. Браузер в свою очередь может обнулять буфер при выходе. В апреле Андерсон направил свои предложения как Nvidia (наверное, стоило бы также известить Apple), так и разработчикам Google Chrome.
На январь 2016 года Nvidia пока не внесла необходимые изменения. Разработчики Google Chrome отказались вносить изменения, странно аргументируя своё решение. Как они заявили, режим инкогнито не гарантирует сокрытие посещённых страниц от других пользователей компьютера.
Код приложения Андерсона для сканирования памяти приложен к баг-репорту в виде архива.