Skip to content

CLI 출력에서 비신뢰 ANSI 및 터미널 제어 시퀀스 제거 #19

Description

@leehyowon14

요약

파일 경로와 서버 로그 등 외부에서 유입되는 문자열이 터미널 제어 문자를 포함한 상태로 출력됩니다. 파일명에 삽입한 ESC[2J가 pseudo-TTY까지 그대로 전달되는 것을 확인했습니다.

  • 검토 기준: main@4e87765f95c106edb3c956cfad2abc1db64c0c39
  • 판정: raw 전달과 화면 제어 CONFIRMED
  • 우선순위: P2

영향

검증된 영향은 ANSI CSI를 통한 화면 조작입니다. OSC 52 클립보드 조작, CI renderer의 특수 처리 등은 터미널 정책에 따라 달라지며 이번 검증에서 확인하지 않았습니다. RCE로 분류하지 않습니다.

발생 조건 및 확인 범위

  • 파일명 또는 서버 로그에 제어 문자가 포함될 것
  • 해당 값을 출력하는 CLI 명령을 실행할 것
  • 실제 시각적 영향은 터미널의 escape 정책에 따라 달라짐

macOS pseudo-TTY에서 raw byte 1b 5b 32 4a 전달을 확인했습니다.

재현 및 검증 방법

  1. 유효한 팩 아래 namespace 이름에 bad\x1b[2Jname을 만듭니다.
  2. pseudo-TTY에서 dpt check --pack <pack>을 실행합니다.
  3. transcript를 od -An -tx1 또는 xxd로 검사합니다.
  4. 현재 1b 5b 32 4a가 출력에 존재하는지 확인합니다.

기대 동작

비신뢰 문자열의 CSI/OSC 및 C0/C1 문자를 안전한 표현으로 제거하거나 escape해야 합니다. DPT 내부 스타일 ANSI와 외부 문자열을 구분해야 합니다.

완료 조건

  • 파일명과 서버 로그의 CSI/OSC/C0/C1이 제어 코드로 전달되지 않는다.
  • color 활성화·비활성화 모두 안전하다.
  • 일반 Unicode 파일명과 DPT 자체 스타일은 유지된다.
  • check, shell 로그, exec 메시지 회귀 테스트를 추가한다.
  • 최종 출력 바이트에 외부 입력의 raw escape가 없음을 검증한다.

관련 코드

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions