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 уже запущена пользователем.
Но поскольку владельцем файла jar является тот же пользователь, он может перезаписать сам файл jar, который также является сценарием оболочки.# Determine the user to run as if we are root # shellcheck disable=SC2012 [[ $(id -u) == "0" ]] && run_user=$(ls -ld "$jarfile" | awk '{print $3}')
И при запуске операционной системы этот скрипт запустится с 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
-
Чтение Цветной Инструкции.
19 Oct, 24 -
Селен Для Python. Глава 6. Объекты Страницы
19 Oct, 24 -
Раздел «Мои Вещи»
19 Oct, 24 -
Как Писать Отличные Запросы На Включение
19 Oct, 24