Спасибо, что помогаете держать Stepik-Python-Grader безопасным. Документ короткий и ссылочный — детали threat model живут в docs/configuration.md § Ограничения и безопасность.
Поддерживается только последний релиз (актуальный MINOR). Жёсткого номера
версии здесь нет намеренно: версия динамическая, из git-тегов
(setuptools-scm) — см.
CONTRIBUTING.md § Версионирование.
Обновитесь до последнего релиза перед тем, как сообщать об уязвимости.
Основной канал — GitHub Private Vulnerability Reporting (вкладка Security → Report a vulnerability в репозитории). Резервный канал — личное сообщение мейнтейнеру @ArtVsMark. Не открывайте публичный issue для уязвимостей.
In English: please report security issues via GitHub Private Vulnerability Reporting (Security → Report a vulnerability), or contact @ArtVsMark directly — do not open a public issue.
В скоупе — уязвимости, дающие реальный риск в локальном использовании:
- Веб-оболочка (
web.py,--serve): XSS в рендере stdout/stderr решения, выход за пределы localhost, path traversal при указании путей. - Секреты: утечка
secrets.json/ OAuth-токенов (в логи, отчёты, кэш). - Downloader: обработка недоверенного ZIP-архива с тестами, распаковка вне целевой папки (zip-slip), парсинг ответов Stepik.
- Утечка токена в артефакты (отчёты,
.grader_cache, вывод).
Исполнение локального недоверенного кода без OS-sandbox — это by design, а не уязвимость сама по себе. У грейдера нет изоляции ФС/сети (есть только таймаут и best-effort лимит памяти на POSIX); он предназначен для запуска доверенных решений (своих или скачанных из Stepik as-is). Сообщения вида «решение может выполнить произвольный код» не считаются уязвимостью — это документированное ограничение (см. ниже).
Запускайте только доверенный код. Полная threat model, настройки таймаута и лимитов памяти — docs/configuration.md § Ограничения и безопасность.
secrets.jsonиstepik_config.jsonне коммитятся (в.gitignore); используйтеsecrets.json.exampleкак шаблон.- Не вставляйте реальные токены в issue, PR, отчёты или логи.
- Настройка OAuth — docs/installation.md § Работа с API Stepik (OAuth).
Текущий --serve слушает только 127.0.0.1. Любой переход к серверному
исполнению (общий доступ, удалённый прогон решений) меняет threat model и
потребует настоящего проектирования sandbox — до этого недоверенный код в
серверном режиме запускать нельзя. Дизайн будущего server mode (Runner-слой,
API удалённого исполнения, обязательные требования sandbox — сеть off,
эфемерные tmp-каталоги, квоты) и решение по нему —
docs/server-mode.md и
ADR-0001.