콘텐츠로 이동

Tailscale SSH 포트 포워딩 권한 상승

Tailscale SSH 포트 포워딩 권한 상승 thumbnail
2026-10-25 공개된 Tailworm 연구는 Tailscale SSH 포트 포워딩을 통해 대상 서버의 root 권한으로 로컬 Unix socket에 접근하는 공격 경로를 제시했다. 공격자는 SSH 비밀번호나 개인 키 대신, 이미 장악한 tailnet 장치에 부여된 접근 권한을 이용한다.

요약

2026-10-25 공개된 Tailworm 연구는 Tailscale SSH 포트 포워딩을 통해 대상 서버의 root 권한으로 로컬 Unix socket에 접근하는 공격 경로를 제시했다. 공격자는 SSH 비밀번호나 개인 키 대신, 이미 장악한 tailnet 장치에 부여된 접근 권한을 이용한다.

연구자는 Tailscale 1.104.2와 headscale 0.29.5를 실험실에서 테스트했다. 공개 당시 CVE, 보안 advisory, 수정 버전은 발표되지 않았으며 실제 악용(in the wild) 사례도 보고되지 않았다. Tailscale은 관련 영역에서 문제를 발견해 수정 중이라고 밝혔지만, 세부 기술 주장을 개별적으로 확정하지는 않았다.

항목 내용
공개일 2026-10-25
테스트 버전 Tailscale 1.104.2, headscale 0.29.5
선행 조건 공격자가 tailnet 장치 하나를 이미 통제
접근 조건 해당 장치에서 대상 서버로 Tailscale SSH 연결 허용
핵심 primitive root 권한 프로세스를 통한 Unix socket 연결
실험 결과 대상 서버의 root 권한 획득
공개 당시 상태 CVE·보안 advisory·수정 버전 발표 전

SSH 연결 권한이 로컬 root 경계까지 확장된다

Tailscale SSH 포트 포워딩은 root 권한으로 실행되는 Tailscale 프로세스가 대상 자원에 연결하는 구조다. 포워딩 목적지로 privileged Unix socket을 지정할 수 있으면, 원격 SSH 접근 권한이 로컬 root 프로세스의 연결 권한으로 바뀐다.

공격 조건과 신뢰 경계

공격에는 다음 조건이 필요하다.

  • Tailscale SSH 규칙이 공격자 장치에서 대상 서버로의 연결을 허용한다.
  • 해당 SSH 규칙에서 포트 포워딩을 사용할 수 있다.
  • 공격자가 허용된 tailnet 장치 하나를 이미 통제한다.
  • 대상 서버에 root 연결을 신뢰하거나 privileged 작업을 제공하는 Unix socket이 존재한다.

초기 장치 침해는 이 공격의 범위에 포함되지 않는다. 웹 애플리케이션 취약점, 악성 패키지, phishing, 자격 증명 탈취 등으로 확보한 foothold가 출발점이다.

Tailscale SSH는 접속 장치의 identity와 접근 정책을 기준으로 세션을 허용한다. 장치가 침해되면 해당 장치에 부여된 SSH 권한도 공격자에게 넘어간다. 여러 서버에 적용되는 사용자·tag 기반 규칙은 한 장치의 침해 범위를 넓힐 수 있다.

기술 분석

Privileged Unix socket 포워딩

첫 번째 공격 경로는 표준 SSH 포트 포워딩으로 root 전용 Unix socket에 연결한다. 실제 socket 연결은 일반 사용자 세션이 아니라 root 권한의 Tailscale 프로세스가 수행한다.

compromised tailnet device
        |
        | allowed Tailscale SSH session
        v
SSH port-forwarding request
        |
        | connection opened by root-level Tailscale process
        v
privileged Unix socket on target
        |
        | service trusts the local privileged connection
        v
root-level operation

연구자는 이 경로로 관리자 권한 없이 root 권한을 얻고 시스템 암호 파일을 읽었다고 보고했다. 핵심은 SSH 세션 사용자의 권한보다 포워딩 연결을 생성하는 프로세스의 권한이 높다는 점이다.

Root 소유 socket 대체

두 번째 경로는 root 소유 socket을 공격자가 제어하는 socket으로 대체한다. 로컬 서비스가 socket의 연결 주체나 소유 관계를 신뢰하면 공격자가 서비스의 privileged 요청을 가로채거나 root 명령 실행 primitive를 확보할 수 있다.

이 경로의 성립 여부는 대상 서비스의 socket 처리 방식과 신뢰 모델에 좌우된다.

경로 검사의 TOCTOU race

세 번째 경로는 포워딩 대상의 파일 경로를 검사하는 시점과 실제로 사용하는 시점 사이의 경쟁 조건을 이용한다. 검사 후 경로가 가리키는 객체를 바꾸면, 허용된 경로에 대한 검사를 통과한 뒤 다른 파일이나 socket을 열 수 있다.

연구 환경에서는 이 primitive를 신규 장치 등록용 키 탈취로 확장했다. 탈취한 키로 공격자 장치를 신뢰된 서버로 등록하는 단계까지 이어졌으며, Tailnet Lock이 활성화된 환경에서는 최종 등록 단계가 완료되지 않았다.

확산 범위

연구자가 사용한 “wormable”은 장악한 장치가 접근 정책상 연결 가능한 다른 장치로 사용자 입력이나 SSH 키 탈취 없이 연쇄 이동할 수 있다는 의미다. 실험 환경에서는 장치당 전파 시간이 1초 미만으로 측정됐다.

확산 범위는 SSH 접근 정책과 장치 키 보호 방식에 따라 달라진다.

구성 영향
광범위한 사용자·tag 기반 SSH 규칙 한 장치의 권한으로 여러 서버에 접근 가능
단일 source-to-destination 규칙 연구 환경에서 장치 간 연쇄 확산 차단
Tailscale hosted service 규칙별 포트 포워딩 비활성화 가능
headscale 0.29.5 SSH 포워딩 비활성화 설정을 제공하지 않음
Tailnet Lock 탈취한 등록용 키를 이용한 최종 장치 등록 제한
TPM·Secure Enclave 기반 device key 장치 키 복제와 다른 시스템에서의 재사용 제한

headscale 0.29.5에서는 SSH 포워딩을 끌 수 없으므로 각 SSH grant를 대상 서버의 privileged local interface에 도달할 수 있는 권한으로 평가해야 한다.

대응

  • Tailscale hosted service에서는 SSH 규칙별 포트 포워딩을 비활성화한다.
  • SSH 규칙을 필요한 source-to-destination 쌍으로 분리한다.
  • 여러 서버에 적용되는 광범위한 사용자·tag 기반 허용 규칙을 축소한다.
  • headscale 0.29.5를 사용하는 환경에서는 불필요한 SSH grant를 제거한다.
  • privileged Unix socket과 연결될 수 있는 포워딩 구성을 점검한다.
  • Unix socket을 대상으로 하는 불필요한 tailscale serve 설정을 제거한다.
  • Tailnet Lock과 하드웨어 기반 device key 보호를 적용한다.
  • 침해 장치는 운영체제 재설치에 그치지 않고 control plane에서 제거한다.
  • node-key expiry를 적용해 탈취된 장치 키의 유효 기간을 제한한다.
  • SSH check mode를 사용해 세션 시작 전에 추가 승인을 요구한다.

SSH check mode는 세션 개시를 제한하지만 포트 포워딩의 권한 모델을 바꾸지는 않는다. 포워딩 비활성화와 접근 정책 축소가 직접적인 차단 수단이다.

현재 장치와 로컬 설정은 다음 명령으로 점검할 수 있다.

tailscale status
tailscale status --json
tailscale debug prefs

탐지 포인트

네트워크

  • 평소 사용하지 않던 tailnet 장치에서 시작된 Tailscale SSH 연결
  • 동일한 source 장치가 짧은 시간에 여러 서버로 생성한 SSH 세션
  • SSH 세션 직후 cloud metadata service로 향하는 app connector 트래픽
  • 기존 접근 패턴과 다른 source-to-destination 조합

엔드포인트

  • 새로 등록된 장치 또는 예기치 않게 tag가 변경된 장치
  • enrollment key 사용 직후 발생한 신규 서버 등록
  • 폐기되거나 재설치된 장치의 node key를 사용한 재접속
  • 짧은 간격으로 여러 대상 서버에 연결한 단일 장치 identity

서버

  • Tailscale SSH 세션과 같은 시각에 발생한 privileged Unix socket 접근
  • root 소유 socket의 경로, inode, 소유권 또는 파일 형식 변경
  • Tailscale 프로세스가 평소 연결하지 않던 로컬 관리 socket에 생성한 연결
  • SSH 세션 직후 발생한 /etc/shadow 등 root 전용 파일 접근
  • Unix socket을 대상으로 하는 tailscale serve 전달 규칙의 추가 또는 변경
  • 경로 검사 직후 symlink나 socket 대상이 빠르게 교체되는 동작

참고 자료

Unpatched Tailscale SSH Flaws Could Let a Hacked Device Reach Root on Other Servers