🇰🇷 한글 설명
Tabby 터미널 에뮬레이터가 사용자 상호작용 없이 ZMODEM 프로토콜 감지를 자동 확인하여, 공격자가 제어하는 콘텐츠 표시 시 셸 명령 실행을 허용합니다. Git 저장소의 악의적 파일을 cat으로 보기만 해도 코드 실행이 가능합니다.
💡 쉬운 설명
터미널에서 파일을 보기만 해도 숨겨진 명령이 자동으로 실행될 수 있습니다. 공격자가 만든 파일이 있는 Git 저장소를 클론한 후 그 파일을 표시하면 악의적인 프로그램이 실행됩니다.
🇺🇸 원문 (English)
Tabby (formerly Terminus) is a highly configurable terminal emulator. Prior to 1.0.233, Tabby before 1.0.233 automatically confirms ZMODEM protocol detection on all terminal session output without user interaction, enabling shell command execution when a user displays attacker-controlled content. The ZModemMiddleware in tabby-terminal consumes all session output through a Zmodem.Sentry, and when a ZMODEM ZRQINIT header is detected, unconditionally calls detection.confirm() and writes a fixed ZRINIT response ( **\x18B0100000023be50\r\n\x11) back into the active PTY as input. When the process that triggered the detection (e.g., cat) exits, the injected bytes are consumed by the user's shell as a command line. Under fish (default configuration), the ** prefix triggers recursive glob expansion against the current directory, allowing an attacker-placed executable at a matching nested path (e.g., d/xB0100000023be50) to be executed by relative pathname without relying on PATH. Under bash and zsh, a secondary xterm.js terminal color-query feedback (OSC 10) can be combined in the same file to inject a slash-containing command word that similarly bypasses PATH resolution. An attacker can exploit this by providing a crafted file (e.g., in a cloned Git repository) that a user displays with cat, achieving code execution with no interaction beyond viewing the file. This vulnerability is fixed in 1.0.233.
📍 영향받는 시스템
Tabby (formerly Terminus) < 1.0.233
⚔️ 공격 벡터
공격자가 ZMODEM 헤더를 포함한 악의적 파일을 저장소에 배치한 후, 사용자가 cat 명령으로 표시할 때 자동으로 셸에 명령을 주입하여 실행
🛡️ 대응 방법
Tabby를 1.0.233 이상으로 업그레이드
🔧 검증 코드
버전이 1.0.233 이상이면 안전, 그 미만이면 취약점 존재
tabby --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+'