23-летний кодер изгнал призраков, вселившихся в Firefox более 20 лет назад

23-летний кодер изгнал призраков, вселившихся в Firefox более 20 лет назад

23-летний кодер изгнал призраков, вселившихся в Firefox более 20 лет назад

В начале прошлого месяца в код Firefox, отвечающий за всплывающие подсказки ссылки, были внесены изменения с целью устранения бага, известного с 2002 года. Фикс включен в сборку 119 браузера, выпуск которой намечен на 24 октября.

Проблему, которой был присвоен ID 148624, зарегистрировал в Bugzilla пользователь Juneappal (Adam Price), владелец macOS-компьютера с установленным браузером Mozilla. Прайсу надоели tooltip-подсказки, появлявшиеся при наведении курсора на закладку и подвисавшие при переходе в окно другого приложения.

 

Избавиться от них можно было, лишь сдвинув курсор и вернувшись в браузер. Впоследствии этот же баг пытались зарегистрировать и другие пользователи Firefox; иногда он проявлялся также на Windows- и Linux-платформах.

Поскольку фантомные подсказки не нарушали работу Firefox, а только вызывали раздражение, решение проблемы каждый раз откладывалось. Когда с ней столкнулся 23-летний выпускник Стэнфорда И Фань Чжу (Yifan Zhu), оказалось, что они почти ровесники.

Молодой человек был заинтригован и решил попробовать исправить ситуацию, благо лето и впереди куча свободного времени. Программированию Чжу был обучен, но никогда не имел дело с такими сложными проектами, как Firefox.

Первый блин оказался комом, хотя новичку-энтузиасту помогли детализировать патч и оформить коммит. Вторая попытка, тоже с посторонним участием, оказалась более удачной. Предложение Чжу было принято, соответствующие исправления внесены в код Firefox 119, который сейчас проходит бета-тестирование.

В соцсетях по этому поводу появились восторженные отзывы. Некоторые начали отпускать шутки вроде «а Bugzilla-то постарше бага будет, ей в августе стукнуло 25» и «фикс отнял добычу у ботов, собравшихся удалить неисправленный баг за давностью». Один комментатор описал жизненный путь борца за чистоту кода следующим образом:

«Наверно, он столкнулся с багом, еще когда был ребенком. Это задело его за живое, он пошел в университет, чтобы научиться программированию, окончил его, создал аккаунт и все пофиксил. Цель жизни исчерпана».

Расширения Chrome могут слить секреты URL через атаку по стороннему каналу

Как оказалось, расширения Chrome можно использовать для слива кодов авторизации, сеансовых ID и других секретов из URL любой открытой вкладки. Никаких специальных разрешений для этого не понадобится, только доступ к declarativeNetRequest API.

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

Правила обработки запросов при этом добавляются динамически, а фильтрация осуществляется по регулярным выражениям, соответствующим подмножествам знаков, которые могут присутствовать на определенных позициях в URL.

Исследователь Луан Эррера (Luan Herrera) обнаружил, что блокировку, диктуемую правилами, Chrome производит почти мгновенно, за 10-30 мс, а остальные запросы выполняются дольше (~50-100ms) — из-за сетевых подключений. Эту разницу во времени расширение может использовать для бинарного поиска с целью посимвольного слива URL.

// extensions/browser/api/web_request/extension_web_request_event_router.cc:1117-1127
case DNRRequestAction::Type::BLOCK:
  ClearPendingCallbacks(browser_context, *request);
  DCHECK_EQ(1u, actions.size());
  OnDNRActionMatched(browser_context, *request, action);
  return net::ERR_BLOCKED_BY_CLIENT;

Оракул для подобной тайминг-атаки строится с использованием chrome.tabs.reload для перезагрузки страницы и перехватчика chrome.tabs.onUpdated, помогающего отследить событие status === "complete". Замер времени между reload и завершением загрузки покажет, заблокирован запрос или успешно обработан.

Повторение проверок и бинарного поиска позволяет получить полный URL (с довеском после «?»), затратив на каждый знак строки несколько прогонов. Таким образом, можно незаметно для пользователя украсть включенные приложением в адрес секреты — токены OAuth и сброса пароля, API-ключи, ссылки на контент, закрытый для поисковых систем.

Проверка PoC проводилась на Windows 11 24H2 с использованием Chrome разных версий:

  • 144.0.7559.97 (Stable)
  • 145.0.7632.18 (Beta)
  • 146.0.7647.4 (Dev)
  • 146.0.7653.0 (Canary)

В Google подтвердили возможность подобной атаки по стороннему каналу, но заявили, что решить проблему нереально.

RSS: Новости на портале Anti-Malware.ru