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 (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 для непроверенных входов.
Как защититься от ORM-инъекция?
Защита от ORM-инъекция обычно сочетает технические меры и операционные практики, как описано в определении выше.
Какие есть другие названия ORM-инъекция?
Распространённые альтернативные названия: HQL-инъекция, JPQL-инъекция.
● Связанные термины
- attacks№ 1084
SQL-инъекция
Атака внедрения кода, которая встраивает управляемый злоумышленником SQL в запрос к базе данных, позволяя читать, изменять или уничтожать данные.
- attacks№ 743
NoSQL-инъекция
Инъекционная атака, которая манипулирует операторами, JSON или языком запросов NoSQL-БД, чтобы обойти логику приложения или извлечь данные.
- attacks№ 1106
Злоупотребление хранимыми процедурами
Эксплуатация привилегированных или небезопасных хранимых процедур для выполнения произвольного SQL, команд ОС или эскалации привилегий из БД.
- vulnerabilities№ 653
Массовое присваивание (Mass Assignment)
Уязвимость, при которой приложение слепо привязывает поля запроса от клиента к внутренним свойствам объекта, позволяя задавать те, что не должны контролироваться.
- appsec№ 538
Валидация ввода
Серверная проверка того, что каждый недоверенный ввод соответствует ожидаемому типу, длине, диапазону, формату и набору значений до его обработки приложением.