id: ebaa1e1e-c386-49b4-92e2-8118a61f9175 title: Reserved index names can overwrite section indexes (releases/issues/pulls/wiki) state: closed labels:
- area:render assignees: [] milestone: null created: 2026-10-27T18:40:11.379047814Z updated: 2026-10-27T19:53:10.490515246Z
Problem
Generated index filenames are not reserved. A hostile .forge can overwrite the section index with a detail page:
- release
version: indexwritesreleases/index.html(the release list) after the index and replaces it with the release page; - issue
id: indexwritesissues/index.htmlafter the issues index; - PR
id: indexwritespulls/index.htmlafter the pulls index; - wiki file
index(no extension) writeswiki/index.htmlafter the wiki index.
All four are accepted by the current is_safe_segment/is_safe_id checks. Verified with fixtures; e.g. a release named index makes releases/index.html render <h1>Index release</h1> instead of the release table.
Impact
Hostile or accidental metadata silently destroys a section index, its navigation target, and the API/HTML consistency around it. No script injection, but a denial/correctness bug in the generated site.
Fix
Reserve generated names (index) for releases, issue/PR ids, and wiki pages, or write indexes last and reject collisions loudly. Add one fixture covering all four collisions.