Уязвимост Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° с основната рСализация Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ° SHA-3

Π‘Π΅ΡˆΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π° уязвимост (CVE-3-2022) ΠΏΡ€ΠΈ внСдряванСто Π½Π° криптографската Ρ…Π΅Ρˆ функция SHA-37454 (Keccak), ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π½Π° Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π° XKCP (eXtended Keccak Code Package), която ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΏΡ€Π΅ΠΏΡŠΠ»Π²Π°Π½Π΅ Π½Π° Π±ΡƒΡ„Π΅Ρ€Π° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°Π½ΠΈ Π΄Π°Π½Π½ΠΈ. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅Π½ ΠΎΡ‚ Π³Ρ€Π΅ΡˆΠΊΠ° Π² ΠΊΠΎΠ΄Π° Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ изпълнСниС Π½Π° SHA-3, Π° Π½Π΅ ΠΎΡ‚ уязвимост Π² самия Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ. ΠŸΠ°ΠΊΠ΅Ρ‚ΡŠΡ‚ XKCP сС Ρ€Π΅ΠΊΠ»Π°ΠΌΠΈΡ€Π° ΠΊΠ°Ρ‚ΠΎ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π° рСализация Π½Π° SHA-3, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π΅ΠΊΠΈΠΏΠ° Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Keccak ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° ΠΊΠ°Ρ‚ΠΎ основа Π·Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° SHA-3 Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΅Π·ΠΈΡ†ΠΈ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ (Π½Π°ΠΏΡ€. XKCP ΠΊΠΎΠ΄ΡŠΡ‚ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² Ρ…Π΅ΡˆΠ»ΠΈΠ±Π° Π½Π° Python ΠΌΠΎΠ΄ΡƒΠ», Ruby digest ΠΏΠ°ΠΊΠ΅Ρ‚ sha3 ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ PHP hash_*).

Π‘ΠΏΠΎΡ€Π΅Π΄ изслСдоватСля, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π» ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Ρ‚ΠΎΠΉ Π΅ успял Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° уязвимостта, Π·Π° Π΄Π° Π½Π°Ρ€ΡƒΡˆΠΈ криптографскитС свойства Π½Π° Ρ…Π΅Ρˆ функцията ΠΈ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈ ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΡ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΠ±Ρ€Π°Π·ΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ΅ ΡΠ±Π»ΡŠΡΡŠΡ†ΠΈ. ОсвСн Ρ‚ΠΎΠ²Π° бСшС обявСно, Ρ‡Π΅ Ρ‰Π΅ бъдС създадСн ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Π½Π° Сксплойт, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄ ΠΏΡ€ΠΈ изчисляванС Π½Π° Ρ…Π΅ΡˆΠ° Π½Π° спСциално ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½ Ρ„Π°ΠΉΠ». Уязвимостта ΠΌΠΎΠΆΠ΅ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΎ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈ Π·Π° Π°Ρ‚Π°ΠΊΠ° Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ†ΠΈΡ„Ρ€ΠΎΠ² подпис, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ SHA-3 (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ed448). ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ Π·Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ Π½Π° Π°Ρ‚Π°ΠΊΠ° сС ΠΏΠ»Π°Π½ΠΈΡ€Π° Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ΠΈ ΠΏΠΎ-късно, слСд ΠΊΠ°Ρ‚ΠΎ уязвимостта бъдС Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π°Π½Π° навсякъдС.

ВсС ΠΎΡ‰Π΅ Π½Π΅ Π΅ ясно ΠΊΠΎΠ»ΠΊΠΎ уязвимостта засяга ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ‚Π΅ прилоТСния Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π·Π° Π΄Π° сС прояви ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π² ΠΊΠΎΠ΄Π°, трябва Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π½ΠΈ Ρ…Π΅Ρˆ изчислСния Π² Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΠΈ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈΡ‚Π΅ Π±Π»ΠΎΠΊΠΎΠ²Π΅ трябва Π΄Π° Π΅ с Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠΊΠΎΠ»ΠΎ 4 GB (ΠΏΠΎΠ½Π΅ 2^32 - 200 Π±Π°ΠΉΡ‚Π°). ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π²Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ навСднъТ (Π±Π΅Π· послСдоватСлно изчисляванС Π½Π° Ρ…Π΅ΡˆΠ° Π½Π° части), ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π½Π΅ сС появява. ΠšΠ°Ρ‚ΠΎ Π½Π°ΠΉ-прост ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° Π·Π°Ρ‰ΠΈΡ‚Π° сС ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Π΄Π° сС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈ максималния Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ Π² Π΅Π΄Π½Π° итСрация Π½Π° Ρ…Π΅Ρˆ изчислСниСто.

Уязвимостта Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅Π½Π° ΠΎΡ‚ Π³Ρ€Π΅ΡˆΠΊΠ° Π² Π±Π»ΠΎΠΊΠΎΠ²Π°Ρ‚Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π²Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ. ΠŸΠΎΡ€Π°Π΄ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ сравнСниС Π½Π° стойности с Ρ‚ΠΈΠΏ "int", сС опрСдСля нСправилният Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° Ρ‡Π°ΠΊΠ°Ρ‰ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ записванС Π½Π° ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π° извън разпрСдСлСния Π±ΡƒΡ„Π΅Ρ€. По-спСциално, сравнСниСто ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠ·Ρ€Π°Π·Π° β€žpartialBlock + instance->byteIOIndexβ€œ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ цСлочислСно ΠΏΡ€Π΅ΠΏΡŠΠ»Π²Π°Π½Π΅ Π·Π° Π³ΠΎΠ»Π΅ΠΌΠΈ стойности Π½Π° ΡΡŠΡΡ‚Π°Π²Π½ΠΈΡ‚Π΅ части. ОсвСн Ρ‚ΠΎΠ²Π° Π² ΠΊΠΎΠ΄Π° имашС Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° Ρ‚ΠΈΠΏΠ° "(unsigned int)(dataByteLen - i)", ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° ΠΏΡ€Π΅ΠΏΡŠΠ»Π²Π°Π½Π΅ Π½Π° систСми с 64-Π±ΠΈΡ‚ΠΎΠ² Ρ‚ΠΈΠΏ size_t.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π΅Π½ ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ причинява ΠΏΡ€Π΅ΠΏΡŠΠ»Π²Π°Π½Π΅: import hashlib h = hashlib.sha3_224() m1 = b"\x00" * 1; m2 = b"\x00β€³ * 4294967295; h.update(m1) h.update(m2) print(h.hexdigest())

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€