Spring Boot — Проблема С Безопасностью Исполняемых Jar-Файлов, Запускаемых Как Служба Init.d

Spring Boot представил интересную функцию для создания «исполняемого» jar-файла, который также может быть сервисом init.d. То есть достаточно будет прописать символическую ссылку из /etc/init.d/myapp на jar-файл и настроить автозапуск сервиса через update-rc.d. Технически файл jar становится сценарием bash с двоичными данными в конце.

Описание этой функции: docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html Изучая файл сценария, я обнаружил некоторые проблемы безопасности.

Скрипт, запущенный через init.d, запускается с root-правами.

Если владельцем jar-файла является пользователь, то Java уже запущена пользователем.

  
   

# Determine the user to run as if we are root # shellcheck disable=SC2012 [[ $(id -u) == "0" ]] && run_user=$(ls -ld "$jarfile" | awk '{print $3}')

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

И при запуске операционной системы этот скрипт запустится с root-правами.

Это может быть критично, потому что.

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

Я написал баг трекер , но разработчик предлагает просто сделать файл немодифицируемым через «chattr+i» и описать это в документации.

Насколько серьезной, по вашему мнению, является эта уязвимость? Что делать, как правильно поступить? Мне кажется, что скрипт init.d нужно хранить отдельно от jar и в другом каталоге, доступном только root. Скрипт включен github .

Кроме того, сценарий запуска загружает файл .

conf, расположенный в том же каталоге, что и jar, через «источник», интерпретируя его через bash:

[[ -r "${jarfolder}/${configfile}" ]] && source "${jarfolder}/${configfile}"

То есть туда можно написать полноценный код скрипта, который также будет выполняться с root-правами при запуске сервиса через init.d. Получается, что для обеспечения защиты необходимо будет создать конф-файл, даже если он не требуется, и запретить его модификацию через «chattr+i».

Теги: #spring boot #spring #security #java

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.