[하루한줄] CVE-2023-5372: Zyxel NAS의 Blind Python Code Injection으로 인한 Post-Auth RCE
URL
Target
- Zyxel NAS < V5.21(AAZF.16)C0
- Zyxel NAS < V5.21(ABAG.13)C0
Explain
2023년 11월, Zyxel사의 NAS 펌웨어에서 발견된 Python Code Injection 취약점의 세부 정보가 공개되었습니다.
취약점은 Zyxel NAS 펌웨어의 Web Management Interface 중 서비스 및 패키지 관리 메커니즘 구현을 위한appzone_main_model.py
Python 모듈 함수 manipulate_services()
, manipulate_services_dependency()
및 manipulate_packages()
에 존재합니다.
def manipulate_services(service_list):
#...
for s_item in service_list:
if app_mapper.has_key(s_item.s_name):
s_instance = app_mapper[s_item.s_name]
eval('s_instance.%s(*%s)' % (s_item.s_action, s_item.s_args))
else:
#...
if package_list:
s_instance = app_mapper['Package']
eval('s_instance.%s("%s")' % (package_action, string.join(package_list, '|')))
return
취약한 함수들 중 manipulate_services()
함수는 인증된 사용자가 /cmd,/ck6fup6/appzone_main/manipulate_services
엔드포인트 경로로 접근할 수 있으며 appargs 매개변수를 통해 유저 입력을 포함한 Python 코드를 eval을 통해 실행합니다. 이 때 입력 값에 대한 검증이 부족해 os.system 등 임의의 Python 메소드를 호출할 수 있습니다.
취약점을 트리거하는 ")!=os.system("sleep 5
를 포함한 페이로드는 아래와 같습니다.
[HOST]/cmd,/ck6fup6/appzone_main/manipulate_services?appargs=")!=os.system("sleep 5
인증된 해커(Post-Auth)는 해당 취약점을 악용해 root 권한으로 동작하는 WSGI 컨텍스트에서 원격 코드 실행 트리거가 가능하고, 인증 권한을 얻기 위해 Zyxel NAS Authentication Bypass 취약점(CVE-2023-4473)을 추가로 악용할 수 있습니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.