Рањивост извршавања кода у Мозилла НСС при обради сертификата

Критична рањивост (ЦВЕ-2021-43527) је идентификована у НСС (Нетворк Сецурити Сервицес) скупу криптографских библиотека које је развила Мозилла, што може довести до извршења кода нападача приликом обраде ДСА или РСА-ПСС дигиталних потписа наведених коришћењем ДЕР метода кодирања (Дистингуисхед Енцодинг Рулес). Проблем, кодног назива БигСиг, решен је у НСС 3.73 и НСС ЕСР 3.68.1. Ажурирања пакета у дистрибуцијама су доступна за Дебиан, РХЕЛ, Убунту, СУСЕ, Арцх Линук, Гентоо, ФрееБСД. Још увек нема доступних ажурирања за Федору.

Проблем се јавља у апликацијама које користе НСС за руковање дигиталним потписима ЦМС, С/МИМЕ, ПКЦС #7 и ПКЦС #12 или приликом провере сертификата у ТЛС, Кс.509, ОЦСП и ЦРЛ имплементацијама. Рањивост се може појавити у различитим клијентским и серверским апликацијама које подржавају ТЛС, ДТЛС и С/МИМЕ, клијентима е-поште и ПДФ прегледачима који користе НСС ЦЕРТ_ВерифиЦертифицате() позив за верификацију дигиталних потписа.

ЛибреОффице, Еволутион и Евинце се помињу као примери рањивих апликација. Потенцијално, проблем може утицати и на пројекте као што су Пидгин, Апацхе ОпенОффице, Сурицата, Цурл, Цхрони, Ред Хат Дирецтори Сервер, Ред Хат Цертифицате Систем, мод_нсс за Апацхе хттп сервер, Орацле Цоммуницатионс Мессагинг Сервер, Орацле Дирецтори Сервер Ентерприсе Едитион. Међутим, рањивост се не појављује у Фирефок-у, Тхундербирд-у и Тор претраживачу, који користе засебну мозилла::пкик библиотеку, такође укључену у НСС, за верификацију. Прегледачи засновани на Цхромиум-у (осим ако нису посебно направљени са НСС), који су користили НСС до 2015. године, али су потом прешли на БорингССЛ, такође нису погођени проблемом.

Рањивост је узрокована грешком у коду за верификацију сертификата у функцији вфи_ЦреатеЦонтект из датотеке сецвфи.ц. Грешка се јавља и када клијент чита сертификат са сервера и када сервер обрађује клијентске сертификате. Приликом верификације дигиталног потписа кодираног ДЕР-ом, НСС декодира потпис у бафер фиксне величине и прослеђује бафер ПКЦС #11 модулу. Током даље обраде, величина се нетачно проверава за ДСА и РСА-ПСС потписе, што доводи до преливања бафера додељеног за ВФИЦонтектСтр структуру ако величина дигиталног потписа прелази 16384 бита (за бафер је додељено 2048 бајтова, али не проверава се да потпис може бити већи) ).

Код који садржи рањивост може се пратити до 2003. године, али није представљао претњу све до рефакторисања спроведеног 2012. године. У 2017. години, иста грешка је направљена приликом имплементације РСА-ПСС подршке. Да би се извршио напад, није потребно генерисање одређених кључева који захтевају велике ресурсе да би се добили потребни подаци, пошто се преливање дешава у фази пре провере исправности дигиталног потписа. Део података који превазилази границе се уписује у меморијску област која садржи показиваче на функције, што поједностављује креирање радних експлоатација.

Рањивост су открили истраживачи из Гоогле Пројецт Зеро током експериментисања са новим методама фузинг тестирања и добра је демонстрација како тривијалне рањивости могу остати неоткривене дуго времена у нашироко тестираном добро познатом пројекту:

  • НСС код одржава искусан безбедносни тим користећи најсавременије технике тестирања и анализе грешака. Постоји неколико програма за исплату значајних награда за идентификовање рањивости у НСС.
  • НСС је био један од првих пројеката који се придружио Гугловој осс-фузз иницијативи, а такође је тестиран у Мозилином систему за фузз тестирање заснованом на либФуззер-у.
  • Библиотечки код је проверен много пута у различитим статичким анализаторима, укључујући и праћење од стране Цоверити сервиса од 2008. године.
  • До 2015. НСС се користио у Гоогле Цхроме-у и независно од Мозиле верификовао га је Гугл тим (од 2015. Цхроме је прешао на БорингССЛ, али подршка за порт заснован на НСС-у остаје).

Главни проблеми због којих је проблем дуго времена остао неоткривен:

  • НСС модуларна библиотека и фузинг тестирање су спроведени не као целина, већ на нивоу појединачних компоненти. На пример, шифра за декодирање ДЕР и обрада сертификата је проверавана одвојено – током фузинга је могао да се добије сертификат који би довео до испољавања дотичне рањивости, али његова провера није стигла до верификационог кода и проблем није решио. открива се.
  • Током фузинг тестирања, постављена су строга ограничења на величину излаза (10000 бајтова) у одсуству сличних ограничења у НСС-у (многе структуре у нормалном режиму могу имати величину већу од 10000 бајтова, тако да је било потребно више улазних података да би се идентификовали проблеми) . За потпуну верификацију, ограничење је требало да буде 224-1 бајт (16 МБ), што одговара максималној величини сертификата дозвољеној у ТЛС-у.
  • Заблуда о покривености кода за тестирање фузз. Рањиви код је активно тестиран, али коришћењем фуззера који нису могли да генеришу неопходне улазне податке. На пример, фуззер тлс_сервер_таргет је користио унапред дефинисани скуп готових сертификата, који је ограничио проверу кода за верификацију сертификата само на ТЛС поруке и промене стања протокола.

Извор: опеннет.ру

Додај коментар