Крах Chrome при обработке ссылок c экранированным нулевым символом

В Chrome, Chromium, Opera и других браузерах на основе кода Chromium выявлена проблема, позволяющая инициировать крах браузера при открытии ссылок, содержащих экранированное представление нулевого символа. Крах наблюдается при открытии ссылок с %%300 или %%30%30 в URL, например, «http://a.com/%%300», «file:///%%300″,
http://a.com/%%30%30» и т.п. При наведении курсора на проблемную ссылку закрывается лишь текущая вкладка, но клик на ссылке приводит к закрытию браузера целиком.

Прямое использование «%00» в ссылках запрещено и вырезается на этапе разбора ссылки. Но косвенная передача нулевого кода оказалась возможной. При обработке ссылки последовательности «%%300» (%+%30+0) и «%%30%30» преобразуются в «%00» («http://a.com/%00»), после чего передаются в вызов GURLToDatabaseURL(), внутри которого также вызывается функция ReplaceComponents(), предназначенная для удаления из ссылки информации логине и пароле. Внутри ReplaceComponents() дополнительно производится вторичная распаковка экранированных последовательностей, в результате которой «%00» превращается в символ с нулевым кодом. При возвращении в функцию GURLToDatabaseURL() выполняется вызов .spec(), который считает, что на вход передаётся корректный URL, но так как конец строки был сдвинут URL оказывается повреждён, что приводит к срабатыванию макроса DCHECK() и краху браузера.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.