Ошибка в проде. Альтернативная история SQL-инъекции в ML-проекте
🙈 Когда работаешь с ML-кодом, думаешь про модели, данные и метрики. А вот про безопасность — не всегда. И иногда это выливается в забавные (и не очень) истории. А вот как одна «безобидная» строчка SQL внезапно открывает дверь ко всем экспериментам и моделям проекта.
Мини-история
В OSS-трекере экспериментов добавили поиск по имени 💁. Быстро, «наколенке», через f-string — и поехали на прод. Дальше кто-то закинул в параметр имени "' OR '1'='1", и эндпоинт радостно вернул все записи. Классический SQLi.
def find_experiment(name: str):
# ⚠️ конкатенация параметра прямо в SQL
query = f"SELECT * FROM experiments WHERE name = '{name}'" #
🙈 Когда работаешь с ML-кодом, думаешь про модели, данные и метрики. А вот про безопасность — не всегда. И иногда это выливается в забавные (и не очень) истории. А вот как одна «безобидная» строчка SQL внезапно открывает дверь ко всем экспериментам и моделям проекта.
Мини-история
В OSS-трекере экспериментов добавили поиск по имени 💁. Быстро, «наколенке», через f-string — и поехали на прод. Дальше кто-то закинул в параметр имени "' OR '1'='1", и эндпоинт радостно вернул все записи. Классический SQLi.
def find_experiment(name: str):
# ⚠️ конкатенация параметра прямо в SQL
query = f"SELECT * FROM experiments WHERE name = '{name}'" #