Незнаю, была эта тема или нет... лень искать.
По хорошему это надо в Bugzilla отправить, но я не силен в английском - буду благодарен если кто-то это сделает с пометкой - критическая уязвимость или переведет этот текст, а я отправлю сам.
Всё ниже описанное относится к текущему релизу 40.0.3, очень вероятно что это касается прошлых версий, и, возможно, Nightly

Теперь к делу:
Знакомый товарищ поймал adware-вирус.
Вирус был благополучно уничтожен после свежего обновления антивирусных баз, но Firefox стал странно себя вести: на каждой странице стало очень много рекламных баннеров

После детального изучения папки c:\Program Files (x86)\Mozilla Firefox\ был обнаружен файл cfg (без расширения):
c:\Program Files (x86)\Mozilla Firefox\cfg

Внутри файла код, который на каждую страницу внедрял подгружаемый javascript
Продолжив изучение, так же был обнаружен файл, который этот cfg запускает: c:\Program Files (x86)\Mozilla Firefox\defaults\pref\pref.js

Итак, моделируем ситуацию.
создаем файл pref.js в каталоге c:\Program Files (x86)\Mozilla Firefox\defaults\pref\
с таким содержимым:

Выделить код

Код:

pref('general.config.filename', 'cfg');
pref('general.config.obscure_value', 0);

создаем файл cfg в каталоге c:\Program Files (x86)\Mozilla Firefox\
с таким содержимым (первая строка пустая, вторая комментарий):

Выделить код

Код:

// First line is ommited
try{
(function () {
       var _handleDocumentElementInsterted = function (a) {
            if (a && a instanceof Components.interfaces.nsIDOMHTMLDocument) {
                var b = a && a.defaultView ? a.defaultView : null;
        b.alert('injected!');
            }
        };

    var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
    observerService.addObserver({
        QueryInterface: function (a) {
            if (a.equals(Components.interfaces.nsIObserver) || a.equals(Components.interfaces.nsISupports) || a.equals(Components.interfaces.nsISupportsWeakReference)) return this;
            throw Components.results.NS_NOINTERFACE;
        }, observe: function (a, b, c) {
            try {
                "document-element-inserted" === b && _handleDocumentElementInsterted(a)
            } catch (d) {}
        }
    }, "document-element-inserted", !1);

})();
} catch(e){
}

перезапускаем браузер и ву-а-ля!
после загрузки любой страницы будет алерт с сообщением 'injected!'

Итого:
В то время как космические корабли бороздят по просторам вселенной как Mozilla выдумывает электронные подписи для аддонов, у нее существует уязвимость, благодаря которой можно сделать всё что угодно, так как исполняемый скрипт действует с высокими правами.
Поясняю: любая программа (в том числе и вирусы) могут внедрить в браузер js-код, который наделен такими правами, что может делать всё что угодно, начиная от описанного выше способа вставки баннеров, до тихой закачки любого exe и его запуска.

PS:
в описываемом случае браузер был проинсталлирован в "c:\Program Files (x86)\Mozilla Firefox\", но это так же действительно и для "c:\Program Files\Mozilla Firefox\"

Причем тут вообще Мозилла, не смешите :D Это батенька венда с ее возможностью писать кому угодно, что угодно и куда угодно.

при чем тут операционная система?
вирус не подменил какую-то dll и не прописался в каком-то файле.
он просто воспользовался штатными не документированными возможностями браузера!
это именно браузер предоставляет возможность написать и исполнить что угодно.
и мне кажется, что создав pref.js и cfg на макбуке или линуксе вы получите тот же эффект.

pag77 пишет

при чем тут операционная система?

>>

j15 пишет

венда с ее возможностью писать кому угодно, что угодно и куда угодно.

pag77 пишет

штатными не документированными возможностями браузера!

>> http://kb.mozillazine.org/Locking_preferences

Скушно с вами..

j15 пишет

>> http://kb.mozillazine.org/Locking_preferences

Скушно с вами..

я б может и не создал бы этот топик, если бы в этом году Мозилла не объявила и не внедрила электронные подписи аддонов, из-за того что:
1. злоумышленник может создать зловредный аддон и внедрить его в браузер
2. злоумышленник может внести изменения в уже установленные пользователем дополнения

поэтому мне показалось очень странным, что Мозилла прошла мимо именно этого случая, описанного выше.
не нужен ни аддон, ни подпись - прописал свой js-код и делай на компьютере пользователя что угодно, даже если сам зловредный exe фактически был удален из компьютера жертвы.
вот я и хочу донести до них мысль о том что они что-то забыли :)

