The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Уязвимость в NPM-пакете node-netmask, применяемом в 270 тысячах проектов

29.03.2021 10:03

В NPM-пакете node-netmask, насчитывающем около 3 млн загрузок в неделю и используемом в качестве зависимости у более 270 тысяч проектов на GitHub, выявлена уязвимость (CVE-2021-28918), позволяющая обойти проверки, в которых сетевая маска используется для определения вхождения в диапазоны адресов или для фильтрации. Проблема устранена в выпуске node-netmask 2.0.0.

Уязвимость позволяет добиться обработки внешнего IP-адреса как адреса из внутренней сети и наоборот, а при определённой логике использования модуля node-netmask в приложении совершить атаки SSRF (Server-side request forgery),RFI (Remote File Inclusion) и LFI (Local File Inclusion) для обращения к ресурсам во внутренней сети и включения в цепочку выполнения внешних или локальных файлов. Проблема заключается в том, что в соответствии со спецификацией строковые значения адресов, начинающиеся с нуля, должны интерпретироваться как восьмеричные числа, но модуль "node-netmask" не учитывает данную особенность и обрабатывает их как десятичные числа.

Например, атакующий может запросить ресурс, указав значение "0177.0.0.1", которое в десятичном представлении соответствует "127.0.0.1" (число 0177 в восьмеричной системе равно 127 в десятичной), но модуль "node-netmask" отбросит ноль, и обработает 0177.0.0.1" как "177.0.0.1". В приложении при оценке правил доступа не будет определена тождественность с "127.0.0.1" и ресурс будет загружен с "0177.0.0.1" (фактически с 127.0.0.1), несмотря на запрет обращения к адресам loopback-интерфейса.

Аналогично при обращении к приложению атакующий может указать адрес "0127.0.0.1", который тождественен "87.0.0.1", но в модуле "node-netmask" будет обработан как "127.0.0.1" (т.е. приложение разрешит доступ к операциям с 127.0.0.1, несмотря на то, что фактически указан внешний адрес). Подобным образом можно обмануть и проверку обращения к интранет адресам, указав значения подобные "012.0.0.1" (эквивалент "10.0.0.1", но при проверке в node-netmask будет обработан как 12.0.0.1).

Выявившие проблему исследователи называют проблему катастрофичной и приводят несколько сценариев атак, но большинство из них выглядят умозрительными. Например, говорится о возможности атаковать приложение на базе Node.js, устанавливающее внешние соединения для запроса ресурса на основе параметров или данных входного запроса, но конкретно приложение не называется и не детализируется. Даже если найти приложения, выполняющие загрузку ресурсов на основе введённых IP-адресов, не совсем ясно, как можно применить сценарий с отдачей фиктивного ресурса без подсоединения к локальной сети или без получения контроля за "зеркальными" IP-адресами.

Исследователи предполагают, что владельцы адресов в подсетях 87.0.0.1/8 и 177.0.0.0/8 имеют возможность обойти ограничение доступа к 127.0.0.1. Более реалистичным сценарием является использование уязвимости для обхода различных списков блокировки, реализованных на стороне приложения. Проблема также может применяться для обмена определения интранет-диапазонов в NPM-модуле "private-ip".


netmask
sees
this
as
–>
netmask
sees
this
as
–>
…then
netmask
defines
the
request
…or
netmask
allows
the
request
(SSRF)
Notable
Range
01201010810.0.0.0/8
014012121010.0.0.0/8
0144010010064100.64.0.0/10
02200144144100100.64.0.0/10
0177012712787127.0.0.0/8
02610177177127127.0.0.0/8
02510169169Err:502169.254.0.0/16
0373*0251251169169.254.0.0/16
0254*0172172122172.16.0.0/12
0376*0254254172172.16.0.0/12
0300*0192192Err:502192.0.0.0/24
0306*0198198Err:502198.18.0.0/15
0313*0203203131203.0.113.0/24
0360*0240240160240.0.0.0/4
* - превышает 254, но не исключается сбой некоторых приложений и в этом случае



