POC详情: b07195528312217bdab8c83e4b651761c0eaa0bf

来源
关联漏洞
标题: XStream 代码问题漏洞 (CVE-2021-21349)
描述:XStream是XStream(Xstream)团队的一个轻量级的、简单易用的开源Java类库,它主要用于将对象序列化成XML(JSON)或反序列化为对象。 XStream 1.4.16 之前版本存在代码问题漏洞,该漏洞源于WEB应用未充分验证请求是否来自可信用户。攻击者可利用该漏洞通过受影响客户端向服务器发送非预期的请求。
描述
XStream SSRF CVE-2021-21349
介绍
# CVE-2021-21349 XStream SSRF

## XStream Official Announcement

[CVE-2021-21349](https://x-stream.github.io/CVE-2021-21349.html)

**Vulnerability**

CVE-2021-21349: A Server-Side Forgery Request can be activated unmarshalling with XStream to access data streams from an arbitrary URL referencing a resource in an intranet or the local host.

**Affected Versions**

All versions until and including version 1.4.15 are affected, if using the version out of the box. No user is affected, who followed the recommendation to setup XStream's security framework with a whitelist limited to the minimal required types.

**Description**

The processed stream at unmarshalling time contains type information to recreate the formerly written objects. XStream creates therefore new instances based on these type information. An attacker can manipulate the processed input stream and replace or inject objects, that result in a server-side forgery request.

## Docker Demo

![cve-2021-21349](https://user-images.githubusercontent.com/56715563/117110850-b6acbf80-adc1-11eb-9e4b-80e9389290c1.gif)

## Set Up XStream Environment & PoC Execution

1. Build an image from a Dockerfile (Set Up)

```
$ docker build -t cve-2021-21349 .
```

2. Run Http Server

```
$ python -m http.server 8080
```

3. Run java -jar xstream in a new container (PoC Execution)

```
$ docker run -it --rm cve-2021-21349
```

## Output

```
Serving HTTP on :: port 8080 (http://[::]:8080/) ...
::ffff:127.0.0.1 - - [05/May/2021 16:35:39] "GET /internal.txt HTTP/1.1" 200 -
```

## Solution

- Update xstream version to 1.4.16 or higher

Change pom.xml to bellow

```
        <dependency>
            <groupId>com.thoughtworks.xstream</groupId>
            <artifactId>xstream</artifactId>
            <version>1.4.16</version>
        </dependency>
```

- Use XStream's security framework

Add NoTypePermission.NONE

```
import com.thoughtworks.xstream.security.NoTypePermission; // Add

XStream xstream = new XStream();
xstream.addPermission(NoTypePermission.NONE); // Add
xstream.fromXML(xml);
```
文件快照

[4.0K] /data/pocs/b07195528312217bdab8c83e4b651761c0eaa0bf ├── [ 131] Dockerfile ├── [ 13] internal.txt ├── [1.6K] pom.xml ├── [2.0K] README.md └── [4.0K] src └── [4.0K] main └── [4.0K] java └── [3.3K] main.java 3 directories, 5 files
神龙机器人已为您缓存
备注
    1. 建议优先通过来源进行访问。
    2. 如果因为来源失效或无法访问,请发送邮箱到 f.jinxu#gmail.com 索取本地快照(把 # 换成 @)。
    3. 神龙已为您对POC代码进行快照,为了长期维护,请考虑为本地POC付费,感谢您的支持。