В стандартных библиотеках языков Rust и Go выявлены уязвимости, связанные с некорректной обработкой IP-адресов с восьмиричными цифрами в функциях разбора адреса. Уязвимости позволяют обойти проверки допустимых адресов в приложениях, например, для организации обращения к адресам loopback-интерфейса (127.x.x.x) или интранет-подсетям при совершении атак SSRF (Server-side request forgery). Уязвимости продолжают цикл проблем, ранее выявленных в библиотеках 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).
В соответствии со спецификацией строковые значения IP-адресов, начинающиеся с нуля, должны интерпретироваться как восьмеричные числа, но многие библиотеки не учитывает данную особенность и просто отбрасывают ноль, обрабатывая значение как десятичное число. Например, число 0177 в восьмеричной системе равно 127 в десятичной. Атакующий может запросить ресурс, указав значение "0177.0.0.1", которое в десятичном представлении соответствует "127.0.0.1". В случае использования проблемной библиотеки, приложение не определит вхождение адреса 0177.0.0.1 в подсеть 127.0.0.1/8, но фактически при отправке запроса может выполнить обращение к адресу "0177.0.0.1", который сетевые функции обработают как 127.0.0.1. Похожим образом можно обмануть и проверку обращения к интранет-адресам, указав значения подобные "012.0.0.1" (эквивалент "10.0.0.1").
В Rust проблеме оказалась подвержена стандартная библиотека "std::net" (CVE-2021-29922). Парсер IP-адресов данной библиотеки отбрасывал ноль перед значениями в адресе, но только если указано не более трёх цифр, например, "0177.0.0.1" будет воспринято как недопустимое значение, а в ответ на 010.8.8.8 и 127.0.026.1 будет возвращён неверный результат. Приложения, использующие std::net::IpAddr при разборе указанных пользователем адресов потенциально подвержены атакам SSRF (Server-side request forgery), RFI (Remote File Inclusion) и LFI (Local File Inclusion). Уязвимость устранена в ветке Rust 1.53.0.
В языке Go проблеме подвержена стандартная библиотека "net" (CVE-2021-29923). Встроенная функция net.ParseCIDR пропускает нули перед восьмеричными числами, вместо из обработки. Например, атакующий может передать значение 00000177.0.0.1, которое при проверке в функции net.ParseCIDR(00000177.0.0.1/24) будет разобрано как 177.0.0.1/24, а не 127.0.0.1/24. Проблема в том числе проявляется в платформе Kubernetes. Уязвимость устранена в выпуске Go 1.16.3 и бета-версии 1.17.
>>10479572 Ну ты ведь гарантированно используешь гугл и ютуб, там куча подсистем на go. Вообще легче перечислить, где эти язычки сейчас не используются, чем наоборот
>>10479793 Анальники думают что зря 5 лет учатся в этих ваших академиях..чотатам компухтер сцаенза В итоге не знают ньюансов и высерают "либа на 1000% быстрее" и говно то ставят только маркетолохи чтобы продать по быстрей ту парашу, чем серьезное пишут своими руками и проводят аудиты кода.
>>10479801 Положа руку на сердце, здесь даже без академического диплома быдлокодерство уровня студенческой лабы: не смочь банально распарсить строку в число.
>>10479822 Конечно совершал, человеку свойственно ошибаться. Но в проектах такого уровня, как стандартная библиотека достаточно популярного языка, такие детские ошибки жить не должны.
Справедливости ради, Кернигана и Ричи должна настигнуть карма за дурацкую запись восьмеричных чисел в C, откуда она расползлась по другим языкам программирования.
>>10479713 Раст активно мейнтейнится и юзается мозиллой. Например на расте двигло огнелиса сделано. Так же, на расте реализован протокол shadowsocks для обфускации трафика. А на go стделан для него плагин v2ray.
>>10479899 > Например на расте двигло огнелиса сделано Хуета, с тем же успехом можно нескушной либой/макросом на си++ собрать просто убрать богомерзкий счетчик ссылок и ок.
>>10479887 А ты типа на каждый чих всегда читаешь полностью спецификацию со всеми примечаниями и нюансами, и конечно при парсинге строки с айпишником первым делом подумал бы о возможности восьмеричной его записи.
>>10479924 Очевидный потому что сейчас известно куда смотреть. Когда у тебя полное поле перебора вариантов откуда может что прилететь, очевидность неочевидна.
>>10479915 Что мешает иметь стандартную функцию, автоматом определяющую по префиксу тип числа и разбирающую его до первого недопустимого символа? Только привычка гошников воротить велосипеды по случаю и без.
>>10479915 > о возможности восьмеричной его записи. запись ебать меня не должна, я должен знать что айпи это разбивка по FF-FF-FF-FF и в целом это ОДНО число, тобишь +1 даст прокрутку всех. А как его вводят меня ебать не должно, у меня на точке входа только 1 вид адреса разбирается(байтовый) и шлется нахуй а не залупа уровня 00000001ОЯБУНЕСКУЧНЫЙТЕКСТ IP-адрес представляет собой 32-битовое (по версии IPv4) или 128-битовое (по версии IPv6) двоичное число.
>>10479940 >полное поле перебора вариантов Число может быть десятичным, восьмеричным либо шестнадцатиричным, даже двоичное не предусматривается. Три варианта предусмотреть точно не проблема.
>>10479957 > Число может быть десятичным, восьмеричным либо шестнадцатиричным Но скорее всего число будет десятичным, а о других системах счисления просто не подумали, т.к. не предполагали, что будут атаковать в этом направлении. Косяк конечно, но опять-таки ты даёшь совет, уже зная область ошибки.
>>10479957 нет никаких чисел, есть ссылка на тип и просто насреньканные байты, поменял я тип без преобразования, байты теже смысл другой и теперь 0..255 это не инт, а кастомная пилка где с 0 по 255 записывается диапазон 1 по 8, а остальной промежуток это десятичная часть. >>10479970 Просто шлю нахуй через прогу или через прокси, поддерживать нескучную залупу уровня а вдруг к вам приедет фура а у водителя вместо рук ноги, ммм? как сдроватся будешь? Ага? неподумал. Так и тут индаин идет нахуй прям как жопера.
>>10479981 > Просто шлю нахуй через прогу или через прокси При разработке крупного проекта решать о посылании будешь явно не ты. С окейфейсом будешь обрабатывать что скажут.
>>10479976 Так программисты — это не пользователи, и знание о существовании шестнадцатиричной и восьмеричной систем — это азы их профессиональной компетентности. Если они в такой простой ситуации «просто не подумали», страшно представить, что они в более сложной упустить могут.
>>10479990 >блин ну пачиму я не могу заюзать ботнет дабы он по столетнему багу с турбозалупой 0,5б которую должен поддерживать любой комп вдруг мне захочется скинуть фоточки на его считыватель перфокарт.. >блин так не честно, поддерживайте а то придется опять радмин ставить в виндовс-зверь
>>10479999 Это блаблабла, сорян. Знают люди много, но каждую секунду на каждый вопрос полным объёмом имеющихся знаний никогда не пользуются, это невозможно. Вопросы «парсинг айпи из строки» и «системы счисления» напрямую в одной области не находятся.
>>10479981 >нет никаких чисел Правильно, есть строка в которой могут встретиться только цифры и буквы a, b, c, d, e, f, x (последнее — только в определённом месте) и точки-разделители. Если строка начинается с нуля, то число НЕ десятичное. Вот и вся задачка.
>Просто шлю нахуй через прогу или через прокси Как ты определишь, что надо слать нахуй? Ты ждал 64 или 128 бит, ты их получил, как догадаться, что у них порядок нахуй не тот, который ты ждал?
>поддерживать нескучную залупу уровня а вдруг к вам приедет фура а у водителя вместо рук ноги Вот благодаря таким скучающим кодерам и появляются в ПО уязвимости на ровном месте, а потом всякие вирусы пети ставят раком половину компов в мире.
>>10480011 Нет, блаблабла — это твои оправдания. Незнание не освобождает от ответственности. А парсинг айпи из строки автоматом предполагает знание систем счисления, что следует из его спецификации.
>>10480011 Шо ты блядь оправдываешься дэбил? На галере держат тестировщиков и платят им зарплату. Если тестаны проебали очевидный дорвей, то менять блядей всем отделом с начальником.
>>10480032 >Правильно, есть строка в которой могут встретиться только цифры и буквы a, b, c, d, e, f, x (последнее — только в определённом месте) и точки-разделители. Если строка начинается с нуля, то число НЕ десятичное. Вот и вся задачка. Че браузер шлет? Случаем не просто байты? Какие нахуй строки.
Ок, сидим не с браузера а ожидаем с программы 1 на программу 1(копия) одни данные, так компилятор имеет свою зону ответственности и не должен угадывать что будет если введут в строку число и как его пережует потом.
>>10480041 похуй на энжиникс параше это даже не заметили, на джава-параше тоже такое есть, правда там подрубили 2 модуля 1 то правильный айпишник то отдаст или получит. >Ты ждал 64 или 128 бит, ты их получил Меня ебать не должно, в пределах компилятора прога верна, за внешний мир я не отвечаю, вдруг там ваще хуем по плате буут водить и статикой байты перемешает и чо потом?
>>10480038 > Незнание не освобождает от ответственности Я от неё и не освобождаю, а пытаюсь представить почему так получилось > что следует из его спецификации Которую полностью не прочитали, т.к. восьмеричная запись айпишника нинужное говно, непонятное для чего, вот и не предположили что эта дичь возможна. А опускать ведущие нули в десятичных числах абсолютно естественно.
>>10479533 (OP) Как всё-таки досадно, что в таких новеньких, блестящих языках только из коробочки, приходится пилить какие-то уебанские костыли для поддержки всякого кривого говна из прошлого века. Ну какая ещё нахуй восьмеричная система для строк, начинающихся с нуля. В других местах это наоборот воспринимается как ёбнутая особенность, о которой не знают новички. А тут это часть спецификации, видите ли. Можно подумать от этой конвенции есть хоть какая-то польза. Делали бы хоть как с шестнадцатиричной префикс из какой-то буквы, чтоб это явно видно было, пидорасы блядь.
>>10480075 там высер уровня у меня прога х+у=й ну я в переменную Y ввел ваще мусор/буквы короче чет посчитало правда не ебу чо..
В реальной проге что в интернет смотрит то говно даже не сработает так как только в 1 виде будет кормить ей уже сетевая плата с драйверами написаными на СИ=параше Работать максимум будет с логами, чтобы ебать лохов админов ааа хули мне с локалхолокоста пишут что я лошара? На выход же или будет не работать(как это отправить на деревню дедушке пакет) или будет работать и похуй на адресацию.
>>10480050 Да, он шлёт байты. И если ты интерпретируешь присланные данные как массив байтов (условную ASCII строку), то вопрос об endianess тебя вообще не ебёт. А вот если ты делаешь предположение, что эти 4 байта — это целое беззнаковое число в формате little-endian, то работоспособность твоей гипотезы — полностью на твоей совести.
>в пределах компилятора прога верна Скомпилировалась, значит правильная? Если ты действительно так пишешь код, то тебя надо гнать из прогеров взашей.
>за внешний мир я не отвечаю Ты отвечаешь за обработку данных в рамках спецификации. А на самом деле — и сверх того, потому что если прога не работает, бизнес не получает деньги, а значит зарплату тебе платить нечем.
>>10480057 >почему так получилось Да это как раз понятно. Непонятно другое, как людей, которые спецификацию полностью не читали, допустили к разработке стандартной библиотеки.
>восьмеричная запись айпишника нинужное говно, непонятное для чего, вот и не предположили что эта дичь возможна. Личное мнение — проблема его владельца. По факту все кейсы, требуемые спецификацией, программа должна покрывать, нравится тебе или нет.
>опускать ведущие нули в десятичных числах абсолютно естественно Бери машину времени, перемещайся в 70-е, ищи Кернигана и Ричи и рассказывай это им.
>>10480114 >Скомпилировалась, значит правильная? Если ты действительно так пишешь код, то тебя надо гнать из прогеров взашей. Математически доказана что из программы есть выход и не имеет логических пробелов уровня буква Б(не ебу какие байты) + 6 = Хуй знает сколько.
Можно поставить вентили и проверять там ввод и точки входа данных, на остальном компетенция программиста оканчивается, вдруг у него там левые либы будут или ваще на калькуляторе запускать будет без поддержки половины команд? >>10480114 >Ты отвечаешь за обработку данных в рамках спецификации. спецификация такова, что а) получаем норм данные и работаем б) получаем хуету и шлем ее нахуй перед тем записав в логи У тебя же вариант получаем хуету и пытаемся ее обработать, создаем баги(а вдруг у него потерялись пакеты и там должно быть...)
>>10479804 Не охуел ли ты гнать на дотнет? Самые передовые кросплатформенные технологии, которые используют божественный С# с его изобилием библиотек и полноценным ООП. Даже фронт уже можно писать на С#. Где ты еще встретишь такую универсальность и прогрессивность?
>>10480135 Покажи мне математические доказательства корректности какой-нибудь программы сложностью уровня сетевой библиотеки языка. Если что, на Хаскелле системное ПО не пишется.
>спецификация такова, что а) получаем норм данные и работаем Спецификация такова, что в число нормальных данных входят и 8-ричные айпишники, и данные, полученные из систем с неизвестным для тебя порядком байтов. Твоя задача учесть ВСЕ возможные варианты (а иногда и сверх того). Не смог — извини, твоя программа не соответствует.
>>10480168 >Покажи мне математические доказательства корректности какой-нибудь программы сложностью уровня сетевой библиотеки языка. Любая программа результат доказуемости, любая игра с сейвами доказывает доказуемость, а не массив байтов которые функциями двигают как в брейнфаке >>10480168 >Спецификация такова, что в число нормальных данных входят и 8-ричные айпишники Которые должна обрабатывать сетевуха и высирать нормальный вид. В программе максимум же с "уязвимостью" посрут в логи левой хуйней или обойдут фаервол от васяна.
>>10480177 >Любая программа результат доказуемости, любая игра с сейвами доказывает доказуемость Высер уровня ПТУ.
>Которые должна обрабатывать сетевуха и высирать нормальный вид. Малыш, что должна сетевуха, описано в спецификациях сетевых протоколов. Телепатией, чтобы отгадывать, что вот этот набор байтиков, который ты в неё кинешь, обозначает IP в определённом тобой формате. она обладать не должна.
>>10480191 Ну реализуй уязвимость, хули. >>10480191 >Высер уровня ПТУ. Каждый раз запускаешь новую винду? Через год из нее линукс соберется? Максимум некоректное состояние из-за 2 функций на 1 переключателе.
>>10480179 >Запусти .NET-приложение на Arduino Нехуй делать >полноценным ООП >Ты совсем ебанулся? Можно юзать SOLID и депенденси инджекшен. В вебе только Ангулар так умеет >Давно браузеры научились интерпретировать байт-код .NET? С# компилируется в джаваскрипт, на подобии, как тайпскрипт в джаваскрипт
>>10480205 >реализуй уязвимость, хули Вот уже реализовали, о чём и новость.
>Каждый раз запускаешь новую винду? Каждый глюк, зависание или выпадение в синий экран доказывает, что винда работает некорректно. И никто не станет заниматься математической верификацией системы такого объёма и вариативности, так что здесь ты обосрался.
>>10480215 >Вот уже реализовали, о чём и новость. >nil(ебабо)+i nt(2)=nil(ебабо2) Ясно>>10480215 >или выпадение в синий экран доказывает, что винда допускает в ядро говнохуету, и могла бы с лагом в 1мс просто ложить хуй на дрысню эту, а потом за 20мс обратно грузится, ты даже не заметишь из-за прыжков меж приложениями >математической верификацией системы такого объёма и вариативности, так что здесь ты обосрался. >а чо если в очко сатаны лом и руку засунуть чо будет? ясно
>>10480147 >Не охуел ли ты гнать на дотнет? Самые передовые кросплатформенные технологии, которые используют божественный С# с его изобилием библиотек и полноценным ООП. Даже фронт уже можно писать на С#. >Где ты еще встретишь такую универсальность и прогрессивность? В высере под названием Delphi что-то подобное декларировали.
>>10480247 Опять трудовик ебал на пару с поцколистом? ууу ну пачиму меня не учили кодить ногами на с++ так бы для пидорашки получал бы баслословные 2к баксов...
>>10480224 >Значит как и раньше, во фронтэнде программы только на джаваскрипте работают? В браузере только джаваскрипт работает. Сервер генерирует джаваскрипт и выдает его клиенту в браузер. Кстати, ты тупорылое уебище. Что-то уровня агрессивного ПТУшника, которого с первого курса нормального универа отчисляют
>>10480256 >В браузере только джаваскрипт работает WebAssembly? Не, не слышали.
>Кстати, ты тупорылое уебище. Что-то уровня агрессивного ПТУшника Снежинка обиделась? Ничего, это только начало, готовь свой попчанский к ещё большему разрыву.
>>10480225 Тебе пришли данные, удовлетворяющие спецификации, которую ты не читал/читал затылком вверх ногами. Твоя прога валится или выдаёт хуйню. В этом виноват исключительно ты.
>допускает в ядро говнохуету, то есть даже просто о грамотном инженерном решении речи не идёт, не то, что о математически доказанной корректности. Молодец, что признал своё обсёр.
>а чо если в очко сатаны лом и руку засунуть чо будет? Вот когда принесёшь примеры использования жопы сатаны в спецификациях и энтерпрайзе, тогда и высирай свои аналогии.
>>10480273 Не-не. Ты же заявил о «полноценном ООП в C#». Так что это я, удобно устроившись с попкорном и колой, слушаю, как ты будешь запинающимся голоском обосновывать свои слова. А потом объясню тебе, что твоё мнение говно, ты пидорас, а твоя мамаша — шлюха.
>>10480283 >Вот когда принесёшь примеры использования жопы сатаны в спецификациях и энтерпрайзе, тогда и высирай свои аналогии. True False Так как водили жопой по ОЗУ и волосня меняла байты, пришлось для стабильности вводить 000000/1111111 >>10480286 ООП математически не доказуем(не императивен) а значит идет нахуй, так как нам не нужно аналитическое решение.
>>10480283 >то есть даже просто о грамотном инженерном решении речи не идёт винда должна знать про 10001 китайский подвал где мышки паяют?
>>10480269 А че ты такой злой? Небось весь день ебался, причмокивая, с божественным шарепоинтом на божественном аспе, что даже не удержался сообщить всем в раст-го-треде о своей ориентации?
>>10480301 Упущенных тобой поинта два. 1. Не джаваскриптом единым. 2. Фронтэнд можно писать на любом языке, который транслируется в джава-скрипт, и C# в этом не представляет ничего особенного. Хотя можешь рассказать, как .NET библиотеки в джаваскрипт будут транслироваться, и каков итоговый объём скрипта выйдет.
>>10480307 Забавно что ASP.NET-хуесос упомянул руби, с рейлс которого мелкомягкие пытаются пиздить всё что могут, но всё равно получается только высер говна.
>>10480287 Жопой сатаны водили по ОЗУ? Need more details.
>ООП математически не доказуем Ага, то любая программа — результат математического доказательства, то вдруг ООП не доказуем.
>(не императивен) Схуяли ООП не императивен? Он вполне _может_ быть императивным (но это не обязательно).
>винда должна знать про 10001 китайский подвал где мышки паяют? Винда должна отказываться работать с оборудованием, нарушающим спецификации, либо предупреждать, но никак не впадать в прострацию — это ошибка проектирования.
>>10480327 > то вдруг ООП не доказуем. Потому-что это подразумевает отдельные домена и даже ОС, тобишь интернет не доказуем что он будет работать вообще корректно без обмаза императивщиной. Ну ты можешь ходить к врачу чтобы он вызвал у тебя метод лечить рак жопы, хули. Или как там в вере ООП должно быть? Ведь объект лишь предлает другому и если нет метода у него то нехуя не делает.
>>10480337 >ООП >отдельные домена и даже ОС, тобишь интернет не доказуем >ООП Ты что несёшь, поехавший? Причём ООП к устройству сети?
>Ведь объект лишь предлает другому и если нет метода у него то нехуя не делает. Вот, это кстати и есть то самое «полноценное ООП», правда какое отношение к нему имеет обрубок из C# — это интересный вопрос.
>>10480419 Для решения задатч есть математика. Для автоматизации уже решенных задач. ООП хуета нахуй нада там, типо я говорю пожарь картошки а тебя дауна резист к хрюскому языку и ты ваще таджик в биг-индиан долбишься в жопу по спайсами. И короче картошки я не дождусь или дождусь хуй его знает.
>>10480427 Математика — это теоретическое решение. А воплощение его в работоспособном коде — практическое решение. С поправкой на некоторые проблемы реального мира, которые могут не учитываться в матмодели.
>ООП хуета нахуй нада там Ну блядь, от задачи зависит. Если чисто байтики перекладывать, то не надо, а если надо высокоуровневыми сущностями оперировать, то так или иначе будешь ООП пользоваться или эмулировать.
>в биг-индиан долбишься >картошки я не дождусь или дождусь хуй его знает. При грамотном проектировании дождёшься, и можешь быть уверен, что она никогда не будет случайно зажарена до угольного состояния, потому что кодер поленился дочитать спецификацию.
>>10479996 IoT устройства считают иначе. Дело в том, что зеленая повесточка предполагает серьезное снижение потребляемой энергии различными устройствами, из-за этого в калифорнии у некоторых производителей проблема - там с 1 июля запрещено продавать игровые ПК и игровые мониторы соснолей не касается лол, IoT это тоже коснется, поэтому хочешь не хочешь, а С и C++ взлетят еще больше в ближайшее время.
>>10480474 Раст компиляется в LLVM. А это ограничивает сферу возможного применения. Говорю это, как сочувствующий расту и мечтающий дожить до похорон крестов.
>>10480515 Интересная статистика. Хотелось бы понять, чем обуславливается уровень энергопотребления при использовании того или иного языка. Думаю, что используемыми им абстракциями, типа виртуальной таблицы функций в плюсах. Но совсем без неё — как?
>>10480515 >>10480549 Забыл добавить. По моему опыту работы в тырпрайзе выбор будет всегда склоняться к ЯП по которому проще всего закрыть вакансию. Я это требование видел во всех презентациях на архитектурных комитетах во всех крупных компаниях, где работал
>>10480757 >Тот же пыхтон потому так популярен В тырпрайзе его часто вижу только в проектах с какими-нибудь математическими моделями и машобом, да и вариантов то особо нет, можно, конечно, залупить подобное на Scala, но потом охуеешь это поддерживать. Со Scala у меня случай был, команда одним днем на похуй всей толпой из банка с проекта съебала, им какой-то западный заказчик предложил срочный проект с х4 ценником, там ЗП до 700к у разраба доходила, ну а мы нанять так и не смогли, в итоге, наняли кучу Java макак и они в течении года все переписали, даже лучше работать стало. В обычных проектах, вообще, практически не встречал Петухон, все прекрасно понимают какая это ебала поддерживать бэк на ЯП с динамической типизацией, поэтому он практически всегда проигрывает в выборе решения
>>10481073 Ну смотря с чем сравнивать, по сравнению с пыхом выигрывает за счёт более удачной модели типизации, по сравнению с Руби — распространённостью и быстродействием, лол. Но насчёт ебалы с поддержкой полностью соглашусь. Разве что вместо жабы выбирал бы гошку ну или котлету на худой конец, если привязка к жабоплатформе принципиально важна.
>>10481593 >>10481813 В месяц же, и там было где-то 10к долларов, что в целом-то соответствует стартовой ЗП в FAANG. Плюс это же ЗП за срочность и это заказчик из кремниевой долины был, поэтому они-то все съебали с проекта. К тому же проект временный, за 4 месяца они управились и пошли работу искать, но зато с новой крутой строчкой в резюме