Дополнение: Аналогичная проблема выявлена во многих библиотеках для других языков. Проблеме подвержена стандартная библиотека std::net::Ipv4Addr языка Rust, частично стандартная библиотека ipaddress языка Python (как восьмеричные интерпретируются значения до 08), а также Perl-модули из CPAN Net-Netmask (исправлено в версии 2.0), Net-CIDR-Lite, Net-IPAddress-Util и Data-Validate-IP. Проблема отсутствует в perl-модулях NetAddr-IP и Net-Subnet.

  1. Главная ссылка к новости (https://sick.codes/universal-n...)
  2. OpenNews: Атака на пользователей почтовых клиентов при помощи ссылок "mailto:"
  3. OpenNews: Атака на системы фронтэнд-бэкенд, позволяющая вклиниться в сторонние запросы
  4. OpenNews: Новый вариант атаки NAT slipstreaming, позволяющей отправить запросы на внутренний IP
  5. OpenNews: Новая техника HTTP атак "HTTP Request Smuggling"
  6. OpenNews: Уязвимость в Apache открывает двери к внутренним ресурсам на другой стороне обратного прокси
Лицензия: CC-BY
Тип: Проблемы безопасности
Короткая ссылка: https://opennet.ru/54857-netmask
Ключевые слова: netmask, nodejs
Поддержать дальнейшую публикацию новостей на OpenNET.


Обсуждение (100) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Леголас (ok), 11:22, 29/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +12 +/
    никогда не было и вот опять ©
     
     
  • 2.12, Аноним (-), 11:53, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Никаких 127.0.0.1 в приличных системах быть не должно !
     
     
  • 3.13, Аноним (-), 11:53, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +33 +/
    ровно как и nodejs
     
  • 3.83, валяйте (?), 19:42, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Как избавиться предлагаеш от 127..0.0.1?
     
     
  • 4.102, B (?), 19:16, 30/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >> 127..0.0.1

    заменить ".." на "."?

     
  • 2.34, Dzen Python (ok), 13:19, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Люблю эти Черномырдинки
     

  • 1.2, имятакое (?), 11:23, 29/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    вот это не понял.

    "0177.0.0.1", которое соответствует "127.0.0.1"

    поясните пожалуйста

     
     
  • 2.3, Ононимус (?), 11:27, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Восьмеричная запись начинается с нуля
     
  • 2.4, Аноним (4), 11:28, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    0177 - восьмиричная система счисления
    переводим в 10-ю и получаем 127
     
  • 2.5, A.Stahl (ok), 11:30, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    0 в начале числа по традиции у программистов означает 8-ричную систему счисления. 177 в восьмеричной равно 127 в десятичной.
     
     
  • 3.22, Lex (??), 12:15, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Странная традиция
    Для интереса посмотрел що в жс как записывается( все начинается с нуля, далее исчисление и само число что гораздо универсальней и наглядней ):

    Бинарные - 0b11 ( 3 )
    Восьмеричные - 0o11 ( 9 )
    Шестнадцатеричные - 0x11 ( 17 )

    Хотя и начинание с нуля тож работает - число воспринимается как восьмеричное.. и даже если тех нулей с десяток )

     
     
  • 4.27, userd (ok), 12:49, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Кто писал на C, тот привык.
    C появился на PDP-11, там восьмеричная система счисления была много популярнее шестнадцатеричной.
     
  • 2.6, Аноним (6), 11:33, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    $ 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.042 ms

     
     
  • 3.7, Леголас (ok), 11:39, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +8 +/
    - поясните пожалуйста, почему это равно этому
    - да, смотри, это равно этому
     
     
  • 4.15, Аноним (15), 12:00, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Потому что потому (с)
     
  • 3.23, userd (ok), 12:19, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +8 +/
    Для полноты картины нужно попинговать 0x7F.0.0.1 , 0x7f.1 , 0x7F000001 , 017700000001 и 2130706433 .
     
     
  • 4.62, Tester (??), 15:18, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    А ведь работает даже под виндой.
     
  • 2.21, anonymous (??), 12:15, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    oct -> dec
     
     
  • 3.50, Аноним (50), 14:10, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +4 +/
    oct -> nov -> dec, неуч
     
     
  • 4.75, Ыыы (??), 17:22, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Почему католические программисты путают Хеллоуин и Рождество?
    Потому, что Oct 31 === Dec 25
     

  • 1.8, Аноним (8), 11:39, 29/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    Было большой ошибкой додуматься до включение восьмеричных чисел в спецификации IP-адресов, которые было очевидно чо в будущем никто читать не будет?
     
     
  • 2.9, Аноним (9), 11:42, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Авторы спеков "так видят", пойми. Скажи спасибо еще римские цифры не добавили.
     
  • 2.57, gogo (?), 14:50, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Для своих целей восьмиричные числа весьма наглядные.
     
  • 2.66, Аноним (66), 16:36, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Обезьянки взяли спеки, и написали "по спекам", как привыкли.
    В реальном мире всё оказалось гораздо неожиданнее.
     
  • 2.76, Аноним (76), 17:26, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > было большой ошибкой додуматься...

    Ваша способность выявлять ошибки вызывает сомнения

     

  • 1.14, Аноним (15), 11:58, 29/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    В ipv6 такая же ситуация?
     
     
  • 2.51, Аноним (50), 14:11, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Другая.
     

  • 1.16, Аноним (66), 12:01, 29/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Зевнул.
    Уже даже не смешно.
    Норма для ноды, руби и прочих растов с композерами.
     
     
  • 2.20, Аноним (15), 12:12, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Дело не в ноде, а коде inet_aton на C который изначально нарушал стандарт.
     
     
  • 3.25, Аноним (25), 12:29, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Именно - дело в коде.
     
  • 3.30, Урри (ok), 13:04, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    а можно детальнее - какой именно стандарт и в чем?
     
     
  • 4.31, Аноним (15), 13:14, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ну вот ссылка в статье есть на спецификацию
    https://tools.ietf.org/html/draft-main-ipaddr-text-rep-02

    >>Meanwhile, a very popular implementation of IP networking went off in its own direction.
    >>  The 4.2BSD inet_aton() has been widely copied and imitated, and so is a de facto standard for the textual representation of IPv4 addresses.

     
     
  • 5.42, 1 (??), 13:47, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    de facto standard
    Это и не стандарт вовсе, а "так принято".

    А стандарт допускает и десятеричное число в качестве ip адреса.

     
  • 5.45, Аноним (45), 13:58, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Какие еще стандарты, там галимотья на кофескрипте конвертящая тупостроки. Афтор небось и не слышал ни про какие inet_aton() за все свои 14 лет жизни.
     
     
  • 6.49, Аноним (15), 14:03, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Если задача стояла конвертить строки, то логично что работа идёт в т числе и со строками. Не вижу в этом проблему. А то что автор не смотрел на inet_aton это хорошо, потому что это как раз с него не надо брать пример.
     
     
  • 7.63, Аноним (-), 15:42, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну еслиб тебя не роняли в детстве на голову так часто - то смог бы осилить айпи адресацию и понимал  как это работает, а не нёс пургу в духе "если там строки то в том числе и строки"
     
     
  • 8.92, Аноним (92), 09:15, 30/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Если бы тебя не роняли в детстве, ты бы не писал чушь в комментариях... текст свёрнут, показать
     
  • 5.74, Урри (ok), 17:13, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Не вижу нарушения. Может подскажете где именно?
     
  • 3.52, Онаним (?), 14:23, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Дело снова в отсутствии полноценной валидации входных данных.
    То есть в кривых руках.
    А заодно - в избыточном доверии к стороннему говнокоду.
    То есть снова в кривых руках.
     
  • 2.105, Аноним (105), 22:13, 02/04/2021 [^] [^^] [^^^] [ответить]  
  • +/
    На Руби не гони, э.
    https://ideone.com/H0ewsR

    Тут вам не питонжсы.

     

  • 1.17, Анонимно Аффтор (?), 12:03, 29/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Магия и остроумие костыликов: сделать просто - договориться о волшебном значении нуля в начале строки.

    А чё, простое и остроумное решение. И сколько ж встречено  таких кроильщиков...

    Кроилово ведёт к попадалово.

     
     
  • 2.60, ryoken (ok), 15:12, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Вы таки будете смеяться, но если в вендовой командной строке так что-то попинговать - будет соответствие RFC и пинги поедут на 8-ричный адрес :D.
     
     
  • 3.65, Анонимно Аффтор (?), 16:07, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Поинт в другом. Сокрытие настоящего типа объекта приводит к внезапности.
     

  • 1.18, Аноним (15), 12:07, 29/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +8 +/
    Вот они удивятся когда узнают что можно не только восьмеричные писать, но и 16-ричные
    ping 0x7F.0x0.0x0.0x1
     
     
  • 2.29, Аноним (29), 13:03, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Ээээ слушай, канчай шатать наша вселенная нода жс да !
     
  • 2.37, Леголас (ok), 13:29, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +4 +/
    господа нодисты открыли ящик Пандоры
     
     
  • 3.61, Аноним (61), 15:13, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Нее. Тот ящик на всех подействовал. И был чужим.
    А эти сами себе всё делают.
     

  • 1.19, Аноним (15), 12:11, 29/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я пробежал указанный документ. Из него следует что это не особо и то и вина разрабов пакета.

    >> So far we've seen two parallel versions of IPv4 address textual

       syntax.

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

     
  • 1.26, Посылатель нахер (?), 12:46, 29/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Забавно смотреть как поступи ничего из себя не представляющие обитатели местного зоопарка хейтят платформу столь сильно оказывающую влияние на развитие индустриии. Уязвимость даже не в самой платформе а в пакете, пакетный менеджер работает аналогично всем остальным в других платформах. Но нет, побомбить то принято именно с ноды. В святом расте то такое уж точно недопустимо.
     
     
  • 2.39, Аноним (25), 13:44, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Уж больно есть что плохого в платформе.

    Да. Повлияла на индустрию. Но мир внутри мог бы быть лучше. Увы и ах.

     
     
  • 3.64, Аноним (-), 15:44, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Да. Повлияла на индустрию

    нет

     
     
  • 4.88, Твой батя (?), 21:36, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Одинэсника ответ
     
  • 3.89, Твой батя (?), 21:37, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    А мог быть и хуже. Назови любой язык и я его обосру. Толку то?
     
     
  • 4.101, Аноним (-), 16:35, 30/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    rust, фас !
     
  • 2.41, Аноним (41), 13:45, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    На всех (двух) нормальных языках в природе. Пакетный менеджер так не работает (да его и нет)
     
     
  • 3.90, Твой батя (?), 21:39, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Не пишешь эти два языка во избежание унижения?)
     

  • 1.28, mymedia (ok), 13:03, 29/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Исследователи лишь предполагают, что владельцы 87.0.0.1 (Telecom Italia) и 177.0.0.1 (Brasil Telecom) имеют возможность обойти ограничение доступа к 127.0.0.1.

    Не только эти два указанных реальных IP могут обойти проверку. Получается, любые адреса в данных подсетях размера /8, могут обращаться к локалхосту за node-netmask. Так 0177.0177.0177.0177 превратится в 127.127.127.127, а это как раз локальный хост.

     
     
  • 2.103, B (?), 19:24, 30/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    А на авторов либы гоните. Тут свою гений RUSTут!
     

  • 1.32, Аноним (32), 13:16, 29/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А если ещё с шестнадцатеричными поиграться...
     
  • 1.33, Аноним (15), 13:17, 29/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    В новом коде насчёт 16-ричных систем тоже баг https://github.com/rs/node-netmask/issues/37
    Так что ждём очередного обновления
     
     
  • 2.53, Онаним (?), 14:24, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Муахах блдажд.
    Называется - footmade code.
     

  • 1.36, Аноним (36), 13:29, 29/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Других программистов на ноде у нас нет.
     
     
  • 2.54, Онаним (?), 14:25, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    И не надо.
     
  • 2.87, Аноним (87), 21:30, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Либу писали кофескриптисты, не надо их примешать к нодистам.
     
     
  • 3.96, Noname (??), 13:24, 30/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Сорта
     
     
  • 4.100, Аноним (87), 16:23, 30/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    руби
     

  • 1.38, onanim (?), 13:35, 29/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >  В приложении при оценке правил доступа не будет определена тождественность с "127.0.0.1" и ресурс будет загружен с "0177.0.0.1" (фактически с 127.0.0.1), несмотря на запрет обращения к адресам loopback-интерфейса.

    это проблема не в node, а вообще во всех языках.
    проверка if ($IP != "127.0.0.1") выдаст true для строки вида "0177.0.0.1", но по факту подключение-то будет к 127.0.0.1, а не к 177.0.0.1.

     
     
  • 2.46, Аноним (46), 13:58, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > проверка if ($IP != "127.0.0.1") выдаст true

    и для строки вида "127.0.00.1". Сравнивать строковые представления ip адресов — проблема явно не в языках.

     
  • 2.47, onanim (?), 13:59, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    ... так что проверять юзерский инпут нужно не только на неравность строке "127.0.0.1", но и что это вообще является IP адресом, а не неведомой бинарной фигнёй с кавычками и спецсимволами.
     
     
  • 3.73, пох. (?), 17:08, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    А чо не так-то в моем юзерском инпуте ? Как по мне - норм же ж ip-адрес?!
    linups:~> 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.036 ms
    64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.064 ms
    ^C
    --- 0x7f.0.0.1 ping statistics ---
    Всегда ж так пингую

    Вот додуматься сравнивать их как СТРОКИ - это действительно какие-то уникальные грибы у этих ребят уродились. Не надо таких жрать, а то так и останешься поехавшим.

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

    Помнити npm leftpad!

     

  • 1.40, Аноним (41), 13:44, 29/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Скажу крамольную, на данном сайте вещь. Но даже сам великий и ужасный Раст не помог бы защититься от такой уязвимости.
     
     
  • 2.43, Аноним (36), 13:50, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Писатели на расте никогда бы не написали код, который строится на допущении, что IP-адрес - это десятичные числа, разделенные точками.

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

     
     
  • 3.68, Аноним (68), 16:47, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Стандарт допускает восьмеричные числа в айпи-адресе.
     
  • 3.77, Аноним (77), 18:34, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    println!("{:?}", "0177.0.0.1".parse::<Ipv4Addr>());

    Ok(177.0.0.1)

     
  • 3.86, Аноним (92), 20:02, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    0177.0.0.1 даже стандартная регулирочка из всех книжек по программированию не пропустит. Никто не ожидает что в адресе будут какие то  восьмиричные числа.
    Кроме анонимных опеннет экспертов, конечно.
     
  • 2.44, 1 (??), 13:51, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    не вижу в этом уязвимости.
    Просто нормальное поведение преобразования адреса.

    А кто там себе напридумывал, что локалхост это "^127" пусть обламаются.

     
  • 2.59, Анонимъ (?), 15:09, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    От кривых рук спасает только ампутация. Да и вообще, с чего вы взяли, что Rust что-то там кому-то обещает? Единственная заслуга Rust - это возможность делать некоторые проверки на этапе компиляции.

    А так: https://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_loopb

     
     
  • 3.69, Аноним (68), 16:48, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это фракталята тут постоянно вещают. Сами не знают о чем.
     
  • 2.84, Аноним (92), 19:54, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Точно? У rust есть поддержка up адресов в стандартной библиотеке. Вроде бы. У java точно есть. У питона даже маски есть. А у js нет ничего
     
     
  • 3.85, Аноним (92), 19:55, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ip адресов
     
  • 3.94, пох. (?), 10:02, 30/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Дык, вот такая поддержка у них и есть:  "Проблеме подвержена стандартная библиотека std::net::Ipv4Addr языка Rust"

    Ну с чего бы хрустерам уметь думать в голову. Они ж туда едят!

     

  • 1.48, Аноним (15), 14:01, 29/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    В защиту JS могу сказать, что багованный код написан был НЕ на JavaScript.
     
  • 1.55, Аноним (55), 14:32, 29/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    "Уязвимость = NPM-пакет".

    Предлагаю всем заучить эту формулу.

     
  • 1.56, Аноним (56), 14:50, 29/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Если бы это была уязвимость, то обновление вышло бы как 1.0.7.
    А это явно фича, и пакет теперь 2.0.0.
     
     
  • 2.58, gogo (?), 14:57, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Точно. Чтобы у те, кто хочет оставить себе этот баг в системе, могли не апдейтить зависимость на версию 2.х
     
     
  • 3.70, Аноним (68), 16:51, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Так может у них код приложения именно так и написан чтобы эта либа принимала восьмеричные значения. Чтобы ничего не ломать надо повышать версию.
     

  • 1.67, Аноним (67), 16:36, 29/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    С годоми уровень программеров очень упал.
     
     
  • 2.71, Аноним (68), 16:51, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Больше кода больше багов. Не надо грязи.
     
     
  • 3.81, Аноним (-), 19:28, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Базовая, либсишная функция со времен появления айпи. Откуда его вдруг за пол века стало больше ?
     

  • 1.78, Аноним (78), 19:00, 29/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    ребят, а как же говорили что Линукс, ГНУ, Опенсурс - это надежно, нет бакдоров, суперсекюрити, потому что тысячи глаз смотрят код, он открытый, это гарантирует, что он в тысячу раз лучшее и надежнее, чем закрытый Уиндоус. Как же так? Неужели врали все эти десятки лет??!
     
     
  • 2.91, Аноним (91), 23:52, 29/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Тысячи глаз и нашли. Обновись просто. В npm выводит предупреждения, если есть vulnerable
     
  • 2.99, Аноним (-), 15:05, 30/03/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > ребят, а как же говорили что Линукс, ГНУ, Опенсурс - это надежно, нет бакдоров, суперсекюрити, потому что тысячи глаз смотрят код,

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

     

  • 1.79, Аноним (92), 19:21, 29/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кучу валидаторов писала и не знала об этом.
     
     
  • 2.98, Noname (??), 13:53, 30/03/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Так задача ж была валидатор писать, а не знать.

    Чё не так- то?

     

  • 1.82, Аноним (82), 19:30, 29/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Это даже уязвимостью назвать нельзя.

    Библиотека явно предполагает на входе IP-адрес в десятичном формате, и не заявляет, что занимается валидацией. Не провалидировал - сам себе буратино. Типичный gargabe in - garbage out.

     
     
  • 2.93, пох. (?), 09:42, 30/03/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Библиотека явно предполагает на входе IP-адрес в десятичном формате,

    и плевать что ее единственная задача - преобразование форматов.
    Ну оок.

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

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

    И продолжим сравнивать ip адреса как строки.

     

  • 1.95, PnD (??), 11:43, 30/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Что-то мне никак не хватает воображения представить эксплоит.
    Типовая задача "прикрыть что-то ACL" предполагает что какие надо CIDR пишет администратор системы. Да хоть "0x7F000000/8", если его библиотека такое переваривает (и коллеги не поколотят).

    С другой стороны, адрес прилетевшего v4-пакета прописан 32 битами без знака. И ничего там не нахимичишь. Если только "сетевой" порядок с "обычным" перепутать. Но такие ляпы уже́ много лет как покрыты тестами.

    Что остаётся? Системы, в которых пользователю разрешено что-то заслать на адрес. E.g. looking-glass. Но там адрес можно вколотить любой "by design" и это не дыра.

    Или какие-то наркоманы конвертят uint32 в oct-строку и потом её сравнивают? Тогда "огласите весь список, пожалуйста".

     
  • 1.97, Чолхан (ok), 13:49, 30/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    где-то в глубине используемых шелловых сценариев для таких случаев применяется sipcalc - он не дает себя обмануть:

                Address must be given in the "standard" dotted quad format, ie.: xxx.xxx.xxx.xxx with an optional netmask that can be given in three different ways:
                   - CIDR, ex. /n where n >= 0 <= 32.
                   - Dotted quad, ex. xxx.xxx.xxx.xxx.
                   - A hex value, ex 0xnnnnnnnn or nnnnnnnn.


      
    sipcalc 0177.0.0.1
    -[int-ipv4 : 0177.0.0.1] - 0

    -[ERR : Unable to retrieve interface information]

    -

    -------
    sipcalc 127.0.0.1
    -[ipv4 : 127.0.0.1] - 0

    [CIDR]
    Host address            - 127.0.0.1
    Host address (decimal)  - 2130706433
    Host address (hex)      - 7F000001
    Network address         - 127.0.0.1
    Network mask            - 255.255.255.255
    Network mask (bits)     - 32
    Network mask (hex)      - FFFFFFFF
    Broadcast address       - 127.0.0.1
    Cisco wildcard          - 0.0.0.0
    Addresses in network    - 1
    Network range           - 127.0.0.1 - 127.0.0.1

    -

     
  • 1.104, Chupaka (ok), 11:25, 31/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > Например, атакующий может запросить ресурс, указав значение "0177.0.0.1", которое в десятичном представлении соответствует "127.0.0.1"

    А, напомните, почему атакующий не может просто запросить ресурс, указав значение "127.0.0.1", раз уж ему дали разрешение указывать значения?..

     
  • 1.106, Аноним (106), 21:29, 03/04/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    «в 270 тысячах проектОВ»
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:
    При перепечатке указание ссылки на opennet.ru обязательно



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2021 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру