
XStream SSRF CVE-2021-21349
취약점
CVE-2021-21349: XStream으로 언마샬링하면 서버 측 위조 요청(Server-Side Forgery Request)이 활성화되어 인트라넷 또는 로컬 호스트의 리소스를 참조하는 임의의 URL의 데이터 스트림에 접근할 수 있습니다.
영향을 받는 버전
기본 제공 버전을 사용하는 경우 1.4.15를 포함한 모든 버전이 영향을 받습니다. 최소 필수 유형으로 제한된 화이트리스트로 XStream의 보안 프레임워크를 설정하라는 권장 사항을 따른 사용자는 영향을 받지 않습니다.
설명
언마샬링 시 처리된 스트림에는 이전에 작성된 객체를 재생성하기 위한 유형 정보가 포함되어 있습니다. XStream은 따라서 이러한 유형 정보를 기반으로 새 인스턴스를 생성합니다. 공격자는 처리된 입력 스트림을 조작하여 객체를 교체하거나 주입할 수 있으며, 그 결과 서버 측 위조 요청이 발생합니다.

$ docker build -t cve-2021-21349 .
$ python -m http.server 8080
$ docker run -it --rm cve-2021-21349
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 -
pom.xml을 아래와 같이 변경
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.16</version>
</dependency>
NoTypePermission.NONE 추가
import com.thoughtworks.xstream.security.NoTypePermission; // Add
XStream xstream = new XStream();
xstream.addPermission(NoTypePermission.NONE); // Add
xstream.fromXML(xml);