
교육용 FastAPI 랩으로, 취약한 서버, 패치된 코드, 인코딩된 페이로드 예제를 포함하여 CVE-2021-41773 디렉터리 트래버설 및 로컬 파일 포함(LFI) 취약점을 시연하며, 로컬 보안 교육용으로 활용할 수 있습니다.
파일 시스템 경계를 검증하기 전에 사용자 입력을 디코딩하면 디렉터리 트래버설 및 로컬 파일 포함(LFI)으로 이어질 수 있음을 보여주는 작고 독립적인 FastAPI 랩입니다. Apache HTTP Server의 CVE-2021-41773 문제를 모델로 삼았습니다.
%2e) 및 이중 인코딩(%252e) 우회를 시연curl로 테스트할 수 있는 빠른 페이로드 포함uvicorn으로 로컬 실행런타임 종속성 설치:
pip install fastapi uvicorn
python -m venv venv
.\venv\Scripts\activate
pip install fastapi uvicorn
uvicorn vulnerable_app:app --port 8011
브라우저에서 http://127.0.0.1:8011/을(를) 여세요. 루트 엔드포인트에 일반적인 페이로드와 참고 사항이 표시됩니다.
수정 사항을 확인하려면 취약한 서버를 중지하고 패치된 서버를 실행하세요:
uvicorn patched_app:app --port 8011
curl --path-as-is http://localhost:8011/icons/test.txt
curl --path-as-is "http://localhost:8011/icons/.%2e/secret.txt"
curl --path-as-is "http://localhost:8011/icons/.%252e/secret.txt"
취약한 서버에서는 이러한 페이로드가 secret.txt를 반환할 수 있습니다. 패치된 서버에서는 거부되어야 합니다(HTTP 403).
os.path.realpath()로 정규 파일 시스템 경로를 확인합니다.webroot 디렉터리 안에 있어야 하며, 그렇지 않으면 거부합니다.이 방식은 디코드 → 정규화 → 승인 순서를 강제합니다.
이 저장소는 로컬 교육용으로만 사용하세요. 취약한 서버를 공용 네트워크에 노출하지 마십시오.
MIT License
Kunal Khandelwal — 보안 연구원, 애플리케이션 보안