Ang kahinaan sa library na may pangunahing pagpapatupad ng SHA-3 algorithm

Natukoy ang isang kahinaan (CVE-3-2022) sa pagpapatupad ng SHA-37454 (Keccak) cryptographic hash function na inaalok sa XKCP package (eXtended Keccak Code Package), na maaaring humantong sa isang buffer overflow kapag nagpoproseso ng ilang partikular na data. Ang problema ay sanhi ng isang bug sa code ng isang partikular na pagpapatupad ng SHA-3, at hindi ng isang kahinaan sa algorithm mismo. Ang XKCP package ay tinuturing bilang opisyal na pagpapatupad ng SHA-3, na binuo gamit ang input mula sa Keccak development team, at ginamit bilang batayan para sa SHA-3 functions sa iba't ibang programming language (hal., XKCP code ay ginagamit sa Python hashlib module, ang Ruby digest package sha3 at PHP hash_* function).

Ayon sa mananaliksik na natukoy ang problema, nagawa niyang gamitin ang kahinaan upang labagin ang mga cryptographic na katangian ng hash function at hanapin ang una at pangalawang preimage, pati na rin ang pagtuklas ng mga banggaan. Bilang karagdagan, inihayag na ang isang prototype na pagsasamantala ay gagawin na magpapahintulot sa code na maisakatuparan kapag kinakalkula ang hash ng isang espesyal na idinisenyong file. Ang kahinaan ay maaari ding potensyal na magamit upang atakehin ang mga digital signature verification algorithm na gumagamit ng SHA-3 (halimbawa, Ed448). Ang mga detalye ng mga paraan ng pag-atake ay binalak na mai-publish sa ibang pagkakataon, pagkatapos na maalis ang kahinaan sa lahat ng dako.

Hindi pa malinaw kung gaano kalaki ang epekto ng kahinaan sa mga umiiral na application sa pagsasanay, dahil para maipakita ang problema sa sarili nitong code, dapat gamitin ang cyclic hash kalkulasyon sa mga bloke at ang isa sa mga naprosesong bloke ay dapat na halos 4 GB ang laki (hindi bababa sa 2^32 - 200 byte). Kapag pinoproseso ang data ng input nang sabay-sabay (nang walang sunud-sunod na pagkalkula ng hash sa mga bahagi), ang problema ay hindi lilitaw. Bilang pinakasimpleng paraan ng proteksyon, iminungkahi na limitahan ang maximum na laki ng data na kasangkot sa isang pag-ulit ng pagkalkula ng hash.

Ang kahinaan ay sanhi ng isang error sa block processing ng input data. Dahil sa maling paghahambing ng mga halaga na may uri na "int", ang maling laki ng nakabinbing data ay natutukoy, na humahantong sa buntot na nakasulat sa kabila ng inilalaang buffer. Sa partikular, ginamit ng paghahambing ang expression na "partialBlock + instance->byteIOIndex", na humantong sa integer overflow para sa malalaking halaga ng mga bahagi ng constituent. Bukod pa rito, nagkaroon ng maling uri ng cast "(unsigned int)(dataByteLen - i)" sa code, na nagdulot ng overflow sa mga system na may 64-bit size_t type.

Halimbawang code na nagdudulot ng overflow: import hashlib h = hashlib.sha3_224() m1 = b"\x00" * 1; m2 = b"\x00β€³ * 4294967295; h.update(m1) h.update(m2) print(h.hexdigest())

Pinagmulan: opennet.ru

Magdagdag ng komento