[Security] Санитизировать вывод исключений Redmine в CLI #55

Closed
opened 2026-07-12 21:18:12 +07:00 by artem.kokos · 0 comments
Owner

Проблема

В redmine_reporter/cli.py:79 при ошибке от Redmine в stderr печатается raw exception:

except Exception as e:
    print(f"Ошибка при получении данных из Redmine: {e}", file=sys.stderr)

Если python-redmine или requests в сообщении исключения раскрывают URL с встроенным ключом (https://red.eltex.loc/issues.json?key=SECRET) или другие чувствительные данные, они попадут в логи/терминал.

Пример сценария утечки

  1. Пользователь запускает redmine-reporter.
  2. Redmine возвращает ошибку сети, в теле которой присутствует полный URL с key=....
  3. Содержимое {e} выводится в stderr и может быть скопировано в баг-репорт или лог CI.

Рекомендации

  1. Печатать только тип исключения и краткое сообщение без стектрейса:

    print(f"Ошибка при получении данных из Redmine: {type(e).__name__}: {e}", file=sys.stderr)
    

    (уже лучше, но всё ещё рискует содержать URL с ключом).

  2. Предпочтительно: перехватывать известные исключения redminelib/requests отдельно и выводить безопасные, заранее подготовленные сообщения. Полный стектрейс выводить только при --verbose.

  3. Добавить тест, проверяющий, что при ошибке в выводе не присутствует значение REDMINE_API_KEY.

Связанные места

  • redmine_reporter/cli.py:79
## Проблема В `redmine_reporter/cli.py:79` при ошибке от Redmine в `stderr` печатается raw exception: ```python except Exception as e: print(f"Ошибка при получении данных из Redmine: {e}", file=sys.stderr) ``` Если `python-redmine` или `requests` в сообщении исключения раскрывают URL с встроенным ключом (`https://red.eltex.loc/issues.json?key=SECRET`) или другие чувствительные данные, они попадут в логи/терминал. ## Пример сценария утечки 1. Пользователь запускает `redmine-reporter`. 2. Redmine возвращает ошибку сети, в теле которой присутствует полный URL с `key=...`. 3. Содержимое `{e}` выводится в stderr и может быть скопировано в баг-репорт или лог CI. ## Рекомендации 1. Печатать только тип исключения и краткое сообщение без стектрейса: ```python print(f"Ошибка при получении данных из Redmine: {type(e).__name__}: {e}", file=sys.stderr) ``` (уже лучше, но всё ещё рискует содержать URL с ключом). 2. **Предпочтительно:** перехватывать известные исключения `redminelib`/`requests` отдельно и выводить безопасные, заранее подготовленные сообщения. Полный стектрейс выводить только при `--verbose`. 3. Добавить тест, проверяющий, что при ошибке в выводе не присутствует значение `REDMINE_API_KEY`. ## Связанные места - `redmine_reporter/cli.py:79`
artem.kokos added the securitycli labels 2026-07-12 21:18:12 +07:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: artem.kokos/redmine-reporter#55