草庐IT

Apache Zookeeper 未授权访问漏洞【原理扫描】

格格巫 MMQ!! 2023-06-30 原文

漏洞名称 Apache Zookeeper 未授权访问漏洞【原理扫描】
风险等级 高
高可利用 否
CVE编号 -
端口(服务) 2181(zookeeper)
风险描述 ZooKeeper是一个高性能的分布式数据一致性解决方案,它将复杂的,容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并提供一系列简单易用的接口给客户使用。ZooKeeper默认开启在2181端口,在未进行任何访问控制情况下,攻击者可通过执行envi命令获得系统大量的敏感信息,包括系统名称、Java环境。
风险影响 攻击者可通过执行envi命令获得系统大量的敏感信息,包括系统名称、Java环境。
解决方案 1、禁止把Zookeeper直接暴露在公网。2、添加访问控制,根据情况选择对应方式(认证用户,用户名密码)。3、绑定指定IP访问。
协议类型 tcp

处理方法:
方法一:防火墙授权访问
描述:

zookeeper在默认情况下,是允许任意客户端未经授权访问,存在很大的安全隐患。

解决方法:

通过iptables对zookeeper的访问控制权限。

此问题开发暂未有解决方法,可临时采用iptables 限制2181端口(重启后即失效),除了本身业务访问外,全限制访问,或通过zookeeper自带的acl进行限制。

iptables临时限制方法
1.封2181端口:

iptables -I INPUT -p tcp --dport 2181 -j DROP
2.指定服务器IP 开启2181访问:

Centos6.x、Centos7.x:

iptables -I INPUT -s 10.88.2.208 -p tcp --dport 2181 -j ACCEPT
iptables -I INPUT -s 10.88.2.209 -p tcp --dport 2181 -j ACCEPT
3.进行保存

Centos6.x:

service iptables save

Centos7.x:

iptables-save
4.重启 防火墙

Centos 6.x:

service iptables restart
Centos 7.x:

service firewalld restart

注:Centos 7也可以通过自带的firewalld进行限制,方式如下:

firewall-cmd --permanent --add-rich-rule=“rule family=“ipv4” source address=“0.0.0.0/0” port protocol=“tcp” port=“6379” drop”

firewall-cmd --permanent --add-rich-rule=“rule family=“ipv4” source address=“192.168.1.1/24” port protocol=“tcp” port=“6379” accept”

方法二:启用zookeeper自带的授权访问
1.在 $ZOOKEEPER_HOME/bin/下运行(windows环境运行 %ZOOKEEPER_HOME%\bin\zkCli.cmd,进入zkCli之后的操作与linux下相同)

./zkCli.sh -server 127.0.0.1

2.登录进zookeeper 命令行, 执行 ls /

[zk: 127.0.0.1(CONNECTED) 24] ls /
[new, new2, zookeeper, zk_test]
[zk: 127.0.0.1(CONNECTED) 25]
3.可以看到有 [new, new2, zookeeper, zk_test]四个节点,对根节点和这四个节点添加acl:

[zk: 127.0.0.1(CONNECTED) 25] setAcl / ip:127.0.0.1:cdwar,ip:192.168.240.140:cdwar
cZxid = 0x0ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x2d
cversion = 2
dataVersion = 0
aclVersion = 5
ephemeralOwner = 0x0
dataLength = 0
numChildren = 4
4.有其它服务器需要访问此zookeeper,以 ip:192.168.240.140:cdwar 的格式增加在 setAcl命令最后,以 , 分隔。其它节点增加acl方式也是同样的:

[zk: 127.0.0.1(CONNECTED) 26] setAcl /new ip:127.0.0.1:cdwar,ip:192.168.240.140:cdwar
cZxid = 0x26
ctime = Tue Nov 17 10:44:37 CST 2020mZxid = 0x26
mtime = Tue Nov 17 10:44:37 CST 2020
pZxid = 0x26
cversion = 0
dataVersion = 0
aclVersion = 2
ephemeralOwner = 0x0
dataLength = 18
numChildren = 0
5.增加后,通过getAcl命令查看是否成功:

