Рањивост у библиотеци са главном имплементацијом СХА-3 алгоритма

Идентификована је рањивост (ЦВЕ-3-2022) у имплементацији СХА-37454 (Кеццак) криптографске хеш функције понуђене у КСКЦП пакету (еКстендед Кеццак Цоде Пацкаге), која може довести до преливања бафера током обраде одређених форматирани подаци. Проблем је узрокован грешком у коду специфичне имплементације СХА-3, а не рањивости у самом алгоритму. КСКЦП пакет се рекламира као званична имплементација СХА-3, развијен уз допринос Кеццак развојног тима и користи се као основа за СХА-3 функције у различитим програмским језицима (нпр. КСКЦП код се користи у Питхон хасхлиб-у модул, Руби дигест пакет сха3 и ПХП хасх_* функције).

Према истраживачу који је идентификовао проблем, он је успео да искористи рањивост да наруши криптографска својства хеш функције и пронађе прву и другу предслику, као и да открије колизије. Поред тога, најављено је да ће бити креиран прототип експлоатације који ће омогућити извршавање кода приликом израчунавања хеша посебно дизајниране датотеке. Рањивост би такође потенцијално могла да се користи за напад на алгоритме за верификацију дигиталног потписа који користе СХА-3 (на пример, Ед448). Планирано је да детаљи о методама напада буду објављени касније, након што се рањивост свуда елиминише.

Још увек није јасно колико рањивост утиче на постојеће апликације у пракси, јер да би се проблем манифестовао у коду, морају се користити цикличне хеш прорачуне у блоковима и један од обрађених блокова мора бити величине око 4 ГБ (најмање 2^32 - 200 бајтова). Приликом обраде улазних података одједном (без секвенцијалног израчунавања хеша у деловима), проблем се не појављује. Као најједноставнији метод заштите, предлаже се ограничавање максималне величине података укључених у једну итерацију хеш израчунавања.

Рањивост је узрокована грешком у блок обради улазних података. Због нетачног поређења вредности са типом „инт“, утврђује се нетачна величина података на чекању, што доводи до уписивања репа изван додељеног бафера. Конкретно, у поређењу је коришћен израз „партиалБлоцк + инстанце->битеИОИндек“, што је довело до прекорачења целог броја за велике вредности саставних делова. Поред тога, дошло је до погрешног пребацивања типа "(унсигнед инт)(датаБитеЛен - и)" у коду, што је изазвало преливање на системима са 64-битним типом сизе_т.

Пример кода који изазива преливање: импорт хасхлиб х = хасхлиб.сха3_224() м1 = б"\к00" * 1; м2 = б"\к00″ * 4294967295; х.упдате(м1) х.упдате(м2) принт(х.хекдигест())

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

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