보안 연구원 Ozgun Kultekin은 OpenSSH 프로토콜에서 "*sshole"이라고 명명된 새로운 취약점을 발견했습니다. 이 취약점을 통해 공격자는 비밀번호 로그인을 방지하도록 설정된 Linux 계정에 로그인할 수 있습니다. 이 취약점은 특히 musl C 라이브러리를 사용하는 시스템에서 나타나며, Alpine Linux 및 OpenWrt와 같은 유명 배포판을 위험에 빠뜨립니다.
취약점의 기술적 작동 원리
Linux 시스템의 전통적인 보호 방식은 /etc/shadow 파일에서 비밀번호 해시를 별표(*)로 대체하여 비밀번호 로그인을 방지하는 것입니다. 2016년에 나타난 사용자 이름 열거(Username Enumeration) 취약점을 피하기 위해 OpenSSH 개발자들은 계정 상태와 관계없이 서버가 일관된 응답을 하도록 유효한 해시가 없는 계정에 대해서도 해싱 과정을 수행하도록 시스템을 수정했습니다.
문제는 musl C 라이브러리, 특히 crypt() 함수가 비밀번호 입력 길이가 256바이트를 초과할 때 암호화 과정이 실패하면 결과값으로 별표(*)를 반환한다는 점입니다. 이로 인해 잘못된 시도로 생성된 결과값이 비활성화된 계정의 /etc/shadow 파일에 저장된 값과 일치하게 되어, OpenSSH가 이를 속이고 로그인을 허용하게 됩니다.
이 뉴스가 중요한 이유
이 취약점의 실질적인 위험은 클라우드 컴퓨팅 환경에서 루트(Root) 권한을 완전히 획득할 수 있다는 점에 있습니다. 연구원은 AWS 및 Azure 플랫폼에서 사용되는 공식 Alpine Linux 이미지에 비밀번호 없이 doas 권한을 가진 "alpine"이라는 기본 계정이 포함되어 있어, 공격자가 이 취약점을 악용하여 서버를 완전히 장악할 수 있다고 경고했습니다.
악용 조건 및 영향받는 시스템
이 취약점은 모든 시스템에 영향을 미치지는 않습니다. glibc 라이브러리(Debian, Ubuntu, Fedora 등)를 기반으로 하거나 PAM 인증을 사용하는 시스템은 안전합니다. 악용이 성공하려면 다음 조건이 충족되어야 합니다.
- musl 라이브러리 기반 시스템(Alpine Linux, OpenWrt, Buildroot, Yocto 등)에서 OpenSSH 실행
- PAM 인증 비활성화(Alpine Linux의 openssh-server 패키지 기본 설정)
- SSH 설정에서 비밀번호 인증(Password Authentication) 활성화
- 별표(*)를 사용하여 비밀번호가 비활성화된 계정이 하나 이상 존재
보호 및 확인 방법
OpenSSH 개발자들은 이 취약점을 완전히 해결한 10.6p2 버전을 출시했습니다. 시스템 관리자는 즉시 OpenSSH 패키지를 업데이트할 것을 권장합니다. 즉각적인 업데이트가 불가능한 경우, 설정 파일에서 PasswordAuthentication no를 설정하고 서비스를 재시작하여 비밀번호 인증을 비활성화함으로써 위험을 줄일 수 있습니다.
시스템의 해킹 가능성을 확인하려면 Alpine Linux에서 다음 명령어를 사용하여 비활성화된 것으로 간주되는 계정의 성공적인 로그인 기록을 인증 로그에서 검색할 수 있습니다.
grep "Accepted password" /var/log/messages