역직렬화 관련 취약점 분석

pickling = serialize = 직렬화

unpickling = deserialize = 역직렬화

 

python에서 직렬화를 진행하는 모듈이 바로 'pickle'이다. 그 중 4개의 기능이 존재한다.

1. dump / dumps 
2. load / loads

이렇게 보면 글로는 잘 이해가 되지 않아서 python코드로 확인해보자.

이렇게 확인해보면 test 라는 문자열을 byte stream 으로 전환을 하는 것을 확인할 수 있다. 

 

해당 기능을 확인했으니, 어떻게 취약점이 동작하는지 확인해보자.

pickle 모듈 내에 존재하는 __reduce__() 메소드가 취약하다.

 

__reduce__()  : 객체 계층 구조를 역직렬화할 때 객체를 재구성하는 것에 대해 tuple을 반환해주는 기능

역직렬화 (byte stream > text) 할 때, 기존 object의 인스턴스를 만든 후 해당 인스턴스를 올바른 데이터로 채운다.
여기서! object의 인스턴스에 특정 데이터만 포함해야 한다.

하지만, byte stream에는 역직렬화를 하기 위한 명령 피연산자와 함께 기존 객체 구조를 재구성하는 명령들이 포함될 수 있다. <<<<<<<< 이 곳에서 RCE 가능

좀 더 이해하기 쉽게 코드로 확인해보자.

eval 함수를 사용하기 때문에 input() 이 동작한다.

os 모듈을 사용해서 RCE 시도가 가능하다.

 

참고

https://rootable.tistory.com/entry/python-deserialize-vulnerability-in-pickle-module

 

'WEB' 카테고리의 다른 글

CVE-2021-44228(log4j 취약점) 취약점 실습  (0) 2023.10.25
burp proxy 설정 관련  (0) 2023.10.23
오토 스케일링(Auto Scaling)과 클러스터링(Clustering)  (0) 2023.08.30
CSTI XSS  (0) 2023.08.26
API 이해  (0) 2023.07.06

+ Recent posts