LINUX.ORG.RU
ФорумTalks

Rust и Go смузихлебно лососнули

 ,


0

3

https://www.opennet.ru/opennews/art.shtml?num=55607

Если вкратце и для Ъ, то пейсатели стандартной(!!!) либы для языков не сумели в соответствующие RFC и забыли, но чего-то кажется не исключено и не знали, что есть такая штука как восьмеричное представление чисел. И например, 0177 в IP адресе - это нифига не 177, а 127 в 10-м виде. Или 012 - это не 12, а 10 в 10-м виде. Но в либах ведущий ноль в таких местах просто отбрасывают.

В результате, например, файрвол написанный на безопасном Rust может благополучно пропустить зафайрволенный адрес.

Согласен, в наше время 8-ричное представление - это экзотика мало кому нужная, когда даже chmod можно сделать с буквами u a o, но тем не менее, коли из соображений совместимости до сих пор используется, в том числе в сетевых либах, то стоило бы об этом помнить, если взялся за такое дело как стандартную библиотеку писать.

Это одна сторона вопроса. Другая, что «разруха она не в клозетах, а в головах». Тут какой безопасный язык не придумай, а ошибки все-равно будут.

★★★★★

В результате, например, файрвол написанный на безопасном Rust может благополучно пропустить зафайрволенный адрес.

Первое место тебе в конкурсе натягивания сов на глобусы.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)

И например, 0177 в IP адресе - это нифига не 177, а 127 в 10-м виде. Или 012 - это не 12, а 10 в 10-м виде. Но в либах ведущий ноль в таких местах просто отбрасывают.

Интереса ради, а кто использует восьмеричную запись для IP-адресов. Мне не доводилось.

Тут какой безопасный язык не придумай, а ошибки все-равно будут.

Никто, кроме совсем упоротых, с этим и не спорит.

apt_install_lrzsz ★★★
()

Чёрт с ним с RFC, где это используется? Хочется понять сколько это редкоземельная вещь, и нафига оно нужно в принципе.

WitcherGeralt ★★
()

В результате, например, файрвол написанный на безопасном Rust может благополучно пропустить зафайрволенный адрес.

РЕ-ШЕ-ТО!

BattleCoder ★★★★★
()

Java забыли в перечень внести!!! С неё же всё и началось :)

AlexVR ★★★★★
()

так-то IP адреса ещё и в шестнадцатеричной системе можно записывать %) на этот счёт раст и гошечку проверили?

Harald ★★★★★
()

Я думал, что ахинея с лидирующим нулём, которая давно приводила к куче mindfuck’ов, осталась лишь в языках программирования прошлого века, вроде C и C++, а в новых давно уже стандартизировано:

0xFF
0o77
0b11
EXL ★★★★★
()

Ура, ура, что-то не работает, возрадуемся товарищи, это самый лучший день в моей жизни, она приобрела смысл!!1

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 2)

В результате, например, файрвол написанный на безопасном Rust может благополучно пропустить зафайрволенный адрес.

Что за бред? Сам придумал?

AlexVR ★★★★★
()
Ответ на: комментарий от praseodim

Ты, конечно, не знаешь, но стандартная библиотека Rust написана на Rust.

tailgunner ★★★★★
()

Больше интересно как это оно сразу в либы двух языков попало?

Диверсия? Заговор спецслужб? Один автор? Копи-паста?

Или новая норма?

Bad_ptr ★★★★★
()
Ответ на: комментарий от EXL

ахинея с лидирующим нулём, которая давно приводила к куче mindfuck’ов, осталась лишь в языках программирования прошлого века, вроде C и C++

Если списывать стдлибу как на контрольной, то неудивительно, что там будут те же ошибки.

sT331h0rs3 ★★★★★
()

Ууууух разраб файрвола неправильно распарсил число. ЭТО ОПРЕДЕЛЕННО ПРОБЛЕМА СТАНДАРТНОЙ БИБЛИОТЕКИ RUST. Еще очень радует go в заголовке который вообще никак не связан с инцидентом. Язабан такие вбросы это дно.

Aswed ★★★★★
()

полный тред подгоревших растофанатиков

Harald ★★★★★
()
Ответ на: комментарий от Singularity

Уязвимости продолжают цикл проблем, ранее выявленных в библиотеках node-netmask (JavaScript, CVE-2021-28918, CVE-2021-29418), private-ip (JavaScript, CVE-2020-28360), ipaddress (Python, CVE-2021-29921), Data::Validate::IP (Perl, CVE-2021-29662) и Net::Netmask (Perl, CVE-2021-29424).

