Здравствуйте, Sinclair, Вы писали:
BE>>Подробнее: https://www.securitylab.ru/analytics/534471.php
S>Как и в прошлом случае, публикуется масса малоинтересных подробностей (вроде фрагментов стека), и обходятся главные вопросы:
S>1. Для чего вообще используется интерполятор строк?
Допустим в интернет-магазине продавцы могут задавать шаблон письма покупателям. "Здравствуйте, ${username}! Спасибо за покупку ${order}".
S>2. В каких сценариях может потребоваться применение небезопасных string-лукапов в интерполяции?
Ну например, какие-нибудь внутренние конфиги хочешь шаблонизировать в том числе и env значениями или даже кусочками скриптов.
S>3. Зачем кому-то в голову приходит скармливать в интерполятор пользовательский ввод?
Там где пользователи могут задавать какие-нибудь шаблоны чего-нибудь.
S>4. Как правильно пользоваться интерполяцией для сценариев, в которых нужна комбинация пунктов 1, 2 и 3?
Требовать задавать явно что и как может интерполироваться.
S>Если же нас интересует сохранение функциональности приложения, то надо понять, как же делать интерполяцию без риска исполнить произвольный код под привилегиями приложения или открыть иную дыру в неведомые измерения.
Проблема text4shell в том, что либа втихушку добавляла возможности интерполяции чего угодно, в том числе и кусков кода.
Программист ожидал, что будет работать только ${username}, а оказывается можно и запихать ${script:<code>}.