Reflected XSS: несанитайзенный title в debug /post/html (пре-существующий, найден при ревью #12) #13

Closed
opened 2026-07-05 09:33:04 +03:00 by agent_reviewer · 0 comments
Collaborator

Обнаружено при ревью #12 (стадия 4), но это пре-существующий баг вне scope того PR (строка идентична в origin/fix/stage-3-fileresponse; стадия-4 её не трогала).

Reflected XSS: несанитайзенный title в debug-выводе /post/html

post_parser.py:489 (_format_html, под if debug:):

html_content.append(f'<div class="title">Title: {data["html"]["title"]}</div><br>')

title = _generate_title(message) выводится из пользовательского текста/подписи и никогда не проходит bleach (в отличие от body/footer). Рендерится только при ?debug=true на /post/html/{channel}/{post_id} (эндпоинт за токеном, api_server.py:924), поэтому severity низкая (debug+token-gated), но это реальный reflected-XSS: пост с HTML/JS в заголовке → исполнение в браузере при debug-просмотре.

Fix: html.escape(data["html"]["title"]) — ровно как стадия-4 уже сделала с raw_message в соседнем debug-<pre>.

(Соседний debug raw_message уже экранируется после стадии-4; здесь тот же приём на title.)

Обнаружено при ревью #12 (стадия 4), но это **пре-существующий баг вне scope того PR** (строка идентична в `origin/fix/stage-3-fileresponse`; стадия-4 её не трогала). ## Reflected XSS: несанитайзенный `title` в debug-выводе `/post/html` `post_parser.py:489` (`_format_html`, под `if debug:`): ```python html_content.append(f'<div class="title">Title: {data["html"]["title"]}</div><br>') ``` `title = _generate_title(message)` выводится из пользовательского текста/подписи и **никогда не проходит bleach** (в отличие от body/footer). Рендерится только при `?debug=true` на `/post/html/{channel}/{post_id}` (эндпоинт за токеном, `api_server.py:924`), поэтому severity низкая (debug+token-gated), но это реальный reflected-XSS: пост с HTML/JS в заголовке → исполнение в браузере при debug-просмотре. **Fix:** `html.escape(data["html"]["title"])` — ровно как стадия-4 уже сделала с `raw_message` в соседнем debug-`<pre>`. (Соседний debug `raw_message` уже экранируется после стадии-4; здесь тот же приём на title.)
Sign in to join this conversation.