17-09-2015 20:55:12

j15 пишет

>> http://kb.mozillazine.org/Locking_preferences

PS:
в этой статье не написано , что кроме установки предпочтений можно написать любой исполняемый js-скрипт
значит это всё-таки уязвимость! :)

Да сам pref.js исполняется при запуске, можно прям туда записать что угодно))

pag77 пишет

в этой статье не написано , что кроме установки предпочтений можно написать любой исполняемый js-скрипт

Не написано, т. к. это вообще-то очевидно: prefs.js, а например не prefs.txt или prefs.ini.

pag77 пишет

при чем тут операционная система?вирус не подменил какую-то dll и не прописался в каком-то файле.он просто воспользовался штатными не документированными возможностями браузера!это именно браузер предоставляет возможность написать и исполнить что угодно.и мне кажется, что создав pref.js и cfg на макбуке или линуксе вы получите тот же эффект.

Браузер уязвим, если вы нажимаете на ссылку и после этого ваш браузер уже завирусован. то что Firefox имеет незашитые настройки наоборот говорит о его пластичности и возможностях.

Уязвимости как таковой действительно нет. Для проведения таких махинаций нужны права администратора компьютера. Это значит, что компьютер уже и так полностью контролируется злоумышленниками - они могли бы даже заменить Firefox другой программой.

Другое дело, что обязательные подписи для расширений предназначены как раз для того, чтобы программам было сложнее "угнездиться" в браузере. Оставлять при этом другие простые возможности выполнять код в браузере нецелесообразно. Помимо того, мне не кажется, что здесь действительно было задумано позволять выполнение программного кода с правами пользователя. Так что я создал сообщение на Bugzilla: https://bugzilla.mozilla.org/show_bug.cgi?id=1205779 (доступ пока что ограничен, но, возможно, в Mozilla решат, что это на самом деле не нужно).

j15 пишет

Не написано, т. к. это вообще-то очевидно: prefs.js, а например не prefs.txt или prefs.ini.

Вы ошибаетесь. Изначально действительно использовался JavaScript, но выполнение кода в prefs.js уже давно невозможно. А вот в этом конфигурационном файле - вполне даже да.

Владимиp Палант пишет

Оставлять при этом другие простые возможности выполнять код в браузере нецелесообразно.

Точно, давайте вообще сделаем из него второй Хром, чтобы туповатому юзверью проще жилось! :lol:

Владимиp Палант пишет

Вы ошибаетесь.

Я делаю предположение! :) И только. Спасибо за пояснение.

создаем файл cfg в каталоге c:\Program Files (x86)\Mozilla Firefox\

этого хватит. Если юзер может создать файл в этом каталоге , то причем тут "уязвимость" бравзера?! После установки в эту папку бравзеру нефиг туда писать, только читать. Писать - пусть пишет в профиль и темп.

pag77 пишет

1. злоумышленник может создать зловредный аддон и внедрить его в браузер
2. злоумышленник может внести изменения в уже установленные пользователем дополнения

Нетленка Хакер в столовой  :D

Владимиp Палант пишет

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

именно так и есть - если не сделать магические движения:

pag77 пишет

создаем файл cfg в каталоге c:\Program Files (x86)\Mozilla Firefox\
с таким содержимым (первая строка пустая, вторая комментарий):

то браузер просто не запустится.
и только при вставке этих двух строк можно исполнить любой js-код

pag77
Ну, насчет первой строки как раз всё ясно - она игнорируется. Там предполагается ставить что-то, что интерпретатор JavaScript не примет, чтобы этот файл нельзя было загрузить в обычную страницу. Это такая своеобразная защита (с современными защитными механизмами браузера уже не нужная, насколько я понимаю). А вот почему у вас браузер без комментария не запускается - тут особых причин я не вижу, может просто ошибка синтаксиса?

