Development record
termsafe's mask (internal/termsafe/termsafe.go, isZeroWidth and the bidi set) leaves several invisible rune classes unmasked: the Unicode tag characters U+E0000 to U+E007F, the interlinear annotation marks U+FFF9 to U+FFFB, U+180E (Mongolian vowel separator) and U+034F (combining grapheme joiner). They render invisibly, so text carrying them passes Sanitize (and every Sanitize-equality check built on it) unchanged and can hide content on a terminal or in a transcript; tag characters can also carry hidden instructions to an agent reading the output. Pre-existing across every Sanitize caller. Found by the security reviewer of fix/sec-build-next-series.
termsafe's mask (internal/termsafe/termsafe.go, isZeroWidth and the bidi set) leaves several invisible rune classes unmasked: the Unicode tag characters U+E0000 to U+E007F, the interlinear annotation marks U+FFF9 to U+FFFB, U+180E (Mongolian vowel separator) and U+034F (combining grapheme joiner). They render invisibly, so text carrying them passes Sanitize (and every Sanitize-equality check built on it) unchanged and can hide content on a terminal or in a transcript; tag characters can also carry hidden instructions to an agent reading the output. Pre-existing across every Sanitize caller. Found by the security reviewer of fix/sec-build-next-series.
Security scope (abcd-fixes-what-it-adds): the route exists only through abcd's own masking helper and the surfaces that rely on it, so abcd fixes it; widening the mask changes nothing about how a repository works.
Frontmatter
| id | iss-2610121602237516 |
|---|---|
| type | issue |
| lifecycle | resolved |
| severity | minor |
.abcd/work/issues/resolved/iss-2610121602237516-termsafe-s-mask-internal-termsafe.md
open on GitHub ↗ · commit history ↗