ORM-инъекция
Что такое ORM-инъекция?
ORM-инъекцияИнъекция в приложениях с ORM: эксплуатация динамических запросов, массового присваивания и «лазеек» в сыром SQL для манипуляций с данными.
ORM-инъекция возникает, когда подконтрольный атакующему ввод попадает в ORM (Hibernate, Entity Framework, SQLAlchemy, ActiveRecord, Sequelize, Prisma, Django ORM) через API, динамически собирающие запросы. Уязвимые шаблоны: конкатенация HQL/JPQL, where(string) c интерполяцией в ActiveRecord, Op.literal в Sequelize, форматированный text() в SQLAlchemy, массовое присваивание непредусмотренных полей, небезопасные параметры сортировки и фильтрации из JSON-API. Последствия — от классического SQL-инъекции до обхода авторизации и эскалации привилегий, если проверки выполняются в слое ORM. Защита: параметризованные построители запросов, строгие allow-list для сортируемых/фильтруемых полей, явные strong parameters и отказ от сырого SQL для непроверенных входов.
● Примеры
- 01
Rails-приложение вызывает User.where("name = '#{params[:q]}'"), открывая SQL-инъекцию через ORM.
- 02
Эндпоинт Sequelize принимает контролируемый атакующим параметр order, который передаётся через Op.literal.
● Частые вопросы
Что такое ORM-инъекция?
Инъекция в приложениях с ORM: эксплуатация динамических запросов, массового присваивания и «лазеек» в сыром SQL для манипуляций с данными. Относится к категории Атаки и угрозы в кибербезопасности.
Что означает ORM-инъекция?
Инъекция в приложениях с ORM: эксплуатация динамических запросов, массового присваивания и «лазеек» в сыром SQL для манипуляций с данными.
Как защититься от ORM-инъекция?
Защита от ORM-инъекция обычно сочетает технические меры и операционные практики, как описано в определении выше.
Какие есть другие названия ORM-инъекция?
Распространённые альтернативные названия: HQL-инъекция, JPQL-инъекция.