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, но тем не менее, коли из соображений совместимости до сих пор используется, в том числе в сетевых либах, то стоило бы об этом помнить, если взялся за такое дело как стандартную библиотеку писать.

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

★★★★★
Ответ на: комментарий от superuser

Я к тому что 20 лет назад только у него nginx и был. :)

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

Весь смысл текстового представления в том, чтобы его людям было удобно читать.

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

Вот если ты вставишь восьмеричные числа в правила файрвола, написанного на Rust, они будут интерпретированы неверно. Но это ровно твоя проблема. Как бы не пытались тебя сломать злые хакеры на другой стороне файрвола, обсуждаемая ошибка им не поможет, если ее не сделаешь ты. Ты же не пишешь IP-адреса восьмиричным кодом? %)

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

а правила для файрвола могут быть

Если правила фаервола апеллируют ip адресами как текстовым представлением, то при чём здесь сетевая библиотека?

Это надо ССЗБ быть написать правила в 8-ричном текстовом представлении, что бы потом через него пускать в 10-ричном.

shpinog ★★★★
()

Приложения, использующие std::net::IpAddr при разборе указанных пользователем адресов потенциально подвержены атакам SSRF (Server-side request forgery), RFI (Remote File Inclusion) и LFI (Local File Inclusion).

Вот это я понимаю сову на глобус натянули.

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

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

С чего бы это? Уязвимость вроде в самой сетевой библиотеке, а не в реализации строк.

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

Уязвимость вроде в самой сетевой библиотеке, а не в реализации строк.

Никто и не говорил, что уязвимость в реализации строк. Ошибка в разборе строкового значения IP-адреса: «строковые значения IP-адресов, начинающиеся с нуля, должны интерпретироваться как восьмеричные числа, но многие библиотеки не учитывают данную особенность и просто отбрасывают ноль, обрабатывая значение как десятичное число».

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

А зачем внутри фаервола написанного на раст, парсить числа из 8ричного представления в 10-ричное и наоборот, с помощью std::net, если там на уровне строк можно преобразовывать числа и парсить?

Просто не совсем понятно по какой логике должен быть написан фаервол, что ему подсунут какой-то IP-адресс, а он его распарсит не верно и это стало уязвимостью.

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

Что именно непонятно во фразе «если ты вставишь восьмеричные числа в правила файрвола, написанного на Rust»? Правила фйрвола пишутся текстом, IP-адреса из текста парсятся std::net, если они восьмиричные - парсятся неправильно и делают не то, что хотел автор.

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

Правила фйрвола пишутся текстом, IP-адреса из текста парсятся std::net, если они восьмиричные - парсятся неправильно и делают не то, что хотел автор.

Наверно то, что автор не будет писать парсер для правил своего фаервола, в котором адреса представляются в 10-ричной форме, а потом писать сами правила в 8-ричной.

Это как должно выглядеть? Пишу я правило разрешающие вида 10.10.10.1 to 10.10.10.2 tcp 4040 allow, всё хорошо. Дальше какой пакет должен прийти, что бы это обойти?

Допустим будут стучаться по 010.10.10.1, всё равно попадут туда же. Будут по 020.10.10.1, всё равно не пройдёт.

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

Дальше какой пакет должен прийти, что бы это обойти?

Да никакой. В пакетах, которые по сети ходят, IP-адрес в текстовом виде не хранится.

«Проблема» будет только тогда, если ты в конфиге файрволла напишешь 010.011.012.013, имея в виду 8.9.10.11. Но ты так не будешь писать, 146%.

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

А если запрос? Не могу придумать как это использовать.

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

не буду, ну не nginx, а squid наверно был, какая разница :)

superuser ★★★★☆
()

Лососнул тут только ТС, не осилив понять уязвимость.

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

Навскидку, я могу представить как дебил-админ не туда 0 сунул в описании правил этого гипотетического фаерволла, а библиотека хруста это радостно распарсила как восьмеричное число.

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