Со стороны Mozilla подтвердили, что выполнение кода тут все-таки предусмотрено. В документации (https://developer.mozilla.org/en-US/Fir … figuration) это, правда, упомянуто только косвенно (см. последнюю строчку примера), но там ссылка на https://mike.kaply.com/2012/03/16/custo … fig-files/, где такая возможность описана весьма конкретно. Судя по всему, крупные фирмы с центральной администрацией этой возможностью действительно пользуются.

Владимиp Палант
А какие "итого"?
Они закроют эту щель или нет?
Просто интересная ситуация получается: они ввели подписи к аддонам и, в то же время, оставили злоумышленникам такую дыру.
Кстати, просто переустановка браузера (поверх установленного или обычный деинсталл/инсталл) не поможет - инсталлятор заменит все файлы, кроме тех которые изначально созданы пользователем (pref.js, cfg) - в следствии чего зловред останется и дальше жить и выполнять свою работу.

Поможет только деинсталляция, потом руками удалить каталог с браузером и только потом инсталляция.

pag77 пишет

Просто интересная ситуация получается: они ввели подписи к аддонам и, в то же время, оставили злоумышленникам такую дыру.

Это смешно, достаточно прав на запись в папку профиля: XBL в виде data URI отлично работает из userChrome.css.
И выполняет произвольный код с правами браузера, да.
В любом случае с правами на запись можно много чего наворотить.
А для подписания расширения, вроде бы, достаточно пройти автоматизированный тест. А уж простор для обфускации кода просто огромен.
Плюс еще расширения, позволяющие запускать произвольный код придется запретить. Stylish тоже запретить, потому как и он позволяет привязать XBL. И не стоит забывать про уязвимости в расширениях, которые можно специально встроить.

Да ну.. вендузятники готовы валить все свои проблемы на что угодно, кроме их настоящего источника - ОС Microsoft ™ Windows ® :lol:

Подцепить вирус даже в Windows достаточно сложно, нужно скачать неизвестную программу и запустить её. На практике опасные уязвимости, которые не требуют действий пользователя срабатывают очень редко.
Речь о Win7 SP1 и выше.

Infocatcher
С тем же успехом пришлось бы запретить и uBlock Origin и AdBlock Plus - возможно подсовывание подписок для блокирования рекламы или сайтов конкурентов. Как и Custom Button, как и iMacros.

pag77
Вы погорячились. Обнаружили плохо документированную возможность. Вот это интересно! Получается для простых скриптов GreaseMonkey не нужен. :D

Надеюсь её не выпилят. Кто там баг создавал? Удалите быстрее!!!


Эта штука с Android сработает? А то для него до сих пор нету GreaseMonkey работающего.

Infocatcher пишет

достаточно прав на запись в папку профиля: XBL в виде data URI отлично работает из userChrome.css.

Да-да, и userContent.css тоже «уязвим».
Открыл какой-нибудь "about:config", и оказался во власти «злоумышленника»
with(Application.windows[0]._tabbrowser.ownerGlobal) {...

pag77 пишет

А какие "итого"?

Решения пока нет, ждем.

извините,не удержался.
вы логику включать хоть немножко пробовали?
если у программы есть права на запись\выполнение в какойто папке то она может делать там ВСЁ!
ещё раз повторю ВСЁ! зачем все эти извращения со скриптами и прочем когда можно "поправить"  ЛЮБОЙ файл?
да можно хоть миллион раз сносить и переустанавливать ФФ и профиль,
только если по ярлыку запускается затрояненый лис в другой папке толку с этого ноль.
тоже самое можно сделать с любой другой программой.
какая тут нафиг уязвимость в ФФ? это стандартная возможность любой операционки(в т.ч. и линуксов).
если к посетителю в ресторане подошли и удалено в тарелку, то в том, что он потом наелся удалено вместо фуагры виноват повар чтоль?
мозг включите наконец!

Замечание п. 3.3
Sergeys

j15 пишет

Да ну.. вендузятники готовы валить все свои проблемы на что угодно, кроме их настоящего источника - ОС Microsoft ™ Windows ® :lol:

Да, лана. :music: В винде можно закрыться не хуже чем в линухе. Просто в линухе это принудительно, а в винде сознательно делают послабления в стандартной конфиг-ции. Отсюда все байки про "дырявую винду". Отсюда же её популярность. Все средства и способы в винде есть шобы жить без онтевирусов. Другое дело что юзеры M$ уже воспитаны так что бы не думать.

Похоже что я погорячился и зря поднял панику - просто я не ожидал что браузером можно полноценно рулить через конфигурационный файл, без всяких аддонов.
Жаль только, что эти конфиг файлы похоже не отключаются и в безопасном режиме (когда у фф отрубаются все аддоны и т.д.)
Примите мои извинения :)

jars
Хуже, намного. Если для корпораций сгодится, там MS сама ответит если уворует, то вот частому пользователю все эти закладки в том же встроенном шифровальщике, чтобы АНБ могла расшифровать - нет. В смысле эти же закладки могут найти и использовать хакеры, тогда как в linux стремятся к их полному отсутствию вообще, а не спрятать поглубже.
Я не говорю о преступлениях, то что разрешено в одной стране может быть запрещено в другой и посадить могут за банальное незнание при пересечении границы.

Тема закрыта.