Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
>
V5337. OWASP. Possible NoSQL...
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V5337. OWASP. Possible NoSQL injection. Potentially tainted data is used to create query.

25 Ноя 2025

Анализатор обнаружил использование непроверенных данных из внешнего источника для формирования запроса к 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 как критические и относятся к типу: Ошибки непроверенного использования чувствительных данных (ввода пользователя, файлов, сети и пр.).

Данная диагностика классифицируется как: