🇰🇷 한글 설명
Python 3.6.3 이하의 webbrowser.py에서 BROWSER 환경 변수로 지정된 프로그램 실행 시 URL 문자열을 검증하지 않아 인자 주입 공격이 가능합니다. 다만 subprocess.Popen의 기본 shell=False 설정으로 인해 실제 악용은 불가능합니다.
💡 쉬운 설명
Python이 사용자가 지정한 브라우저를 열 때 악의적인 명령을 몰래 전달할 수 있는 버그가 있었습니다. 하지만 안전한 방식으로 프로그램을 실행하도록 설계되어 실제 공격은 성공하지 못합니다.
🇺🇸 원문 (English)
Lib/webbrowser.py in Python through 3.6.3 does not validate strings before launching the program specified by the BROWSER environment variable, which might allow remote attackers to conduct argument-injection attacks via a crafted URL. NOTE: a software maintainer indicates that exploitation is impossible because the code relies on subprocess.Popen and the default shell=False setting
📍 영향받는 시스템
Python 3.6.3 이하
⚔️ 공격 벡터
조작된 URL을 통한 argument injection으로 BROWSER 환경 변수 지정 프로그램에 악의적 인자 전달
🛡️ 대응 방법
Python을 3.6.4 이상으로 업그레이드
🔧 검증 코드
Python 버전이 3.6.4 이상 또는 3.7 이상이면 grep이 match하여 문제없음을 의미합니다. 3.6.3 이하면 match하지 않아 업그레이드 필요를 의미합니다.
python3 -c "import sys; print(f'Python {sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}')" | grep -E '^Python [3-9]\.|^Python 3\.([7-9]|6\.[4-9])'