tailgunner ★★★★★
()
Ответ на: комментарий от apt_install_lrzsz

Интереса ради, а кто использует восьмеричную запись для IP-адресов. Мне не доводилось.

Справедливости ради, фича все же довольно не очевидная, однако допустимая, потому что есть вот такое соглашение об указаниях на числа.

$ ping 0177.0.0.1
PING 0177.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.026 ms
$ ping 0x7f.0.0.1
PING 0x7f.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.026 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.012 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.010 ms
praseodim ★★★★★
() автор топика
Ответ на: комментарий от praseodim

потому что есть вот такое соглашение об указаниях на числа

Соглашение это откровенно говоря, идиотское. Я про лидирующий ноль, вместо конструкции вроде 0o177, как с HEX-значением.

EXL ★★★★★
()
Ответ на: комментарий от AlexVR

В этом смысл уязвимости.

Например, написал на Rust ты файрвол. На вход файрвола пришел адрес 012.1.2.3 - файрвол откинул лидирующий ноль, решил, что это обычный интернет-адрес и пропустил далее. А далее оказалось, что это на самом деле 10.1.2.3, пакет данных пробрался в локальную сетку предприятия.

praseodim ★★★★★
() автор топика

Rust и Go смузихлебно лососнули

Не так.

Программисты на Rust и Go смузихлебно лососнули

fernandos ★★★
()
Ответ на: комментарий от praseodim

На вход файрвола пришел адрес 012.1.2.3 - файрвол откинул лидирующий ноль, решил, что это обычный интернет-адрес и пропустил далее.

Как на вход файрвола может придти IP-адрес в текстовом представлении? O_O

tailgunner ★★★★★
()
Ответ на: комментарий от EXL

Соглашение это откровенно говоря, идиотское.

Тут согласен. Мне правда больше нравится паскалевский hex в виде $DEADBEEF

praseodim ★★★★★
() автор топика

Ну слава богу, что это самая большая проблема в Rust нынче.

Legioner ★★★★★
()
Ответ на: комментарий от tailgunner

Я доктор, я знаю? Просто пример для иллюстрации, только не надо доказывать, что в реальности такого не может быть. По-любому, интерпретация значения как десятичного, там где оно 8-миричное - это ошибка, чреватая в том числе и проблемами в безопасности. Об чем и есть исходная статья и на что выписали CVE

praseodim ★★★★★
() автор топика
Ответ на: удаленный комментарий

Мне вообще удавалось няпывать, вставляя %коды, вместо букв в url.

praseodim ★★★★★
() автор топика
Ответ на: комментарий от praseodim

да, да и так тоже, я тогда себе спец тулзу гуишную напейсал что модифицировала url так что у админа видимо глаза в кучу были и нихера не понимал что в логах

superuser ★★★★★
()
Последнее исправление: superuser (всего исправлений: 3)
Ответ на: комментарий от praseodim

я знаю?

Ну ты так уверенно вещаешь, что со стороны можно подумать, будто знаешь. Но не знаешь, понятно.

Просто пример для иллюстрации, только не надо доказывать, что в реальности такого не может быть.

Пример говно, в реальности такого быть не может. Пакеты не ходят по сети с текстовым представлением IP внутри.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от praseodim

Я бы скорее винил авторов мракобесного RFC.

Написано, конечно, чёрным по белому:

it allowed octal and hexadecimal in addition to decimal

Но, тем не менее, зачем?

WitcherGeralt ★★
()

Кстати, это же до сих пор драфт, а не RFC. Гипотетически, можно и убрать это оттуда. И добавить эмодзи.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

например, было вычислительно проще переводить в бинарное представление из текстового восьмеричного или шестнадцатеричного, чем десятичного

в 70-е годы наверное это было важно

Harald ★★★★★
()

Я сильно сомневаюсь, что в мире есть хоть один сетевой стек, правильно реализующий всё наслоение RFC для получения абстрактной странички по https.

aidaho ★★★★★
()
Ответ на: комментарий от tailgunner

Пример говно, в реальности такого быть не может. Пакеты не ходят по сети с текстовым представлением IP внутри.

Пакеты допустим не ходят, а правила для файрвола могут быть, и даже скорее всего будут, написаны в текстовом виде.

praseodim ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.