По сообщению The Register, в новой версии Google Chrome обнаружена программная ошибка, приводящая к краху приложения при вводе определенных URL. Даже удержание курсора мыши над адресом на веб-странице или переход по ссылке из стороннего приложения способны вызвать закрытие всего браузера либо активной вкладки.

Андрис Аттека (Andris Atteka), обнаруживший проблему на прошлой неделе, написал об этом в свой блог и заполнил баг-репорт. «Увы, награды за это я не получил, так как это лишь уязвимость, приводящая к отказу в обслуживании, — написал Аттека. — И все-таки делать защищенное программное обеспечение гораздо сложнее, чем находить в нем ошибки. Спасибо Google».

Что интересно, этот баг вызывает фатальное исключение (SIGTRAP), а не обычную ошибку доступа к памяти, которая вызывается с помощью переполнения буфера, повреждения динамической области или схожими проблемами. Это означает, что некая часть исполняемого файла вообще не должна была исполняться в нормальных условиях.

Последовательность «%%300» в конце URL конвертируется в «%00», так как «0x30» — ASCII-код символа «0». Поэтому «%%300» превращается в строку, состоящую из изначального «%», сконвертированного «0» и изначального «0». Это добавляет байт NULL в конце адресной строки.

chromeurlПолучившийся URL передается функции GURLToDatabaseURL(), которая вызывает ReplaceComponents(). В результате URL обрабатывается снова, уже с байтом NULL. Функция определяет, что адрес некорректен, и помечает URL соответственно.

Исполнение возвращается к функции GURLToDatabaseURL(), которая ожидает, что URL все еще действителен, и передает его функции spec(). Но так как URL недействителен, при вызове DCHECK() программа вызывает ошибку, даже в релизной версии.

То есть при вводе такого URL тем или иным способом браузер отправляет адрес, помеченный как недействительный, компоненту, который ожидает только действительных адресов.

На данный момент проблема помещена в систему отслеживания багов Chromium, команда разработчиков ведет работу над исправлением.

Категории: Уязвимости