🇰🇷 한글 설명
Mako 템플릿 라이브러리 1.3.11 이전 버전의 TemplateLookup.get_template()에서 슬래시 제거 로직의 불일치로 인해 경로 traversal 취약점이 발생합니다. //(예: //../../../secret.txt) 형태의 URI를 통해 프로세스가 읽을 수 있는 임의의 파일을 템플릿으로 반환받아 실행할 수 있습니다.
💡 쉬운 설명
Mako 템플릿 라이브러리가 특정 경로(//../../../secret.txt 같은 형태)를 제대로 검증하지 못해, 공격자가 서버의 모든 파일에 접근할 수 있게 되는 문제입니다. 신뢰할 수 없는 입력이 이 함수에 전달되면 비밀 파일을 읽고 실행할 수 있습니다.
🇺🇸 원문 (English)
Mako is a template library written in Python. Prior to 1.3.11, TemplateLookup.get_template() is vulnerable to path traversal when a URI starts with // (e.g., //../../../secret.txt). The root cause is an inconsistency between two slash-stripping implementations. Any file readable by the process can be returned as rendered template content when an application passes untrusted input directly to TemplateLookup.get_template(). This vulnerability is fixed in 1.3.11.
📍 영향받는 시스템
Mako 템플릿 라이브러리 버전 1.3.10 이하 (1.3.11부터 수정됨)
⚔️ 공격 벡터
사용자 입력을 TemplateLookup.get_template()에 직접 전달할 때, /로 시작하는 이중 슬래시와 상대 경로(..)를 조합하여 임의 파일 접근
🛡️ 대응 방법
Mako를 1.3.11 이상으로 업그레이드하기 (pip install --upgrade Mako)
🔧 검증 코드
1.3.11 이상의 버전이 출력되면 안전, 1.3.10 이하이거나 출력이 없으면 취약
python3 -c "import mako; print(mako.__version__)" 2>/dev/null | grep -E '^1\.(3\.(1[1-9]|[2-9][0-9])|[4-9])'