Coturn — это бесплатная реализация TURN и STUN Server с открытым исходным кодом. Coturn обычно настраивается для блокировки обратной связи и внутренних диапазонов с использованием ограничений «запрещенный одноранговый IP-адрес» и/или ограничений обратной связи по умолчанию. CVE-2020-26262 касается обходов, включающих «0.0.0.0», «[::1]» и «[::]», но IPv6, сопоставленный с IPv4, не распространяется. При отправке запроса «CreatePermission» или «ChannelBind» со значением «XOR-PEER-ADDRESS» «::ffff:127.0.0.1» получен успешный ответ, даже если «127.0.0.0/8» заблокирован через «denied-peer-ip».
Основная причина заключается в том, что до обновленного исправления, реализованного в версии 4.9.0, три функции в «src/client/ns_turn_ioaddr.c» не проверяют «IN6_IS_ADDR_V4MAPPED». «ioa_addr_is_loopback()» проверяет «127.x.x.x» (AF_INET) и «::1» (AF_INET6), но не проверяет «::ffff:127.0.0.1». «ioa_addr_is_zero()» проверяет «0.0.0.0» и «::», но не «::ffff:0.0.0.0». «addr_less_eq()», используемый «ioa_addr_in_range()» для сопоставления «запрещенного однорангового IP-адреса»: когда диапазон — AF_INET, а одноранговый узел — AF_INET6, сравнение возвращает 0 без извлечения встроенного IPv4. Версия 4.9.0 содержит обновленное исправление, позволяющее обойти исправление CVE-2020-26262.
Показать оригинальное описание (EN)
Coturn is a free open source implementation of TURN and STUN Server. Coturn is commonly configured to block loopback and internal ranges using "denied-peer-ip" and/or default loopback restrictions. CVE-2020-26262 addressed bypasses involving "0.0.0.0", "[::1]" and "[::]", but IPv4-mapped IPv6 is not covered. When sending a "CreatePermission" or "ChannelBind" request with the "XOR-PEER-ADDRESS" value of "::ffff:127.0.0.1", a successful response is received, even though "127.0.0.0/8" is blocked via "denied-peer-ip". The root cause is that, prior to the updated fix implemented in version 4.9.0, three functions in "src/client/ns_turn_ioaddr.c" do not check "IN6_IS_ADDR_V4MAPPED". "ioa_addr_is_loopback()" checks "127.x.x.x" (AF_INET) and "::1" (AF_INET6), but not "::ffff:127.0.0.1." "ioa_addr_is_zero()" checks "0.0.0.0" and "::", but not "::ffff:0.0.0.0." "addr_less_eq()" used by "ioa_addr_in_range()" for "denied-peer-ip" matching: when the range is AF_INET and the peer is AF_INET6, the comparison returns 0 without extracting the embedded IPv4. Version 4.9.0 contains an updated fix to address the bypass of the fix for CVE-2020-26262.
Характеристики атаки
Последствия
Строка CVSS v3.1