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

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