보안 3분 소요

cat readme.txt 한 번에 털린다 — 터미널이 숨겨온 30년짜리 구멍

개발자라면 하루에도 수십 번씩 cat, less, curl 같은 명령어를 칩니다. 그런데 만약 누군가 보내준 readme.txt 파일을 cat으로 여는 것만으로 당신의 맥북이 해커의 손에 넘어간다면 어떨까요. 말도 안 되는 소리 같지만, 2026년 현재도 여전히 유효한 공격 시나리오입니다.

터미널은 생각보다 똑똑하다, 그게 문제다

우리가 터미널에서 보는 글자 색, 커서 이동, 창 제목 변경은 모두 이스케이프 시퀀스(escape sequence)라는 특수 문자열로 제어됩니다. \033[로 시작하는 이 보이지 않는 명령들은 1970년대 VT100 터미널 시절부터 이어져 온 유산인데요. 문제는 이 시퀀스 중 상당수가 단순한 표시 제어를 넘어 실제 기능을 실행한다는 점입니다.

예를 들면 창 제목을 바꾸는 시퀀스가 있고, 그 제목을 다시 읽어서 터미널에 입력으로 되돌려 보내는 시퀀스도 있습니다. 즉, 공격자가 창 제목에 악성 명령어를 심어두고 그걸 입력 버퍼로 재주입하면, 사용자가 엔터 한 번만 눌러도 임의 명령이 실행될 수 있다는 뜻입니다.

iTerm2가 쏘아올린 작은 공

이 문제가 다시 수면 위로 올라온 건 맥 개발자들이 가장 많이 쓰는 터미널 에뮬레이터 iTerm2에서 연이어 발견된 취약점 때문입니다. 2026년 초 보안 연구자들은 iTerm2의 특정 제어 시퀀스 처리 로직에서 메모리 손상과 명령 주입이 가능한 경로를 공개했습니다.

공격 벡터는 허무할 정도로 단순합니다. 악의적으로 조작된 텍스트 파일을 cat으로 출력하거나, curl로 API 응답을 받거나, 심지어 ssh로 접속한 원격 서버의 로그 파일을 tail하는 것만으로도 트리거될 수 있습니다. 파일에 박힌 수상한 바이트열이 터미널을 통과하는 순간, 터미널 자체가 공격자의 놀이터가 되는 구조입니다.

“그냥 출력일 뿐"이라는 착각

보안의 관점에서 가장 무서운 건 개발자들의 신뢰 모델이 깨진다는 점입니다. 우리는 파일을 “실행"하지 않고 “읽기"만 하면 안전하다고 믿어왔습니다. chmod +x를 하지 않았으니 괜찮다는 식의 직관이죠.

하지만 터미널 이스케이프 시퀀스 공격은 이 경계를 완전히 무너뜨립니다. 읽는 행위 자체가 실행이 되는 겁니다. GitHub에서 받은 수상한 PR의 README, 오픈소스 프로젝트의 로그, 외부 API가 반환한 JSON 안에 섞인 몇 바이트만으로도 공격이 성립합니다. 공격자 입장에서는 사용자 상호작용이 거의 필요 없는 이상적인 벡터인 셈입니다.

영향받는 건 iTerm2만이 아니다

문제는 이게 iTerm2 하나만의 버그가 아니라는 점입니다. 과거 GNOME Terminal, Konsole, xterm, 심지어 Windows Terminal까지 유사한 계열의 이슈가 반복적으로 보고되어 왔습니다. 시퀀스 표준 자체가 오래됐고, 각 에뮬레이터가 나름의 확장을 덧붙이면서 공격 표면이 누적되어 왔기 때문입니다.

특히 요즘처럼 LLM이 생성한 텍스트를 터미널로 그대로 흘려보내거나, AI 에이전트가 웹에서 긁어온 콘텐츠를 셸 환경에서 처리하는 워크플로가 늘어나면서 위험은 오히려 커지고 있습니다. 프롬프트 인젝션과 터미널 인젝션이 결합하는 새로운 공격 시나리오가 충분히 가능해진 거죠.

지금 당장 할 수 있는 것들

첫째, iTerm2를 비롯한 터미널 에뮬레이터를 최신 버전으로 업데이트하세요. 이번 패치는 관련 시퀀스 처리를 대대적으로 손봤습니다. 둘째, 출처가 불분명한 텍스트 파일은 cat 대신 less -R 옵션 없이 열거나, VS Code 같은 에디터로 확인하는 습관을 들이는 게 좋습니다. 셋째, 외부에서 받은 바이너리성 로그는 strings 명령으로 한 번 걸러보는 것도 방법입니다.

더 근본적으로는 터미널 환경에서 위험한 기능들을 비활성화할 수 있습니다. 창 제목 되읽기(DA 응답), 클립보드 조작 시퀀스, 파일 다운로드 프로토콜 같은 기능은 대부분의 개발자에게 불필요하지만 켜져 있는 경우가 많습니다.

우리의 개발 환경은 과연 안전한가

이번 사건이 던지는 질문은 단순한 패치 하나로 끝나지 않습니다. 수십 년 묵은 프로토콜 위에 쌓아 올린 우리의 일상적인 개발 환경에 얼마나 많은 구멍이 남아 있을까요. cat 한 번이 공격 벡터라면, 우리가 매일 돌리는 npm install, pip install, docker pull은 과연 몇 겹의 신뢰 위에서 작동하고 있는 걸까요. 익숙함이 곧 안전은 아니라는 사실을, 이 오래된 취약점이 다시 한번 상기시켜 줍니다.

보안 iTerm2 터미널 개발자보안 이스케이프시퀀스

댓글

    댓글을 불러오는 중...