В развиваемом проектом Kubernetes ingress-контроллере ingress-nginx выявлены четыре уязвимости, позволяющие добиться выполнения своего кода на серверах облачных систем, использующих платформу Kubernete, и получить полный привилегированный доступ к кластеру Kubernete. Проблемам присвоен критический уровень опасности (9.8 из 10). Выявившие проблемы исследователи присвоили уязвимостям кодовое имя IngressNightmare и отметили, что уязвимости затрагивают около 43% облачных окружений. Уязвимости устранены в версиях ingress-nginx 1.11.5 и 1.12.1...Подробнее: https://www.opennet.me/opennews/art.shtml?num=62946
кто-то использует софт без сертификата фстек?
https://www.kommersant.ru/doc/7498300
это фичи
А где там про сертификаты?
Там вроде как раз про то что их нет
В настоящее время в системе сертификации ФСТЭК России сертифицированы по требованиям безопасности информации
следующие версии операционной системы Windows XP:
[...]Необходимо отметить, что прекращение выпуска обновлений сертифицированных версий операционной системы Windows XP в
сочетании с͟ в͟е͟р͟о͟я͟т͟н͟ы͟м͟ о͟б͟н͟а͟р͟у͟ж͟е͟н͟и͟е͟м͟ в͟ н͟и͟х͟ н͟о͟в͟ы͟х͟ у͟я͟з͟в͟и͟м͟о͟с͟т͟е͟й приведет к возможности реализации угроз безопасности
информации конфиденциального характера, обрабатываемой в указанных информационных системах. Кроме того, прогнозируется
повышение интереса к операционной системе Windows XP со стороны отдельных категорий нарушителей.
Как это вообще поможет? (Спойлер: Никак)
Сертификат и правда был смешным ещё пару лет назад.Но теперь я с удивлением узнал что там вполне грамотные ребята которые требуют чтобы всякие фазинги реально делали и они даже способны отличить по выхлопу что реально рабочее от того что сделано для виду.
В общем такими темпами серт реально станет знаком качества.
даже способны отличить по выхлопусорт шила?
> Но теперь я с удивлением узнал что там вполне грамотные ребята которые
> требуют чтобы всякие фазинги реально делали и они даже способны отличить
> по выхлопу что реально рабочее от того что сделано для виду.Спасибо за инфу. Принято к сведению.
Такими темпами в головах образуется мантра "не обнаружено наличие == доказано отсуствие".
Просто пробежаться опытным взглядом по процессу удаления временного файла. Стоп. Почему не удаляется дескриптор?
> Просто пробежаться опытным взглядом по процессу удаления временного файла. Стоп. Почему
> не удаляется дескриптор?потому что нужен.
Местные эксперты не знают даже о типовой последовательности open/mkstemp & unlink и почему делается именно так?
> потому что нужен.Самый экспертный ответ из всех экспертных.
> Как это вообще поможет? (Спойлер: Никак)Зато у тебя будет не просто вулн - а сертифицированный.
ещё как поможет - ответственность переложена :-)
Дело не в том, есть сертификат или его нет, а в том, что у курьера его нет и никогда не будет
кубера*
Так ФСТЭК сертификаты часто выдают российским форкам открытых зарубежных аналогов, апстримы которых уже на несколько лет ушли вперед по версиям. Уже только этот факт означает, что в этих продуктах полно уязвимостей.К тому же эти российские крахоборы, закрывают исходный код, ведут разработку продукта закрыто и продают его по конским ценам. А даже если им платят за "поддержку" их поддержка мало в чём разбирается, чтобы помоч с проблемой.
> апстримы которых уже на несколько лет ушли вперед по версиям. Уже только этот факт означает, что в этих продуктах полно уязвимостей.Не означает вообще ни разу.
Потому что и патчи можно бэкпортировать и вообще многое переписать нормально.У вас когнитивное искажение которое проявляется в том, что форки всегда отстают от того что считается официальным апстримом.
Это далеко не так.
Я форкнул sshfs пару лет назад и прилично его причесал внутри, отрефакторил. Апстрим ничего такого и близко не сделал, и изменения я им не засылал потому что мне не впёрлось тратить время на это.А ФСТЭК сейчас реально дрючит, по настоящему и за проверки анализаторами и чтобы фаззинг по настоящему делали и всякое остальное.
Многим апстримам такое нафик не впёрлось и они это не делают сами.
> Потому что и патчи можно бэкпортировать и вообще многое переписать нормально.на расте тоже можно проги с нуля писать, но этого почему-то никто не делает
> Потому что и патчи можно бэкпортировать и вообще многое переписать нормально.Фантазер. А про переписать нормально - фантазер в кубе.
> Я форкнул sshfs пару лет назад и прилично его причесал внутри, отрефакторил.Круто. Можно пожалуйста ссылку?
Тоже интересно, постою в очереди
https://github.com/rozhuk-im/sshfs - полагаю, это тот форк.
все у кого есть мозг. если мозга нет то можно с сертификатом фстек
готовьтесь тогда к извращениям :-)
Вот это дырень! Особенно если учитывать, что под капотом многих cloud-решений тот же кубер c nginx-ингресом, только "сбоку брэндовый шильдик", кажется там не 43%. Даже если с него нельзя будет провалиться внутрь всего кластера, всётаки ингрес считается "серым" ресурсом, и его пускают только туда куда можно, но у многих на нём http2, quic и тому подобные https даунгрейдится в http1.1 вобщем будем посмотреть чем это всё закончится.
под капотом облачных сред обычно KVM, а внутри виртуалки будет сидеть кубер и называться это будет чем-то вроде AKS и cluster management, хотя эта виртуализированная шляпа никогда не станет кластером, обычная оркестрация притом как мы видим дырявая, но это и логично, больше компонентов - больше векторов атаки
Бегаешь из треда в тред со своим уникальным определением смысла слова «кластер». Как, помогает? Всех уже переучил говорить на свой лад?
учи терминологию
записывай
редиска - плохой человек
облако - кластер:)
A computer cluster is a set of computers that work together so that they can be viewed as a single system.Твой кубер без внешнего балансировщика даже две ноды объеденить не может, выкинь на помойку это тормознутое поделие.
> при обработке больших запросов nginx сохраняет тело запроса
> во временном файле, который сразу удаляется, но в файловой
> системе "/proc" для этого файла остаётся открытый файловый
> дескриптор.Haha. Classic.
Как не умели в RAII так и не умеют.
А где вы тут отсутствие RAII увидели ?
Resource Acquisition Is Initialization or RAII, is a C++ programming technique which binds the life cycle of a resource that must be acquired before use (allocated heap memory, thread of execution, open socket, open file, locked mutex, disk space, database connection—anything that exists in limited supply) to the lifetime of an object.C точки зрения терминологии он вообщем-то прав. Другое дело, что его коментарий бесполезный. Гримасничает в чате и всё...
Так там дескриптор не закрывается пока используется временный файл, т.е. пока этот самый дескриптор нужен.
А после использования штатно закрывается.
Полное соответствие RAII, если его сюда приклеить.А проблема в том, что любой открытый дескриптор виден в /proc/{PID|self}, даже если сам файл уже удалён.
Т.е. проблема к RAII никакого отношения не имеет.Скорее это похоже на дыры в Java/C# из-за интроспекции "с бантиками".
я в код не вникал, но аноним вроде как намекает на то, что "т.е. пока этот самый дескриптор нужен. " не является правдой, и он не нужен все это время, если это так, то его доводы верны
Научи нас, о великий гуру RAII, озари нас своей мудростью
> Научи нас, о великий гуру RAII, озари нас своей мудростьюну ладно, ладно, так и быть
ВНЕМЛИТЕ!
Когда файл вам уже не нужен - закройте файловый дескриптор!
> ВНЕМЛИТЕ!
> Когда файл вам уже не нужен - закройте файловый дескриптор!А если он вам понадобится через секунду - умрите от того, что чьё-то кривое поделие сожрало все доступные дескрипторы, ок, ты в медицинском на патологоанатома учился?
> умрите от того, что чьё-то кривое поделие сожрало все доступные дескрипторыНу конечно альтернатива в виде "атакующий может получить доступ к хранимым внутри pod-окружения параметрам, достаточным для управления всем кластером." намного лучше!
>> умрите от того, что чьё-то кривое поделие сожрало все доступные дескрипторы
> Ну конечно альтернатива в виде "атакующий может получить доступ к хранимым внутри
> pod-окружения параметрам, достаточным для управления всем кластером." намного лучше!Ингрес - это просто реверс прокси всего кластера, вряд-ли там можно получить доступ ко всему кластеру, а вот устроить MitM - можно во все поля, и приватный ключ от сертификата угнать.
> Ингрес — это просто реверс прокси всего кластера, вряд-ли там можно получить доступ ко всему кластеру, а вот устроить MitM - можно во все поля, и приватный ключ от сертификата угнать.Реверс прокси — это Nginx (часть Ingress-контроллера), а вот Ingress-контроллер имеет чуть больше прав на кластер, в том числе доступ ко всем секретам, хранимым в кластере, а это включает в себя ещё и различные токены для для доступа к кластеру, среди которых могут оказаться с ещё большими правами, так что вполне можно запросто получить управление над всем кластером (на дальше насколько фантазии хватит).
> а вот Ingress-контролле имеет чуть больше прав на кластер, в том числе доступ ко
> всем секретамС какого перепугу? Это просто шлюз, который после себя видит тольколь api gateway, какое-нибудь s3-образное хранилище, и коллекторы логов, метрик, трейсов, всё.
>> а вот Ingress-контролле имеет чуть больше прав на кластер, в том числе доступ ко всем секретам
> С какого перепугу?А с такого, что ингресс-контроллеру нужен доступ ко всем объектам kind-ов Ingress и Secret, чтобы формировать nginx-у конфиг и подсовывать в него сертификаты.
>> Когда файл вам уже не нужен - закройте файловый дескриптор!
> А если он вам понадобится через секунду - ......значит он вам не был "не нужен", и закрывать его не следовало.
Файл нуженю Учитесь читать.
тут не про RAII
это делается чтобы файл не отсвечивал на диске, в т.ч. после падения
одно я не пойму - нах...я из дикого интернета надо принимать какие-то там детали конфигурации да еще и "проверять" автоматически? (что, что тут может пойти не так?!)Это модный-современный-девляпс подход, инфраструктурка Ass in cocococode, конфигурация сервера сегодня передается вместе с формочкой, да?
А виноват-то во всем конечно же nginx.
Никто и не принимает из интернета. Но обычно в компаниях несколько групп разработчиков, в том числе и удаленных. Ты же каждому отдельным кластер не выделяешь?!
> Никто и не принимает из интернета.а где у нас еще бывает ingres? Ну ок, что-то сугубовнутрикорпоративное, вместо интернета в сетку на десять тыщ сотрудников половины которой никто никогда кроме как на экране не видел (да и кто на тот экран смотрел-то) - чем лучше?
> Но обычно в компаниях несколько групп разработчиков, в том числе и удаленных. Ты же
> каждому отдельным кластер не выделяешь?!вообще-то именно что каждому проекту выделяем. Потому что multi-tenant в кубере... э... такоэ себе.
Да и их битвы за ресурс пусть протекают под другим ковром, а не в нашей стойке.
>несколько групп разработчиковИм всем надо иметь доступ на сервер с актуальными данными?
Или они заранее написали дебаг версию инструментария под себя и выкатили в продакшан?
> Им всем надо иметь доступ на сервер с актуальными данными?у нас конь. Тиниус дизинтегрейшн. У них доступа на сервер в принципе-то нет, а вот у ихнего my ass code - есть, а больше, как видишь, ничего и не надо было.
Отдельно занимательно уточнить - многие ли могут себе позволить ДВА кластера для одного и того же прожекта, на одном разработчики а на другом...э... тоже разработчики но с "актуальными данными" - а не перемешаны в одном и том же и тестовые поды и прод.
> Никто и не принимает из интернетаВ исследовании таки говорится про 6500 кластеров, где admission выставлен в public internet. Тоже не понял, кто и зачем его выставляет, по умолчанию он не публикуется, конечно
и как им пользоваться тогда, неопубликованным?
> Ass in cocococodeсудя по всему, это хинди, т.е. вы правы
Ну, во-первых, дефолты у них сделаны так, "чтоб точно заработало", а не "чтоб заработало сколько-нибудь безопасно", а во-вторых, оно и не в дефолтах-то...
Один заказчик потребовал "по old-school'у" разнести "менеджмент", "мониторинг", "аццесс" и "кластерный интероп" на разные интерфейсы - иииии, это оказался чуть-чуть, самую капельку, малость избыточный перебор секаса, чтобы повторять его по собственной инициативе без ножа-к-горлу.
> критический уровень опасности (9.8 из 10).А что не 10 из 10? Клоуны
10 из 10 это когда заэксплойтить сможет кто угодно и пароль админки прям на главной странице
А на чём написан Ingress NGINX Controller for Kubernetes ?Go
87.6%
Lua
7.5%
Shell
2.8%Не на С.
Значит все врут. Го свят и защищает от всего.
Но и не на Rust. Вот и думайте.
> А на чём написан Ingress NGINX Controller for Kubernetes ?
> Go
> 87.6%
> <...>
> Не на С.С учётом того, что весь куб написан на Go, было бы странно видеть здесь C
> Для проверки использования уязвимого ingress-nginx можно выполнить команду:
> kubectl get pods --all-namespaces --selector app.kubernetes.io/name=ingress-nginxЧё, реально покажет "уязвимый" контроллер? Хоть бы селектор по версии сделали...
Так уязвимость и оставят. Чтобы сохранить совместимость)
>> Для проверки использования уязвимого ingress-nginx можно выполнить команду:
>> kubectl get pods --all-namespaces --selector app.kubernetes.io/name=ingress-nginx
> Чё, реально покажет "уязвимый" контроллер? Хоть бы селектор по версии сделали...конечно покажет (и не один). Зачем тебе селектор, если они - все уязвимые? ;-)
Тут намекают что надо на какой-нибудь caddy перелезать - типа, нет конфига, вот и нет дыры в его тестировании ;-)
Вообще концепция ингрессов в кубере уже объявлена устаревшей. Вместо неё GatewayAPI теперь.
> Вообще концепция ингрессов в кубере уже объявлена устаревшей. Вместо неё GatewayAPI теперь.теперь будем перед ним еще один nginx держать?
> Чё, реально покажет "уязвимый" контроллер? Хоть бы селектор по версии сделали...Селектор умеет что-то кроме равенства сравнивать? А там уязвимо всё что ниже самого свежего.
умеет еще сравнивать неравенство - т.е. можешь проверять на несовпадение с еще дымящимся.
А диапазоны, вайлдкарды или там больше-меньше - не, не умеет, для девляперов-на-игого слишком сложно такое парсить.
Вот это вкуснятину завезли, ещё и эксплуатируется легко, можно легко повторить в лабе и можно в путь!
А вот я чуял неладное и всегда просил девопсов брать официальный nginx-овский kubernetes-ingress, хоть он и менее фичастый. Уж слишком там стремные костыли на lua-модуле.Не зря
> общедоступные уязвимые контроллеры с открытым для внешних запросов обработчиком AdmissionДыра уровня дефолтной монги на 0.0.0.0 без пароля с большего. Вот откуда эти уязвимых 6500 кластеров взялись — вопрос куда более интересный. Не со StackOverflow накопипастили же?
Алсо, сабж в проде — махровое эникейство. Сойдёт только для совсем уж непритязательных локалхостов.
> Не со StackOverflow накопипастили же?То есть как это - не?
А откуда по-твоему мы копипастить-то должны?! Ну то есть напрямую со стека теперь только неудачники и ретрограды, конечно, нормальные пацаны спрашивают чатгопоту, но у той источник вдохновения ровно тот же самый.
> Алсо, сабж в проде — махровое эникейство. Сойдёт только для совсем уж непритязательных
> локалхостов.6500 локалхостов. И еще наверное в десять раз больше таких у которых такой же ингрес но до admission они стековерфлов не дочитали, и он не включен.
что там? опять кто-то в трёх ямлах заблудился?
Я правильно понимаю, что бы адмишен контроллеру чёт скормить нужно доступ в кластер с ролью create/edit для ингресс?
Нет, если есть публичный доступ к порту (по дефолту открыт для всех), то позволяет выполнять проверки без аутентификации.
не, не нужно - мы ж чиста проверить синтаксис забежали, а не на самом деле создавать такой конфиг
Как по мне это именно бага в nginx.
В документации написано:
-t — test the configuration file: nginx checks the configuration for correct syntax, and then tries to open files referred in the configuration.Т.е. проверка на синтаксис и попытка открытия файлов. Не сказано, что КОД из этих файлов БУДЕТ ИСПОЛНЯТЬСЯ. Да и не должен он запускаться. На то он и тест.
Другой вопрос как полнее проверить настройки SSL не запуская код из библиотеки. Возможно никак.
Когда читал начало новости первым делом задумался - а не опасно ли в nginx передавать конфиг извне. Смотрю - это всего лишь для проверки синтаксиса. Ну думаю не опасно значит. Т.е. тут именно поведение nginx неожиданное.
Ну действительно. Еще не сказано что эти файлы, например, будут вообще читаться, удивительное рядом.Как ты собираешься проверять синтаксис конфига где половина полей вычисляемая и может определять другие части этого конфига - наукой не установлено.
nginx ни разу не был предназначен для поточного тестирования бредовых конфигураций из недоверенного источника, все вопросы к авторам нескучных кластеров на игого.
Тестирование предназначено ровно для одного - заранее узнать, запустится он с этим конфигом или у тебя ляжет сервер.
Кубернетис такой же скам как и профессия девопса. Вместо простых решений нагородили монстров с уязвимостями на дырявых го
Альтернатив как безболезнено сопровождать десятки окружений с десятками контейнеров в каждом, ты конечно предоставлять не будешь. Это ведь так просто, все все понимают.
Еще код надо писать на ассемблере или хотя бы на си и линковать статически. Правильно я тебя понял?
> как безболезнено сопровождать десятки окружений с десятками контейнеров в каждомдесятками сопровождающих, в чем проблема? - продолжайте жевать кактус
> в чем проблема?В том что жизнь коротка и глупо тратить её на рутину. Быть этим 1 из 10 перекладывальщиком руками.
А эксплоит есть у кого?
Ещё когда только появлялись всякие ansible-ы и chef-ы, сразу было понятно, что по аналогии с SQL injection и прочими XSS будут config injection. Просто потому что подставляются подстроки без какого-либо понимания синтаксиса файла конфигурации.По хорошему, надо описывать некоторым DSL синтаксис каждого конкретного формата конфигурации, и подставлять не строки, а токены в этом DSL. Тогда никаких \n не будет.
Но это, конечно, в бесконечность раз больше работы, чем просто засунуть простейший template engine типа handlebars. Для внутрянки - сойдёт, если отправил фигню - сам дурак. А когда это всё счастье внезапно начинает торчать наружу, получается вот такое веселье.
> По хорошему, надо описывать некоторым DSL синтаксис каждого конкретного формата конфигурации, и подставлять не строки, а токены в этом DSL.Пробовали и делали. Это кстати даёт не только преимущества в безопасности. Это ещё позволяет, например, делать графические интерфейсы автоматом, что весьма удобно. Однако поддержка описания конфига программы на этом DSL -- это очень и очень много работы, и особенно больно писать миграции DSL-конфига для нового формата конфига программы, для которого он создан.