경량 리눅스(Linux) 배포판으로 컨테이너 환경에서 널리 사용되는 Alpine Linux에서 심각한 보안 취약점(vulnerability)이 발견되었습니다. 이 취약점은 특정 OpenSSH 서버(server) 설정에서 공격자가 비밀번호를 모른 채 시스템에 로그인할 수 있게 합니다. 특히 비밀번호 필드가 ‘*’로 설정된 계정(예: 기본 root 계정)과 특정 비밀번호 해시($5$ 또는 $6$)를 가진 다른 로컬 계정이 동시에 존재할 때 공격이 가능합니다.
이번 취약점은 musl C 라이브러리의 crypt() 함수가 256바이트(byte)를 초과하는 긴 비밀번호를 처리할 때 오류 반환값으로 ‘*’를 내놓는 데서 비롯되었습니다. 이 ‘*’ 값이 비밀번호가 없는 계정의 저장된 비밀번호 필드와 일치하면서, 시스템이 이를 유효한 인증으로 오인하게 됩니다. 영향을 받는 환경은 PAM(Pluggable Authentication Modules) 없이 빌드된 OpenSSH 서버를 사용하거나, `UsePAM no`로 설정하고 `PasswordAuthentication yes`가 활성화된 시스템입니다. Alpine Linux 3.16부터 3.24 및 엣지(edge) 버전이 해당하며, 이미 수정 패키지가 배포되었습니다.
이 취약점은 컨테이너(container)와 클라우드(cloud) 환경에서 널리 쓰이는 Alpine Linux의 특성상 파급력이 클 수 있습니다. 공격자는 SSH 포트에 접근할 수 있다면 257~1024바이트 길이의 특정 비밀번호를 전송하여 로그인에 성공할 수 있습니다. 시스템 관리자는 즉시 `apk upgrade -U -a` 명령어로 `openssh` 패키지를 업데이트하고, 반드시 `rc-service sshd restart` 명령어로 `sshd` 데몬(daemon)을 재시작해야 합니다. 업데이트가 어렵다면 `PasswordAuthentication no`로 설정하여 비밀번호 인증을 비활성화하는 임시 조치도 가능합니다.
이번 사태는 핵심 시스템 라이브러리의 예상치 못한 동작이 어떻게 심각한 보안 문제로 이어질 수 있는지를 보여줍니다. 특히 POSIX(Portable Operating System Interface) 표준을 준수한다고 알려진 musl C 라이브러리가 crypt() 함수의 오류 처리에서 표준과 다른 동작을 보인 것이 논란이 되고 있습니다. 개발자들은 시스템의 모든 구성 요소가 예상대로 작동하는지 면밀히 검토하고, 보안 업데이트를 신속하게 적용하는 것이 얼마나 중요한지 다시 한번 상기해야 합니다. 사용자들은 `/var/log/messages`에서 `Accepted password for` 형태의 의심스러운 SSH 로그인 기록을 확인하고, 무단 침입이 의심될 경우 즉시 시스템 침해로 간주하고 대응해야 합니다.