а библиотека хруста это радостно распарсила как восьмеричное число.

Так там в новости как я понял написано, что оно просто отбрасывает 0 и дальше воспринимает как 10-ричное число. То есть 0127.0.0.1 в итоге получится 127.0.0.1. В русте вообще как я понял это будет паника.

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

Только библиотека хруста радостно эти нули просто отбросит и распарсит число как десятичное. Это понятно из описания уязвимости.

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

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

Окей, ты представил. Что дальше? Будешь представлять, как дебил-админ промазал по клавише и просто набрал не ту цифру?

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

ШОК, СЕНСАЦИЯ - В ПРОГРАММАХ НА ЯЗЫКАХ С MEMORY SAFETY БЫВАЮТ ОШИБКИ!!!!!11

Как послушать евангелистов раста, так достаточно написать программу на расте, и в ней не будет багов, а компьютер замироточит. ПОТОМУ ЧТО 73% ВСЕХ ОШИБОК — ОШИБКИ БЕЗОПАСНОСТИ ПАМЯТИ!!!!!111

shimon ★★★★★
()

Другая, что «разруха она не в клозетах, а в головах»

Так и есть. Скоро сложные программы будет некому писать - молодёжь не хочет напрягаться - всё на расслабоне делают, отсюда такие ошибки.

x-signal ★★
()
Ответ на: комментарий от shimon

Как послушать евангелистов раста, так достаточно написать программу на расте, и в ней не будет багов,

И живут эти евангелисты Раста в твоей голове.

73% ВСЕХ ОШИБОК — ОШИБКИ БЕЗОПАСНОСТИ ПАМЯТИ!!!!!111

Ты невнимательно слушаешь голоса. Возможно, они говорили о 73% ошибок в программах на Си.

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

А что не частности? Главное обещание Rust - memory safety, оно не нарушено. А отсутствия любых ошибок никто не обещал.

tailgunner ★★★★★
()

Ну забыли. Сейчас поправятся и дальше поедут.

turtle_bazon ★★★★★
()

Ураа! раст и го обосрались! Счастье то какое! Давайте праздновать, бухать, танцевать! Депрессивный мир сишников наполнился красками!

TDrive ★★★★★
()

на opennet не накудахтался и на лор принёс?

Gedweb
()
Ответ на: комментарий от TDrive

Чего сразу депрессивный-то, каждый день праздник! Это у тех, кто между тремя копиями растокода переключается, чтобы слишком много времени не тратить на ожидание конпеляции, депрессия будет от такого.

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

Как послушать евангелистов раста

ПОТОМУ ЧТО 73% ВСЕХ ОШИБОК — ОШИБКИ БЕЗОПАСНОСТИ ПАМЯТИ!!!!!111

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

https://en.wikipedia.org/wiki/Straw_man

Перекривляющий текст капсом подтверждает

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

Говнокодеры, не умеющие в Си, будут говнокодить и на «безопасных» языках типа раста.

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

надо сразу вот так писать

$ ping 0177.1

или

$ ping 0x7f.1

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

В ассемблер - возможно. Он проще.

Хорошо. Тогда норм.

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

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

кто-то должен уметь ассемблер для перевода с безопасных языков в бинарники

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

Кстати, с Си примерно то же самое, только перевод в Си выполняется (обычно) человеком.

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

У меня закрадывается подозрение, что на фоне всего этогго веселья ассемблер - вот безопасный язык =)

По крайней мере никакого хитрого синтаксиса, undefined behavior и путаницы с указателями. Просто внимательно все записывать и всегда будет ясно, что на чего указывает, значение или адрес и т.п.

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

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

Да, в этом ключ к решению проблем - надо просто быть внимательным.

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

И у ножа ручка - это лишнее. Достаточно одного лезвия и просто держать аккуратно

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

Ну раз кто-то там что-то там сказал, то точно инфа сотка

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

Чёрт с ним с RFC, где это используется?

Может где-нибудь в дико старых программах времён появления ipv4...

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