역직렬화 관련 취약점 분석
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 |