[하루한줄] CVE-2023-5372: Zyxel NAS의 Blind Python Code Injection으로 인한 Post-Auth RCE

URL

https://bugprove.com/knowledge-hub/cve-2023-5372-post-auth-blind-python-code-injection-vulnerabilities-in-zyxel-s-nas-326-and-nas-542-devices/

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)을 추가로 악용할 수 있습니다.