Многолетняя ошибка безопасности была устранена практически во всех веб-браузерах — браузерах на базе Chromium, включая Microsoft Edge и Google Chrome, браузерах WebKit, таких как Safari от Apple, и Firefox от Mozilla.
Ей могут воспользоваться — и, как сообщается, это уже было — злоумышленники, чтобы получить доступ к программным службам, к которым у них не должно быть доступа. Это затрагивает вышеупомянутые браузеры на macOS и Linux — и, возможно, другие — но, по крайней мере, не на Windows.
Компания Oligo Security в этом месяце отметила уязвимость и назвала ее 0.0.0.0 Day, поскольку она связана с IPv4-адресом 0.0.0.0. И, похоже, злоумышленники злоупотребляли этой уязвимостью по крайней мере с конца 2000-х годов — судя по этой ветке Mozilla Bugzilla того времени, которая до сих пор считается открытой.
По словам Oligo, каждая из трех команд браузеров пообещала заблокировать весь доступ к 0.0.0.0, а также принять собственные меры по смягчению последствий, чтобы закрыть лазейку localhost.
Проблема проста: если вы открываете вредоносную веб-страницу в уязвимом браузере на уязвимой ОС, эта страница может отправлять запросы на 0.0.0.0 и порт по своему выбору. И если у вас есть серверы или другие службы, работающие локально на вашем компьютере на этом порту, эти запросы будут поступать на него.
Так что если у вас есть какая-то служба, работающая на вашей рабочей станции macOS или Linux на порту 11223, и вы предполагаете, что никто не может получить к ней доступ, потому что она находится за вашим брандмауэром, и что ваш известный браузер блокирует внешние запросы на localhost, предположите еще раз, потому что этот браузер направит запрос 0.0.0.0:11223 вредоносной страницы, которую вы посещаете, на вашу службу.
Это довольно длинный план, с точки зрения практической эксплуатации – но вы бы не хотели узнать на собственном горьком опыте, что какой-то сайт случайно попал в вашу локальную конечную точку. На самом деле, это криво и забавно, что это происходит в 2024 году.
Предполагается, что должны быть механизмы безопасности, чтобы не допустить доступа внешних веб-сайтов к вашему локальному хосту таким образом. В частности, спецификация Cross-Origin Resource Sharing (CORS), а затем более поздняя Private Network Access (PNA), которая используется браузерами для различения публичных и непубличных сетей и укрепления CORS путем ограничения возможности внешних сайтов взаимодействовать с серверами в частных сетях и хост-машинами.
Однако команде Oligo удалось обойти PNA. Исследователи создали фиктивный HTTP-сервер, работающий на 127.0.0.1, он же localhost, на порту 8080, а затем смогли получить к нему доступ с внешнего публичного сайта с помощью JavaScript, отправив запрос на 0.0.0.0:8080.
«Это означает, что публичные веб-сайты могут получить доступ к любому открытому порту на вашем хосте, не имея возможности увидеть ответ», — сообщил исследователь безопасности Oligo Ави Люмельски.
В ответ на это Chrome заблокирует доступ к 0.0.0.0, начиная с Chromium 128, а Google постепенно внедрит это изменение, которое будет завершено к Chrome 133. Apple внесла изменения в свое программное обеспечение с открытым исходным кодом WebKit, которые блокируют доступ к 0.0.0.0.
У Mozilla нет немедленного исправления, и она не реализовала PNA в Firefox. По словам Ольджио, Mozilla изменила спецификацию Fetch (RFC), чтобы заблокировать 0.0.0.0 после своего отчета.
Представитель Mozilla отправил The Registerследующее заявление по электронной почте:
Мы знаем, что существуют службы, развернутые на хостах или в локальных сетях, которые уязвимы для атак с веб-сайтов. Эти службы полагаются на недоступность как на единственное средство защиты. Протокол CORS содержит меры защиты от этого риска, но эти меры защиты содержат ряд ключевых исключений, которые были сочтены необходимыми для предотвращения нарушения ранее существовавшего использования.
Неуказанный адрес («0.0.0.0» в IPv4 или «::» в IPv6) иногда можно использовать как средство доступа к службе на устройстве вместо «петлевого» адреса «localhost», «127.0.0.1». или «::1». Таким образом, использование неопределенного адреса является частным случаем этой более общей проблемы.
Mozilla поддерживает усилия по повышению безопасности этих уязвимых сервисов путем улучшения ограничений в CORS. Однако мы понимаем, что введение более жестких ограничений сопряжено со значительным риском возникновения проблем совместимости. Поскольку обсуждение стандартов и работа над пониманием этих рисков совместимости продолжаются, Firefox не реализовал ни одного из предложенных ограничений. Мы планируем продолжать участвовать в этом процессе.
По словам Олиго, это исследование дает веские аргументы в пользу PNA.
«Пока PNA не будет полностью развернута, общедоступные веб-сайты смогут отправлять HTTP-запросы. использование Javascript для успешного доступа к сервисам в локальной сети», — написал Лумельски. «Чтобы это изменить, нам нужно, чтобы PNA был стандартизирован, и нам нужны браузеры, чтобы реализовать PNA в соответствии с этим стандартом». ®