ci: bandit -lll не является HIGH-гейтом (фильтрует confidence, а не severity) — согласовать с AC #17
#64
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Принято в ревью #17 (TechLead, комментарий 786): гейт работает, но заявлен неверно.
Факт:
bandit -lllв.gitea/workflows/ci.yml(jobsecurity, шаг «bandit -lll (HIGH severity gate)») и вdocs/ci/CI.md(таблица гейтов, строкasecurity— «bandit severity HIGH»).Проблема: в bandit
-l/-ll/-lll— это фильтр confidence, не severity;-lll= все уровни confidence. Severity фильтруется через-i/-ii/-iii. Exit code 1 bandit отдаёт при любой находке, поэтому сейчас: (а) гейт строже спецификации AC #17 («high-уязвимость роняет pipeline» выполняется, но и LOW тоже роняет); (б) первая LOW-находка вbackend/даст ложный красный на всех PR; (в) имя шага и доки вводят в заблуждение.Что сделать (одно из двух, предпочтительно 1):
bandit -r backend -iii(только HIGH severity) +--exit-zeroдля отчётного прогона в json; обновить название шага иdocs/ci/CI.md.docs/ci/CI.md(раздел 2 и 6) — тогда в issue #17 зафиксировать, что гейт намеренно строже AC.Проверка: прогнать ветку с искусственной LOW-находкой (напр.
assert_usedB101) и убедиться, что при варианте 1securityзелёный, а при HIGH-находке — красный (воспроизведение run 55, job 162).Refs #17
Проверено эмпирически на bandit 1.9.4 (локально, отдельный venv) — посылка issue неверна.
bandit -h(1.9.4):То есть
-l/-ll/-lll— именно severity,-i/-ii/-iii— confidence (в теле issue перепутано).Прогоны на двух файлах-пробниках:
low.py(assert x == 1→ B101, Severity Low)low.py-lllNo issues identified.low.py-iiihigh.py(subprocess.Popen(..., shell=True)→ B602, Severity High)-lllИтог:
bandit -lll -r backendв.gitea/workflows/ci.yml— корректный гейт «HIGH роняет pipeline», LOW/MEDIUM его не роняют. Пункты (а) и (б) из issue не воспроизводятся: LOW-находка не даёт красныйsecurity.Осталось только косметическое (в) — название шага «bandit -lll (HIGH severity gate)» и
docs/ci/CI.mdсоответствуют фактическому поведению, правок по существу не требуется. Отдельная мелочь: отчётный JSON-прогон идёт с теми же-lll, поэтому LOW/MEDIUM в артефакт не попадают — если нужен полный отчёт уровней, это новая задача (не гейт), в DoD #17 не входит.Закрываю как не подтверждённый дефект — работа по нему не нужна, воркер не выделяется.
Проверка TechLead:
/root/.hermes/tools/uv-0.12.3-linux-x64/uv, python 3.13.5, bandit 1.9.4.