The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

07.10.2014 13:25  В Bugzilla устранена опасная уязвимость, открывшая новый вид атак на web-приложения

В выпусках 4.0.14, 4.2.10, 4.4.5 и 4.5.5 системы для ведения базы данных ошибок, контроля за их исправлением и общего координирования процесса разработки Bugzilla устранена опасная уязвимость (CVE-2014-1572), позволяющая поднять свои привилегии и получить доступ к закрытым группам. Теоретически аналогичные ошибки могут присутствовать и в других проектах на языке Perl, использующих модуль CGI.pm и заполняющих хэши неэкранированными значениями функции param.

Проблема вызвана непониманием особенности разбора повторяющихся параметров в URL - в случае передачи скрипту нескольких параметров с одинаковым именем, функция param модуля CGI.pm возвращает не скалярную переменную, а массив, в котором перечислены все значения подобных параметров. При заполнении хэша открытым списком по сути производится перечисление пар ключ/значение (символ "=>" в присвоении вполне может быть заменён на запятую), поэтому если вместо одного из аргументов передан массив и этот аргумент не экранирован, то можно перечислить в данном массиве имена ключей и их значение, и данные ключи будут определены в хэше.

Например, в случае запроса "index.cgi?realname=JRandomUser&realname=login_name&realname=admin@mozilla.com", переменная realname передаётся три раза, что приведёт к выдаче функцией param массива ("JRandomUser", "login_name", "admin@mozilla.com"). Если в коде присутствует присвоение "realname => $cgi->param('realname')", то по сути этот блок можно отождествить с конструкцией ("realname", "JRandomUser", "login_name", "admin@mozilla.com"), что аналогично представлению (realname => "JRandomUser", login_name => "admin@mozilla.com"), т.е. осуществлено определение нового ключа "login_name". Простейшим способом устранения проблемы является явное определение скалярного типа переменной, т.е. указание "realname => scalar $cgi->param('realname')".

Используя данный метод выявившие уязвимость исследователи безопасности смогли завести аккаунты с доступом к закрытым областям Bugzilla проекта Mozilla, обойдя стадию верификации почтового адреса. Уязвимость использовалась для передачи фиктивного email в момент определения группы пользователя - bugzilla автоматически назначает новых пользователей в группы, на основании проверки email (например, можно вместо реального адреса, заполнить поле значением в поддомене @mozilla.com, при том, что изначально для верификации использовался совершенно другой адрес).

Вектором атаки может быть получение доступа к записям, в которых отвечающие за безопасность команды разработчиков могут обсуждать ещё не исправленные уязвимости, до их придания огласке. Bugzilla достаточно широко используется для координации внесения исправлений в открытых проектах, например, применяется сообществами Apache, LibreOffice, Mozilla, ядра Linux, OpenSSH, Eclipse, KDE, GNOME. Проблеме подвержены все установки Bugzilla начиная с версии 2.23.3, выпущенной в 2006 году.

Выявившие уязвимость исследователи указывают на то, что проблема не ограничивается Bugzilla и возможно присутствует в некоторых других web-проектах. Сама уязвимость рассматривается как новый класс атак на неаккуратно написанные web-приложения, сопоставимый по степени опасности с внедрением SQL-кода. При этом проблема не ограничивается Perl и может проявляться и в других языках с динамической типизацией.

  1. Главная ссылка к новости (http://krebsonsecurity.com/201...)
  2. OpenNews: Проект Mozilla объявил о возможной утечке 97 тысяч аккаунтов тестового сервера Bugzilla
  3. OpenNews: Релиз свободной системы отслеживания ошибок Bugzilla 4.0
Лицензия: CC-BY
Тип: Интересно / Проблемы безопасности
Ключевые слова: bugzilla
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Линейный вид | Ajax | Показать все | RSS
 
  • 1.1, Гость, 13:50, 07/10/2014 [ответить] [смотреть все]
  • +2 +/
    :-D красиво!
     
  • 1.2, онаним, 14:25, 07/10/2014 [ответить] [смотреть все]
  • +/
    fail. Удивительно, как можно делать столь сильные предположения о типе переменной в динамическом яп, особенно таком как перловка.
     
     
  • 2.17, bOOster, 15:34, 11/10/2014 [^] [ответить] [смотреть все] [показать ветку]
  • –1 +/
    Как можно вообще использовать в web языки с динамической типизацией что есть... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.19, vitalif, 20:12, 13/10/2014 [^] [ответить] [смотреть все]  
  • +/
    А ты чо, часто на сях сайтики пишешь D... весь текст скрыт [показать]
     
     
  • 4.20, Аноним, 11:49, 14/10/2014 [^] [ответить] [смотреть все]  
  • +/
    Так теперь основной объем дыр - в вебне и прочей скриптятине...
     
  • 1.3, Аноним, 15:13, 07/10/2014 [ответить] [смотреть все]  
  • –1 +/
    http://bloodhound.apache.org/

     
     
  • 2.12, vitalif, 18:57, 07/10/2014 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    https bh-demo2 apache org Proxy Error The proxy server received an invalid re... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.21, Аноним, 11:50, 14/10/2014 [^] [ответить] [смотреть все]  
  • +/
    Единственное чего полезного отсюда можно узнать - что про забивон апачистов на б... весь текст скрыт [показать]
     
  • 1.4, Аноним, 16:23, 07/10/2014 [ответить] [смотреть все]  
  • –3 +/
    >CGI.pm
    >2014
     
     
  • 2.14, анонимес, 19:52, 07/10/2014 [^] [ответить] [смотреть все] [показать ветку]  
  • +1 +/
    знакомые буквы увидел?
     
  • 1.5, vitalif, 16:24, 07/10/2014 [ответить] [смотреть все]  
  • +/
    Я всегда охреневал от людей, которые вообще CGI.pm используют. Его достаточно один раз открыть, чтобы понять, что его писал героиновый наркоман. Эталонный кусок перл-говнокода.

    И Bugzilla сама тоже хороша, я её форк пилю уже лет 5, планомерно говнокод (и CGI.pm тоже, ага) оттуда выкашивая. Хочу допилить и потом опубликовать где-нибудь с намёком на то, что "эй смотрите мазильщики, я тут ваш говнокод немного в чувство привёл"...

     
     
  • 2.15, Тупой молодец, 09:25, 09/10/2014 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    а им патчи отослать, не?
     
     
  • 3.18, vitalif, 20:10, 13/10/2014 [^] [ответить] [смотреть все]  
  • +/
    Бессмысленно, там столько переделано, что живого места нет. Даже если умудриться это как-то разбить на патчи (что просто АБСОЛЮТНО НЕРЕАЛЬНО), авторы изменения всё равно не примут.

    Да и не хочется уже ничего им отправлять, они там дикие говнокодеры, на некоторые вещи  реально страшно смотреть было.

    Даже смержить с 4.4 почти нереально (моя форкнута от 3.6). Хотя и невелика беда, там всё равно никаких масштабных фич не появилось.

    Я раньше ещё стеснялся и как-то ограничивал себя, чтобы совсем ВСЁ не перехреначивать - думал мержить же потом... а сейчас надоело и я просто переделываю ВСЁ, что мне отсвечивает.

    Хочу уже доделать и как форк зарелизить.

     
  • 2.22, Аноним, 11:51, 14/10/2014 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Да весь CGI - протокол для тех кто хочет по мелочи сэкономить сначала и много и ... весь текст скрыт [показать] [показать ветку]
     
  • 1.6, PavelR, 16:49, 07/10/2014 [ответить] [смотреть все]  
  • +/
    Я правильно понял, что надо написать примерно так:

    %hash = (key=>$cgi->param('key'));

    ??

     
     
  • 2.7, vitalif, 16:59, 07/10/2014 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Так НЕ надо писать... Надо писать %hash = (key => scalar $cgi->param('key'));

    Иначе если передать несколько значений key, то у тебя весь хеш "поедет" - контекст списочный, cgi->param вернёт список всех значений, и часть из них станет ключами, т.к. "=>" - синоним запятой.

    А ещё лучше ВООБЩЕ НЕ ЮЗАТЬ $cgi->param - даже если используется CGI.pm, то просто стырить себе куда-нибудь все параметры в виде хеша и хавать их оттуда. Причём $cgi->Vars возвращает криво tie'енный хеш, так что нужно просто в цикле вытаскивать все параметры.

    Ну или вообще юзать какой-нибудь PCGI.pm.

     
     
  • 3.8, PavelR, 17:03, 07/10/2014 [^] [ответить] [смотреть все]  
  • +/
    Эмм, я как раз и имел ввиду, что так писать не надо, и если так написать - то именно так и схватишь уязвимость. 0)

    В чем кривизна $cgi->Vars(), если это можно в двух словах описать?

     
     
  • 4.9, vitalif, 17:09, 07/10/2014 [^] [ответить] [смотреть все]  
  • +/
    Если у какого-то ключа несколько значений, то в $cgi->Vars значением этого ключа будут просто сконкатенированные все эти значения. Т.е. из строчки &a=1&a=1 получится { a => '11' }.
     
     
  • 5.10, PavelR, 17:44, 07/10/2014 [^] [ответить] [смотреть все]  
  • +/

    ух-ты, прикольно. Спасибо за разъяснение.)
     
  • 3.13, vitalif, 19:50, 07/10/2014 [^] [ответить] [смотреть все]  
  • +/
    А, кстати нет, с PCGI та же хрень - он вообще не умеет хеш значений вернуть...
     
  • 1.11, Аноним, 18:20, 07/10/2014 [ответить] [смотреть все]  
  • +/
    сам повысил свои привилегии, потом сам же и пофиксил с новыми привилегиями :)
     
     
  • 2.16, Аноним., 19:22, 10/10/2014 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Зря смеетесь. На практике был случай убираения проблемного демео скрипта bash как cgi через уязвимость shellshock
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:


      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor TopList