FreeBSD에서는 모든 그래픽 터미널 프로그램(예: xterm, rxvt)이 setuid 루트가 설치되어 있거나 setuid 루트 래퍼를 사용하는 것으로 나타납니다.
Linux에서는 제가 사용한 어떤 배포판에서도 이런 일이 발생하지 않습니다.
FreeBSD에 터미널 프로그램용 setuid 실행 파일이나 래퍼가 필요한 이유는 무엇입니까? 이는 권한 상승 취약점을 도입하는 좋은 방법인 것 같습니다.
답변1
xterm
이는 set-uid 프로그램으로 밝혀졌습니다 . 한 가지 이유는 누가 어떤 장치를 사용하고 있는지 기록하기 위해 파일에 쓸 수 있어야 하기 때문입니다 utmp
. 또 다른 이유는 xterm
표준 입력/출력으로 사용되는 pseudo-tty 장치의 소유권을 가져와서 해당 장치에 액세스하는 사용자에게 소유권을 설정해야 하기 때문입니다.
대부분의 다른 Unix/Unix 계열 운영 체제는 동일한 목표를 달성하기 위해 더 이상 setuid 또는 setgid 비트를 사용하지 않고 대신에 더 안전한 다른 방법을 사용하지만 FreeBSD는 원래 솔루션을 유지하는 것으로 보입니다.
답변2
일부 임시 버그 보고/수정(포트의 변경 로그에 없음)을 제외하면 FreeBSD는 uid를 설정하기 위해 xterm이 필요하지 않으며 xterm과 함께 사용되지 않습니다.2011년부터. 포트 유지 관리인의 의견에 따르면
- Don't set suid bit. In our implementation, grantpt() and unlockpt() don't
actually have any use, because PTY's are created on the fly and already have
proper permissions upon creation (see src/lib/libc/stdlib/ptsname.c) [1]
변경된 사항을 말합니다.2008 년에:
The pts(4) driver also implements this feature, which means
posix_openpt() will now return PTY's that are created on the fly.
이 문제를 보면2014년OP가 오래된 시스템에서 작업하는 것 같습니다. 또는 (그리고 이런 일이 발생합니다) OP 시스템이 누군가에 의해 수정되었을 수도 있습니다.다음에 추가setuid 비트.
플랫폼(및 해당 연령)에 따라 xterm은 다음 작업에 setuid 또는 setgid를 사용합니다.
- 의사 터미널 열기
- utmp(또는 utmpx) 업데이트
원래 BSD(및 기타) 의사 터미널 구현에서는 애플리케이션이 특수 장치를 찾은 다음 다음을 사용하여 열어야 했습니다.뿌리setuid 권한. Unix98은 첫 번째 부분(특수 장치 찾기)을 취소하고 시작했습니다.1999년. 2005년경에는 대부분의 의사 터미널 구현에서 설치 프로그램을 사용할 필요가 없어졌습니다.설정값. 어떤 이유로든 FreeBSD에서는 무시됩니다.
마찬가지로 응용프로그램에는 그룹 권한이 필요할 수 있습니다(다음을 통해).설정last
) utmp(또는 utmpx) 파일을 업데이트하고 사용했습니다 who
. xterm
이 목적으로 utempter 라이브러리를 사용하도록 지정되었습니다.2000년 이후. xterm의 FreeBSD 포트는 이 기능을 사용하므로 setgid도 필요하지 않습니다.
다른 프로그램은 다음과 같이 설치할 수 있습니다.설정값또는설정동일한 작업에 대해 2014년 현재 터미널 프로그램이 없을 가능성이 높습니다.필요setuid 권한뿌리사용자. 다른 프로그램(예: urxvt)에서 사용할 때 관리자가 이를 간과했을 수 있습니다.
답변3
좋은 점은, 그래도 그게 여전히 사실인지는 몰랐다는 것입니다. 그것이 초래하는 피해를 제한하는 방법이 있습니다. 아마도 그들은 이 새로운 고추를 연구하고 있을 것입니다. 하지만 저는 모든 X(Xorg) 애플리케이션에 대해 Wayland가 먼저 소개되어야 한다고 말하고 싶습니다. 그런 다음 X를 실행하는 컴퓨터의 보안에 대해 실제로 이야기할 수 있습니다. xterm이 터미널을 알리는 것과 같은 작은 문제는 5분 안에 해결될 수 있습니다. Xorg는 거대한 보안 허점입니다.