Bregusrwydd yn y llyfrgell gyda phrif weithrediad yr algorithm SHA-3

Mae bregusrwydd (CVE-3-2022) wedi'i nodi wrth weithredu'r swyddogaeth hash cryptograffig SHA-37454 (Keccak) a gynigir yn y pecyn XKCP (Pecyn Cod Keccak eXtended), a all arwain at orlif byffer wrth brosesu rhai data wedi'i fformatio. Achosir y broblem gan nam yn y cod gweithredu penodol o SHA-3, ac nid gan fregusrwydd yn yr algorithm ei hun. Cyfeirir at becyn XKCP fel gweithrediad swyddogol SHA-3, a ddatblygwyd gyda mewnbwn gan dîm datblygu Keccak, a'i ddefnyddio fel sail ar gyfer swyddogaethau SHA-3 mewn amrywiol ieithoedd rhaglennu (e.e., defnyddir cod XKCP yn yr hashlib Python modiwl, y pecyn treulio Ruby sha3 a PHP hash_* swyddogaethau).

Yn ôl yr ymchwilydd a nododd y broblem, roedd yn gallu defnyddio'r bregusrwydd i dorri priodweddau cryptograffig y swyddogaeth hash a dod o hyd i'r rhagddelweddau cyntaf a'r ail, yn ogystal â chanfod gwrthdrawiadau. Yn ogystal, cyhoeddwyd y byddai ecsbloetio prototeip yn cael ei greu a fyddai'n caniatáu gweithredu cod wrth gyfrifo stwnsh ffeil a ddyluniwyd yn arbennig. Gallai'r bregusrwydd hefyd gael ei ddefnyddio o bosibl i ymosod ar algorithmau dilysu llofnod digidol sy'n defnyddio SHA-3 (er enghraifft, Ed448). Bwriedir cyhoeddi manylion y dulliau ymosod yn ddiweddarach, ar ôl i'r bregusrwydd gael ei ddileu ym mhobman.

Nid yw'n glir eto faint mae'r bregusrwydd yn effeithio ar gymwysiadau presennol yn ymarferol, oherwydd er mwyn i'r broblem amlygu ei hun yn y cod, rhaid defnyddio cyfrifiadau hash cylchol mewn blociau a rhaid i un o'r blociau wedi'u prosesu fod tua 4 GB o faint (o leiaf 2^32 - 200 beit). Wrth brosesu'r data mewnbwn ar unwaith (heb gyfrifo'r hash yn olynol mewn rhannau), nid yw'r broblem yn ymddangos. Fel y dull amddiffyn symlaf, cynigir cyfyngu ar faint mwyaf y data sy'n gysylltiedig ag un iteriad o'r cyfrifiad hash.

Achosir y bregusrwydd gan gamgymeriad wrth brosesu bloc o ddata mewnbwn. Oherwydd cymhariaeth anghywir o werthoedd gyda math "int", pennir maint anghywir y data sydd ar y gweill, sy'n arwain at ysgrifennu'r gynffon y tu hwnt i'r byffer a ddyrannwyd. Yn benodol, defnyddiodd y gymhariaeth yr ymadrodd “partialBlock + instance->byteIOIndex”, a arweiniodd at orlif cyfanrif ar gyfer gwerthoedd mawr y rhannau cyfansoddol. Yn ogystal, roedd cast math anghywir "(unsigned int)(dataByteLen - i)" yn y cod, a achosodd orlif ar systemau gyda math 64-bit size_t.

Cod enghreifftiol sy'n achosi gorlif: mewnforio hashlib h = hashlib.sha3_224() m1 = b" \x00" * 1; m2 = b" \x00" * 4294967295; h.diweddaru(m1) h.diweddaru(m2) print(h.hexdigest())

Ffynhonnell: opennet.ru

Ychwanegu sylw