Začleněno 3. 10. 2026  Oprava přesunutá do sdílené knihovny Pimalaya

Himalaya: ochrana před terminal injection a BiDi spoofingem v Rust tabulkách e-mailů

BudgetScan odhalil, že Himalaya, populární CLI e-mailový klient napsaný v Rustu, vypisoval neošetřená metadata zpráv — předměty, jména odesílatelů, názvy příloh a ID — přímo do tabulek terminálu. Útočník mohl v e-mailu podstrčit ANSI escape sekvence (jako neoprávněný zápis do systémové schránky přes OSC 52, mazání obrazovky a přepisování řádků) nebo Unicode BiDi override znaky k maskování přípon spustitelných souborů. Správce projektu Clément Douin (soywod) problém potvrdil, naši sanitizační logiku vyčlenil do centrální knihovny pimalaya-cli, uvedl Martina Vlacha jako spoluautora a zpřístupnil ji i sesterským CLI nástrojům cardamum a calendula, které sdílejí stejné tabulky.

Co bylo špatně

Když uživatel vypisuje seznam zpráv (himalaya envelope list) nebo prohlíží přílohy, formátuje Himalaya tato metadata do přehledných terminálových tabulek. Protože tato data pocházejí z nedůvěryhodných vnějších zdrojů — odesílatel e-mailu má plnou kontrolu nad předmětem, jménem odesílatele i názvy souborů — jejich přímý výpis bez ošetření do emulátoru terminálu představuje vážná bezpečnostní rizika:

Řídicí tok vykreslování tabulek v Himalaya Příchozí metadata e-mailů procházejí formátovačem tabulek. Dříve šly surové řídicí znaky přímo na terminál. Nyní funkce pimalaya_cli::table::sanitize nahrazuje řídicí znaky (čímž znefunkční escape sekvence) i BiDi znaky znakem U+FFFD. Nedůvěryhodná metadata e-mailupředmět, odesílatel, název přílohy, schránka Jednořádkový formátovač tabulekIMAP, JMAP, Gmail, Graph, pimdir pimalaya_cli::table::sanitizeC0/C1, DEL a BiDi → U+FFFD Bezpečný výstup do terminálučistý text bez rizika injection Emulátor terminálu uživateleschránka i zobrazení jsou chráněny dříve: surové escape sekvence
Průchod zpracováním tabulek. Před opravou putoval surový řetězec přímo na výstup terminálu (červená čára). Nyní jednořádková pole sanitizuje sdílená knihovna Pimalaya.
Ilustrace: Výstup tabulky Himalaya se scénářem zneužití a sanitizovanou opravou, sdílená knihovna pimalaya-cli 0.2.6 a zhodnocení správce Clémenta Douina.
Ukázka terminal injection a systémového řešení. Demonstrace zneužití OSC 52 a BiDi spoofingu, centrální sanitizace v pimalaya-cli 0.2.6 a zhodnocení správce Clémenta Douina.

Jak to bylo opraveno

Odeslali jsme pull request #771 s návrhem sanitizační funkce a automatickými testy. Správce projektu Clément Douin (soywod) rozpoznal, že příbuzné nástroje z rodiny Pimalaya (cardamum pro kontakty a calendula pro kalendář) sdílejí stejnou logiku vykreslování tabulek:

„Thanks for the report and the clear write-up, the problem is real. Since cardamum and calendula share the same tables, I moved the function into pimalaya-cli and credited you as co-author. It's released in 0.2.6 as pimalaya_cli::table::sanitize. It's your printable(), with one addition: it also replaces bidi controls (U+202A–202E, U+2066–2069). Without that, a filename like invoice\u{202e}fdp.exe displays as invoiceexe.pdf.“

V návaznosti na doporučení správce jsme v PR dokončili implementaci:

Správce Clément Douin změny ověřil a 3. října 2026 pull request začlenil do větve master:

„Thanks, all good. The Windows-1252 side effect is fine for now; we'll revisit if it turns out to bite. Merging.“

Související pozdější práce v Himalaya

Po naší opravě poslal přispěvatel SORALNV do Himalaya dva další zodolňující patche. Jde o samostatnou práci, která na PR #771 neodkazuje, ale pokrývá sousední oblast. Clément Douin začlenil oba:

Časová osa

Jak to číst

Automatizované skenování zachytilo subtilní mezeru v sanitizaci vstupů pro terminál a díky otevřené spolupráci se zkušeným správcem vznikla sdílená funkce pro celou rodinu nástrojů Pimalaya. Přesně takhle vypadá open-source bezpečnost v nejlepší formě: automatizovaná detekce přináší jasné podněty, po nichž následuje pečlivá lidská revize, důkladné testy a systémové zodolnění. Velké poděkování patří Clémentu Douinovi za příkladné vedení projektu a rychlou reakci.

Zdroje

← Zpět na příběhy úspěchu