top
logo


В BugZilla устранена опасная уязвимость, позволяющая повысить свои привилегии PDF Печать E-mail
07.10.14 10:25

В выпусках 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= Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. ", переменная realname передаётся три раза, что приведёт к выдаче функцией param массива ("JRandomUser", "login_name", " Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. "). Если в коде присутствует присвоение "realname => $cgi->param('realname')", то по сути этот блок можно отождествить с конструкцией ("realname", "JRandomUser", "login_name", " Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. "), что аналогично представлению (realname => "JRandomUser", login_name => " Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. "), т.е. осуществлено определение нового ключа "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 году.

  1. Главная ссылка к новости (http://krebsonsecurity.com/2014/10/bugzi...)
  2. OpenNews: Проект Mozilla объявил о возможной утечке 97 тысяч аккаунтов тестового сервера Bugzilla
  3. OpenNews: Релиз свободной системы отслеживания ошибок Bugzilla 4.0
Тип: Проблемы безопасности
Ключевые слова: bugzilla, (найти похожие документы)
При перепечатке указание ссылки на opennet.ru обязательно
Реклама
id=adv>
  1.1, Гость, 13:50, 07/10/2014 [ответить] [смотреть все] +1 +/
:-D красиво!
 
1.2, онаним, 14:25, 07/10/2014 [ответить] [смотреть все]    [к модератору]
+/
fail. Удивительно, как можно делать столь сильные предположения о типе переменной в динамическом яп, особенно таком как перловка.
 
1.3, Аноним, 15:13, 07/10/2014 [ответить] [смотреть все]     [к модератору] –1 +/
http bloodhound apache org ... весь текст скрыт [показать]
  1.4, Аноним, 16:23, 07/10/2014 [ответить] [смотреть все]     [к модератору]  –1 +/
В BugZilla устранена опасная уязвимость, позволяющая повысит...... весь текст скрыт [показать]
 
  2.14, анонимес, 19:52, 07/10/2014 [^] [ответить] [смотреть все]    [к модератору]  +/
знакомые буквы увидел?
 
1.5, vitalif, 16:24, 07/10/2014 [ответить] [смотреть все]    [к модератору]  +/ Я всегда охреневал от людей, которые вообще CGI.pm используют. Его достаточно один раз открыть, чтобы понять, что его писал героиновый наркоман. Эталонный кусок перл-говнокода.

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

    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 [ответить] [смотреть все]     [к модератору]  +/
сам повысил свои привилегии, потом сам же и пофиксил с новыми привилегиями ... весь текст скрыт [показать]
 
Ваш комментарий  

Read more http://www.opennet.ru/opennews/art.shtml?num=40766

 
Интересная статья? Поделись ей с другими:

bottom

 

Unreal Commander PfSense по русски Яндекс.Метрика