ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€Π° Π² Toxcore, эксплуатируСмоС Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ UDP-ΠΏΠ°ΠΊΠ΅Ρ‚Π°

Π’ Toxcore, эталонной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ P2P-ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями Tox, выявлСна ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ (CVE-2021-44847), которая ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ позволяСт ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½ΠΎΠ³ΠΎ UDP-ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Уязвимости ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Ρ‹ всС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Π±Π°Π·Π΅ Toxcore, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Ρ‘Π½ транспорт UDP. Для Π°Ρ‚Π°ΠΊΠΈ достаточно ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ UDP-ΠΏΠ°ΠΊΠ΅Ρ‚, зная IP-адрСс, сСтСвой ΠΏΠΎΡ€Ρ‚ ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ DHT-ΠΊΠ»ΡŽΡ‡ ΠΆΠ΅Ρ€Ρ‚Π²Ρ‹ (Π΄Π°Π½Π½Ρ‹Π΅ свСдСния доступны ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎ Π² DHT, Ρ‚.Π΅. Π°Ρ‚Π°ΠΊΠ° ΠΌΠΎΠ³Π»Π° Π±Ρ‹Ρ‚ΡŒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π° Π½Π° любого ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ»ΠΈ ΡƒΠ·Π΅Π» DHT).

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€ΠΎΡΠ²Π»ΡΠ»Π°ΡΡŒ Π² выпусках toxcore с 0.1.9 ΠΏΠΎ 0.2.12 ΠΈ устранСна Π² вСрсии 0.2.13. Из клиСнтских ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ с устранСниСм уязвимости ΠΏΠΎΠΊΠ° выпустил Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ qTox. Π’ качСствС ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ использованиС UDP, оставив ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ TCP.

Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π±ΡƒΡ„Π΅Ρ€Π° Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ handle_request(), Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰Π΅Π³ΠΎ ΠΈΠ·-Π·Π° Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ расчёта Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π΄Π°Π½Π½Ρ‹Ρ… Π² сСтСвом ΠΏΠ°ΠΊΠ΅Ρ‚Π΅. Π’ частности, Π΄Π»ΠΈΠ½Π° Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ»Π°ΡΡŒ Π² макросС CRYPTO_SIZE, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌ ΠΊΠ°ΠΊ «1 + CRYPTO_PUBLIC_KEY_SIZE * 2 + CRYPTO_NONCE_SIZE», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² дальнСйшСм использовался Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ вычитания «length — CRYPTO_SIZE». Из-Π·Π° отсутствия скобок Π² макросС вмСсто вычитания суммы всСх Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΎΡΡŒ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ 1 ΠΈ слоТСниС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… частСй. НапримСр, вмСсто «length — (1 + 32 * 2 + 24)» Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΡƒΡ„Π΅Ρ€Π° рассчитывался ΠΊΠ°ΠΊ «length — 1 + 32 * 2 + 24», Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎ ΠΊ пСрСзаписи Π΄Π°Π½Π½Ρ‹Ρ… Π² стСкС, находящихся Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Π΅ΠΉ Π±ΡƒΡ„Π΅Ρ€Π°.

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