[zk: 127.0.0.1(CONNECTED) 27] getAcl /
'ip,'127.0.0.
: cdrwa
'ip,'192.168.240.140
: cdrwa
[zk: 127.0.0.1(CONNECTED) 28] getAcl /new
'ip,'127.0.0.1
: cdrwa
'ip,'192.168.240.140
: cdrwa
[zk: 127.0.0.1(CONNECTED) 29] getAcl /new2
'ip,'127.0.0.1
: cdrwa

有关Apache Zookeeper 未授权访问漏洞【原理扫描】的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  3. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  4. Tomcat AJP 文件包含漏洞(CVE-2020-1938) - 2

    目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控

  5. ruby - 有没有办法从 ruby​​ case 语句中访问表达式? - 2

    我想从then子句中访问c​​ase语句表达式,即food="cheese"casefoodwhen"dip"then"carrotsticks"when"cheese"then"#{expr}crackers"else"mayo"end在这种情况下,expr是食物的当前值(value)。在这种情况下,我知道,我可以简单地访问变量food,但是在某些情况下,该值可能无法再访问(array.shift等)。除了将expr移出到局部变量然后访问它之外,是否有直接访问caseexpr值的方法?罗亚附注我知道这个具体示例很简单,只是一个示例场景。 最佳答案

  6. ruby - 从外部访问类的实例变量 - 2

    我理解(我认为)Ruby中类变量和类的实例变量之间的区别。我想知道如何从该类外部访问该类的实例变量。从内部(即在类方法中而不是实例方法中),它可以直接访问,但是从外部,有没有办法做MyClass.class.[@$#]variablename?我没有任何具体原因要这样做,只是学习Ruby并想知道是否可行。 最佳答案 classMyClass@my_class_instance_var="foo"class上述yield:>>foo我相信Arkku演示了如何从类外部访问类变量(@@),而不是类实例变量(@)。我从这篇文章中提取了上述内

  7. ruby-on-rails - 使用 HTTP.get_response 检索 Facebook 访问 token 时出现 Rails EOF 错误 - 2

    我试图在我的网站上实现使用Facebook登录功能,但在尝试从Facebook取回访问token时遇到障碍。这是我的代码:ifparams[:error_reason]=="user_denied"thenflash[:error]="TologinwithFacebook,youmustclick'Allow'toletthesiteaccessyourinformation"redirect_to:loginelsifparams[:code]thentoken_uri=URI.parse("https://graph.facebook.com/oauth/access_token

  8. ruby - 使用 Class.new 时访问外部范围 - 2

    是否有可能以某种方式访问​​Class.new范围内的a?a=5Class.new{defb;aend}.new.b#NameError:undefinedlocalvariableormethod`a'for#:0x007fa8b15e9af0>#:in`b' 最佳答案 即使@MarekLipka的回答是正确的——改变变量范围总是有风险的。这是可行的,因为每个block都带有创建它的上下文,因此您的局部变量a突然变得不那么局部了——它变成了一个“隐藏的”全局变量:a=5object=Class.new{define_method(

  9. ruby - 使用访问器方法即时创建对象 - 2

    使用散列定义的访问器方法动态创建对象的最简单方法是什么?例如,如果我有一个散列:{foo:"Foo",bar:"Bar"}我想要一个具有访问器方法foo、foo=、bar和bar=的对象,其初始值分别为"Foo"和"Bar"。我可以想到这样做:moduleObjectWithAccessordefself.newh;Struct.new(*h.keys).new(*h.values)endendo=ObjectWithAccessor.new(foo:"Foo",bar:"Bar")o.foo#=>"Foo"但是,我不需要它们的多个实例具有相同的特定键集,而是希望每次都使用可能不同的键

  10. ruby - 404 未找到,但可以从网络浏览器正常访问 - 2

    我在这方面尝试了很多URL,在我遇到这个特定的之前,它们似乎都很好:require'rubygems'require'nokogiri'require'open-uri'doc=Nokogiri::HTML(open("http://www.moxyst.com/fashion/men-clothing/underwear.html"))putsdoc这是结果:/Users/macbookair/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/open-uri.rb:353:in`open_http':404NotFound(OpenURI::HT

随机推荐