V5337. OWASP. Possible NoSQL injection. Potentially tainted data is used to create query.
Анализатор обнаружил использование непроверенных данных из внешнего источника для формирования запроса к NoSQL базе данных. Это может стать причиной NoSQL-инъекции в случае, если данные скомпрометированы.
Уязвимости такого типа относятся к категории рисков OWASP Top 10 Application Security Risks 2021:
Рассмотрим пример:
public List<Document> getFoo(String bar) {
BasicDBObject query = new BasicDBObject();
query.put(
"$where",
"this.bar == \"" + bar + "\""
);
MongoCursor<Document> cursor = collection.find(query).iterator();
// ....
}
При формировании NoSQL-запроса в оператор $where передаются непроверенные данные, полученные из параметра публичного метода. Так как метод публичный, туда могут попасть непроверенные данные из внешних источников: контроллеров, форм и т. д. Оператор $where интерпретирует JavaScript код, указанный во втором аргументе метода put, что открывает злоумышленникам возможность внедрять произвольные команды в запрос.
Вместо ожидаемого поискового критерия злоумышленник может ввести специальную команду. Из базы произойдёт извлечение всех данных, для которых будет запущена дальнейшая обработка.
Пример такой скомпрометированной строки для параметра bar:
" || "1" != "2
Для защиты от подобных атак следует использовать параметризацию:
public List<Document> getFoo(String bar) {
BasicDBObject query = new BasicDBObject();
query.append("bar", bar);
MongoCursor<Document> cursor = collection.find(query).iterator();
// ....
}
Или сформировать запрос в формате BSON при помощи специального класса Filters:
public List<Document> getFoo(String bar) {
Bson filter = Filters.and(
Filters.eq("bar", bar)
);
MongoCursor<Document> cursor = collection.find(filter).iterator();
// ....
}
Если операции со скриптами не используются в вашем проекте, рекомендуется полностью отключить выполнение серверных скриптов. Более подробно атаки типа NoSQL и способы их проведения описаны на официальном сайте OWASP по ссылке.
Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки непроверенного использования чувствительных данных (ввода пользователя, файлов, сети и пр.). |
Данная диагностика классифицируется как:
|