Buffer overflow เปƒเบ™ Toxcore เบ–เบทเบเบ‚เบนเบ”เบฎเบตเบ”เป‚เบ”เบเบเบฒเบ™เบชเบปเปˆเบ‡เบŠเบธเบ” UDP

Toxcore, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบดเบ‡เบ‚เบญเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™เบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก Tox P2P, เบกเบตเบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡ (CVE-2021-44847) เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบฅเบฐเบซเบฑเบ”เปƒเบ™เป€เบงเบฅเบฒเบ›เบฐเบกเบงเบ™เบœเบปเบ™เปเบžเบฑเบเป€เบเบฑเบ” UDP เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ. เบœเบนเป‰เปƒเบŠเป‰เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ Toxcore เบ—เบตเปˆเบšเปเปˆเบกเบตเบเบฒเบ™เบ‚เบปเบ™เบชเบปเปˆเบ‡ UDP เบ–เบทเบเบ›เบดเบ”เปเบกเปˆเบ™เป„เบ”เป‰เบฎเบฑเบšเบœเบปเบ™เบเบฐเบ—เบปเบšเบˆเบฒเบเบ„เบงเบฒเบกเบญเปˆเบญเบ™เปเบญ. เป€เบžเบทเปˆเบญเป‚เบˆเบกเบ•เบต, เบกเบฑเบ™เบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเบชเบปเปˆเบ‡เปเบžเบฑเบเป€เบเบฑเบ” UDP เบ—เบตเปˆเบฎเบนเป‰เบ—เบตเปˆเบขเบนเปˆ IP, เบžเบญเบ”เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปเบฅเบฐเบฅเบฐเบซเบฑเบ” DHT เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเบ‚เบญเบ‡เบœเบนเป‰เบ–เบทเบเป€เบ„เบฒเบฐเบฎเป‰เบฒเบ (เบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบกเบตเบขเบนเปˆเปƒเบ™ DHT, เป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เป‚เบˆเบกเบ•เบตเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ”เปเบฒเป€เบ™เบตเบ™เบขเบนเปˆเปƒเบ™เบœเบนเป‰เปƒเบŠเป‰เบซเบผเบท DHT node).

เบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบกเบตเบขเบนเปˆเปƒเบ™เบเบฒเบ™เบ›เปˆเบญเบ toxcore 0.1.9 เป€เบ–เบดเบ‡ 0.2.12 เปเบฅเบฐเบ–เบทเบเปเบเป‰เป„เบ‚เปƒเบ™เบฎเบธเปˆเบ™ 0.2.13. เปƒเบ™เบšเบฑเบ™เบ”เบฒเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบฅเบนเบเบ„เป‰เบฒ, เบžเบฝเบ‡เปเบ•เปˆเป‚เบ„เบ‡เบเบฒเบ™ qTox เบกเบฒเบฎเบญเบ”เบ›เบฐเบˆเบธเบšเบฑเบ™เป„เบ”เป‰เบญเบญเบเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบ—เบตเปˆเบเปเบฒเบˆเบฑเบ”เบ„เบงเบฒเบกเบญเปˆเบญเบ™เปเบญ. เปƒเบ™เบ–เบฒเบ™เบฐเป€เบ›เบฑเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบž, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบดเบ” UDP เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบฎเบฑเบเบชเบฒเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ TCP.

เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเปเบกเปˆเบ™เป€เบเบตเบ”เบกเบฒเบˆเบฒเบ buffer overflow เปƒเบ™เบŸเบฑเบ‡เบŠเบฑเบ™ handle_request(), เป€เบŠเบดเปˆเบ‡เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบเป‰เบญเบ™เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบ‚เบฐเปœเบฒเบ”เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เปƒเบ™เปเบžเบฑเบเป€เบเบฑเบ”เป€เบ„เบทเบญเบ‚เปˆเบฒเบ. เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบ„เบงเบฒเบกเบเบฒเบงเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เป„เบ”เป‰เบ–เบทเบเบเปเบฒเบ™เบปเบ”เบขเบนเปˆเปƒเบ™เบกเบฐเบซเบฒเบžเบฒเบ CRYPTO_SIZE, เบเปเบฒเบ™เบปเบ”เป€เบ›เบฑเบ™ "1 + CRYPTO_PUBLIC_KEY_SIZE * 2 + CRYPTO_NONCE_SIZE", เป€เบŠเบดเปˆเบ‡เป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบ•เปเปˆเบกเบฒเปƒเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบเบฒเบ™เบซเบฑเบเบฅเบปเบš "เบ„เบงเบฒเบกเบเบฒเบง - CRYPTO_SIZE". เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบšเปเปˆเบกเบตเบงเบปเบ‡เป€เบฅเบฑเบšเบขเบนเปˆเปƒเบ™เบกเบฐเบซเบฒเบžเบฒเบ, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบฅเบปเบšเบœเบปเบ™เบฅเบงเบกเบ‚เบญเบ‡เบ„เปˆเบฒเบ—เบฑเบ‡เปเบปเบ”, เบกเบฑเบ™เบ–เบทเบเบซเบฑเบเบญเบญเบ 1 เปเบฅเบฐเป€เบžเบตเปˆเบกเบชเปˆเบงเบ™เบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญ. เบ•เบปเบงเบขเปˆเบฒเบ‡, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™ "เบ„เบงเบฒเบกเบเบฒเบง - (1 + 32 * 2 + 24)", เบ‚เบฐเบซเบ™เบฒเบ” buffer เป„เบ”เป‰เบ–เบทเบเบ„เบดเบ”เป„เบฅเปˆเป€เบ›เบฑเบ™ "เบ„เบงเบฒเบกเบเบฒเบง - 1 + 32 * 2 + 24", เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ‚เบฝเบ™เบ—เบฑเบšเบ‚เปเป‰เบกเบนเบ™เปƒเบ™ stack เป€เบเบตเบ™เบ‚เบญเบšเป€เบ‚เบ” buffer.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™