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 ☕☕☕☕☕
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.