asterisk_security

Команда разработчиков проекта Asterisk сообщила о выпуске новых версий проекта: 1.2.40, 1.4.29.1, 1.6.0.24, 1.6.1.16 и 1.6.2.4. Данный выпуск обусловлен появлением информации о возможности инъекции произвольного содержимого в диалплан. Новые версии практически не содержат никаких исправлении в исходном коде (кроме версии 1.2.40), добавлен лишь документ, описывающий область, на которую должен обратить особое внимание, разработчик, создающий диалплан.

Повсеместное употребление переменной ${EXTEN} совместно со строками, соответствующими произвольными символьным последовательностям, может вызвать возможность инъекции произвольных данных в диалплан.

При использовании символа '.', соответствуюшего произвольной последовательности символов, возможно осуществление не предусмотренных звонков:

exten => _X.,1,Dial (SIP/${EXTEN})

Если в данном примере вы имеете дело с технологией канала, допускающей символы в набранном номере, отличные от цифр и букв (такой как SIP), то существует возможность сформировать IVITE запрос, содержащий, например, номер 300&Zap/g1/4165551212, который в приведенном примере вызовет набор не предусмотренного при создании диалплана номера.

Ситуации, в которых неизвестна длинна набранного номера неизвестно встречаются часто, например в Англии и Германии, где длинна номера внутри страны может варьироваться. Так же использование данной символики удобно, когда нет необходимости или желания задумываться над длинной набранного номера.  Проблема в данном случае лежит не в конкретном драйвере канала или приложении Dial ().

Разработчики часто недооценивают возможности рабочей строки и не учитывают возможные варианты пользовательского ввода и их влияние на ход работы приложения. Астериск со своей стороны не предоставляет механизмов гибкого задания шаблонов набранного номера (многим нужна передача символа & в номере?).

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

В данном случае решение состоит в предварительно обработке переменной ${EXTEN} функцией FILTER (), для получения строки, содержащей только ожидаемые разработчиком символы. Эти меры стоит в первую очередь применить во всех входящих контекстах, где переменная EXTEN используется для дальнейшей маршрутизации вызова или прямого вызова внутреннего или внешнего абонента.

Примеры для данного случая и другие рекомендации могут быть найдены в документа README-SERIOUSLY.bestpractices.txt, размещенного в архивах исходных кодов Asterisk.

Asterisk 1.2.40 так же дополнен портированной версией приложения FILTER () для предоставления механизма, необходимого для решения данной проблемы в существующем диалплане.

Ссылки

Похожие сообщения:

автор igorg \\ теги: , , , , , , , ,