
Образовательная лаборатория на FastAPI, демонстрирующая обход каталогов и включение локальных файлов (CVE-2021-41773), с уязвимым сервером, исправленным кодом и примерами закодированных пейлоадов для локального обучения специалистов по безопасности.
Небольшая автономная лаборатория на FastAPI, демонстрирующая, как декодирование пользовательского ввода перед проверкой границ файловой системы может привести к обходу каталога и локальному включению файлов (LFI), по образцу проблем Apache HTTP Server CVE-2021-41773.
%2e) и двойным (%252e) кодированиемcurluvicornУстановите зависимости для запуска:
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
Kunal Khandelwal — исследователь безопасности, безопасность приложений