메뉴
HN
Hacker News 14일 전

Tailscale SSH 루트 권한 탈취 취약점 발견

IMP
9/10
핵심 요약

Tailscale에서 SSH 인자 처리 미흡으로 인해 ACL 정책을 우회하여 루트 권한을 탈취할 수 있는 취약점이 발견되었습니다. 또한 Tailscale Serve/Funnel에서 비정상 HTTP 요청으로 CPU를 100% 점유하는 서비스 거부(DoS) 공격도 가능했습니다. 해당 문제는 버전 1.98.9에서 모두 수정되었으므로 즉시 업데이트가 필요합니다.

번역된 본문

설명: Tailscale SSH의 안전하지 않은 명령줄 인자 처리 방식으로 인해 ACL(접근 제어 목록)을 우회하여 루트 사용자 접근이 허용되는 취약점이 발견되었습니다.

무슨 일이 있었나요? 과거 Tailscale SSH는 맨 앞에 '-'(대시) 문자가 포함된 사용자 이름을 허용했습니다. Linux 플랫폼에서는 이러한 사용자 이름이 해당 passwd 항목을 검색하기 위해 getent(1) 명령어의 인자로 전달되었는데, 이때 공격자가 제어할 수 있는 플래그로 해석되는 문제가 있었습니다. 구체적으로, 사용자가 '-i'라는 사용자 이름으로 연결하면 이는 '--no-idn' 플래그로 해석되어 getent가 root 사용자부터 시작하여 전체 passwd 파일 내용을 출력하게 되고, 결국 Tailscale이 root 권한의 대화형 세션을 열게 됩니다. 현재 Tailscale SSH는 맨 앞에 대시가 있는 사용자 이름을 거부하도록 수정되었습니다. 이 취약점은 Tailscale 버전 1.98.9 이상에서 수정되었습니다.

어떤 영향이 있나요? Linux 노드에 대한 SSH 접근 권한이 있는 사용자가 '-i'라는 사용자 이름으로 연결하여 ACL 정책을 위반하고 root 세션을 획득할 수 있었습니다.

영향을 받는 대상은 누구인가요? Tailscale ACL의 autogroup:nonroot 사용자 제한에 의존하는 Linux 호스트에서 Tailscale SSH를 사용하는 사용자.

어떻게 조치해야 하나요? Tailscale SSH를 사용 중이라면 Tailscale 버전 1.98.9 이상으로 업그레이드하세요.

크레딧: 이 문제를 보고해 주신 Anthropic과 Ada Logics에 감사드립니다.


설명: Tailscale Serve 또는 Funnel을 실행하는 노드에 대한 단일 비정상 HTTP 요청이 하나의 CPU 코어를 무한정 점유하여 서비스 거부(DoS)를 유발할 수 있었습니다.

무슨 일이 있었나요? Tailscale Serve와 Tailscale Funnel은 요청 경로를 구성된 마운트 지점과 대조하여 들어오는 HTTP 요청을 로컬 백엔드로 프록시합니다. 요청에 대한 핸들러를 처리할 때, Tailscale은 요청 경로를 루트 경로(/)에서 종료될 것이라 예상하고 디렉터리 단위로 상향식으로 탐색했습니다. 그러나 경로가 '/'로 시작하지 않는 요청의 경우, 이 탐색은 루트 경로에 도달하지 못했고 마운트 지점과 일치하지 않아 루프가 무한히 반복되었습니다. 서버가 요청 시간 제한을 두지 않았기 때문에 이 무한 루프를 중단하는 것이 없었으며, 고루틴(goroutine)이 프로세스가 종료될 때까지 하나의 코어를 100%로 점유했습니다. 이제 Tailscale은 절대 경로가 아닌 경로에 대한 탐색을 종료하고, 핸들러를 반환하지 않으며 요청을 닫도록 수정되었습니다. 이 취약점은 Tailscale 버전 1.98.9 이상에서 수정되었습니다.

어떤 영향이 있나요? 공격자는 조작된 HTTP 요청을 전송하여 대상 노드의 CPU 코어 하나를 영구적으로 소모하게 만들 수 있었습니다. Tailscale Serve의 경우 해당 노드에 접근 권한이 있는 tailnet의 모든 피어에서 요청이 시작될 수 있었습니다. Tailscale Funnel의 경우 인터넷상의 인증되지 않은 모든 호스트에서 요청이 시작될 수 있었습니다.

영향을 받는 대상은 누구인가요? 1.98.9 이전 버전에서 Tailscale Serve 또는 Tailscale Funnel을 실행 중인 노드.

어떻게 조치해야 하나요? Tailscale Serve 또는 Tailscale Funnel을 실행 중이라면 Tailscale 버전 1.98.9 이상으로 업그레이드하세요.

크레딧: 이 문제를 보고해 주신 Anthropic과 Ada Logics에 감사드립니다.

원문 보기
원문 보기 (영어)
Description : A single malformed HTTP request to a node running Tailscale Serve or Funnel could pin a CPU core indefinitely, causing denial of service. What happened? Tailscale Serve and Tailscale Funnel proxy incoming HTTP requests to local backends by matching the request path against the configured mount points. When resolving the handler for a request, Tailscale walked the request path upward one directory at a time, expecting the walk to eventually terminate at the root path / . For requests whose path did not begin with / , this walk never reached / and never matched a mount point, causing the loop to spin forever. As the server enforced no request timeout, nothing interrupted the spin, and the goroutine held one core at 100% for the life of the process. Tailscale now terminates the path walk for non-absolute paths, returning no handler and closing the request. This vulnerability is fixed in Tailscale version 1.98.9 or newer. What was the impact? An attacker could send a crafted HTTP request to permanently consume one CPU core on the target node. For Tailscale Serve, the request could originate from any peer on the tailnet with access to the node. For Tailscale Funnel, the request could originate from any unauthenticated host on the internet. Who was affected? Nodes running Tailscale Serve or Tailscale Funnel on versions prior to 1.98.9. What do I need to do? If you run Tailscale Serve or Tailscale Funnel, upgrade to Tailscale version 1.98.9 or newer. Credits We would like to thank Anthropic and Ada Logics for reporting this issue. Description : Insecure command line argument handling in Tailscale SSH permitted root user access in violation of ACLs. What happened? Tailscale SSH previously accepted usernames that contained a leading - character. On Linux platforms these usernames were passed as arguments to getent(1) to retrieve the corresponding passwd entry, where they were interpreted as flags permitting attacker-controlled behavior. Specifically, if a user connected with the username -i this would have been interpreted as --no-idn and getent would have printed the entire passwd file contents starting with the root user, causing Tailscale to open an interactive root session. Tailscale SSH now rejects usernames with leading dashes. This vulnerability is fixed in Tailscale version 1.98.9 or newer. What was the impact? A user with SSH access to a Linux node would have been able to obtain a root session by connecting with the username -i , in violation of ACL policy. Who was affected? Users of Tailscale SSH on Linux hosts that rely on autogroup:nonroot user restrictions in Tailscale ACLs. What do I need to do? If you use Tailscale SSH, upgrade to Tailscale version 1.98.9 or newer. Credits We would like to thank Anthropic and Ada Logics for reporting this issue.