
luigi는 배치 작업의 복잡한 파이프라인을 구축하는 데 도움을 주는 패키지입니다. 이 패키지는 의존성 해결, 워크플로 관리, 시각화, 오류 처리, 명령줄 통합 등을 처리합니다.
이 패키지의 영향을 받는 버전은 _extract_packages_archive 함수의 잘못된 대상 파일 경로 검증으로 인해 아카이브 추출(Zip Slip)을 통한 임의 파일 쓰기(Arbitrary File Write)에 취약합니다.
이 취약점은 경로 탐색(path traversal) 파일명을 포함하는 특수하게 제작된 zip 아카이브를 통해 악용됩니다. 악용될 경우, 악성 아카이브의 파일명이 대상 추출 디렉터리에 연결되어 최종 경로가 대상 폴더 밖에 위치하게 됩니다. 예를 들어, zip 파일에 ../../file.exe 위치의 파일이 포함되어 대상 폴더를 벗어날 수 있습니다. 실행 파일이나 구성 파일이 악성 코드를 포함하는 파일로 덮어써지면, 이 문제는 쉽게 임의 코드 실행(arbitrary code execution) 문제로 이어질 수 있습니다.
다음은 정상 파일 하나와 악성 파일 하나가 있는 zip 아카이브의 예입니다. 악성 파일을 추출하면 대상 폴더를 벗어나 /root/.ssh/에 도달하여 authorized_keys 파일을 덮어쓰게 됩니다.
+2018-04-15 22:04:29 ..... 19 19 good.txt
+2018-04-15 22:04:42 ..... 20 20 ../../../../../../root/.ssh/authorized_keys
악성 packages.tar 생성
python3 xpl.py
이를 luigi/contrib/lsf_runner.py의 인자로 전달하십시오.
/tmp/fodac를 확인하세요 :)
https://security.snyk.io/vuln/SNYK-PYTHON-LUIGI-7830489
https://github.com/spotify/luigi/commit/b5d1b965ead7d9f777a3216369b5baf23ec08999
https://github.com/spotify/luigi/issues/3301