Уязвимость обнаружил Андрис Аттека (Andris Atteka) и детально описал поведение браузера в своем блоге. Пользователь отмечает, что впервые зафиксировал падение версии браузера Chrome для Windows. Другие пользователи позднее сообщили, что аналогичное происходит и в версиях для OS X и Linux, а также Opera на движке Chromium 45. При этом Chrome для Android при переходе или наведении на ссылку работает корректно, без сбоев.
Как же «уронить» Chrome? Достаточно в конце любой строки, который браузер воспримет, как ссылку, добавить комбинацию %%300 (даже http://a/%%300 или d:/// %%300). Мы специально не делаем ссылки активными, однако вы можете скопировать их в адресную строку и лично убедиться в наличии уязвимости.
Почему так происходит? В сочетании — оригинальный символ «%» идет первым в строке, затем следует конвертированный «0» таблицы ASCII, который получается из выражения «%30», и оригинальный «0». Эта комбинация («%00»), в свою очередь, конвертируется в нулевой байт. Будучи добавлен в конце строки, он вместе с остальными символами из URL принимается функцией движка Chromium GURLToDatabaseURL(), которая вызывает другую функцию — ReplaceComponents(). В результате адрес обрабатывается повторно, но уже с нулевым байтом в конце, и система понимает, что в данном случае URL некорректен. Она возвращается к функции GURLToDatabaseURL(), ожидающей, что ссылка будет работать. А так как ссылка не работает, в Chromium возникает невозможное событие; в итоге вызывается функция DCHECK(), и за этим следует падение программы.
Однако пользователи нашли, как обратить уязвимость в источник развлечений. Энтузиасты создали игру по мотивам ошибки. В ней курсором нужно провести по дорожке из медведей, не касаясь елей. Под изображениями деревьев проставлены «роняющие» Chrome ссылки, так что как только вы наводите на них курсор, вкладка перестает работать. Игра доступна на GitHub: https://github.com/szhu/3030/tree/master.
Расскажите друзьям об уязвимости — поделитесь материалом в социальных сетях ⇩