리눅스 서버의 완벽한 악몽 시나리오는 공격자가 서버의 SSH 포트에 접속해 그냥 들어와서 서버를 장악하는 것입니다. 인기 있는 경량 리눅스 서버인 Alpine Linux에서 바로 그런 일이 발생했습니다. 설상가상으로, 이 사건은 Alpine Linux가 GitLab 구현에 대한 보안 구멍 크기의 총알을 피한 지 불과 며칠 만에 일어났습니다.
보안 엔지니어 Gregory Bryant는 LinkedIn 게시물에서 이렇게 설명했습니다: "대부분의 인증 우회는 복잡한 논리 체인에서 비롯되지만, 어제의 Alpine Linux OpenSSH 취약점(CVE-2026-123158)은 단 하나의 문자로 귀결됩니다: *."
Alpine Linux(또는 다른 musl 기반 배포판)를 기본 openssh-server 패키지(PAM 없음)와 함께 실행하고 PasswordAuthentication이 활성화된 경우, 공격자는 257~1024바이트 길이의 비밀번호를 전송하기만 하면 비밀번호가 비활성화된 계정 또는 키 전용 계정에 로그인할 수 있습니다.
Alpine Linux만 musl을 사용하는 운영 체제는 아닙니다. musl은 표준 C 라이브러리(libc)의 경량 버전입니다. musl을 사용하며 잠재적으로 취약한 다른 운영 체제로는 Adélie Linux, Void Linux, Sabotage Linux, Android 변형인 OpenWrt, 임베디드 리눅스 배포판을 빌드하는 데 사용되는 Yocto Project가 있습니다.
상용 임베디드 리눅스 배포판인 Wind River Linux를 생산하는 Wind River도 이 문제를 조사하고 있습니다. 회사 대표는 "Wind River는 보안을 진지하게 생각합니다. 보고된 취약점을 적극적으로 검토하고 잠재적 영향을 평가하고 있습니다. 필요에 따라 적절한 조치를 취할 것입니다"라고 말했습니다.
내부적으로 OpenSSH가 PAM 없이 빌드되면 C 라이브러리의 crypt() 함수를 사용하여 비밀번호 시도를 해시하여 비밀번호를 확인합니다. 그런 다음 결과를 계정의 저장된 비밀번호 필드와 비교합니다. 여기까지는 좋습니다.
그러나 키가 256바이트보다 길면 musl의 crypt() 함수는 오류 표시로 문자열 *을 반환합니다. 이는 비밀번호가 없는 계정(예: 키 전용 계정)의 비밀번호 필드에 저장된 값과 동일합니다. 따라서 "해시"가 일치하고 로그인이 성공하며 공격자가 들어옵니다.
이를 악용하려면 공격자는 그러한 계정의 이름만 알면 됩니다. 또한 공격자는 시스템에 5 또는 6 비밀번호 해시를 가진 다른 계정이 하나 이상 있어야 하며, 257~1,024바이트의 비밀번호를 전송해야 합니다. Alpine에 따르면 비밀번호가 있는 사용자 한 명이면 모든 비밀번호 없는 계정에 접근할 수 있습니다.
glibc의 crypt()를 사용하는 리눅스 시스템(거의 대부분)에서는 동일한 시도가 오류 시 NULL을 반환하며 sshd가 이미 이를 거부하므로 Debian, Ubuntu, Fedora 등은 영향을 받지 않습니다.
문제를 발견한 그룹 *sshole에 따르면, 이는 2016년부터 숨어 있던 부작용입니다.
Alpine은 확인한 모든 릴리스가 영향을 받는다고 밝혔습니다: 3.21부터 3.24, edge, 그리고 이전 3.16~3.20 브랜치입니다. 노출 조건은 다음과 같습니다:
대부분의 경우 루트가 직접 노출되지는 않습니다. 약 Alpine 3.16부터 기본 이미지에 root:*로 제공되지만 OpenSSH의 기본 PermitRootLogin prohibit-password가 이를 차단합니다. doas 등을 통해 루트가 될 수 있는 다른 계정이 있으면 공격자는 여전히 루트로 가는 경로를 얻습니다.
Alpine은 공식 tiny-cloud 이미지 버전 3.18.11~3.24.3을 특히 취약하다고 지목했습니다. 이 이미지에는 * 비밀번호 필드를 가진 alpine 사용자와 비밀번호 없는 doas가 포함되어 있습니다. 첫 부팅 시에는 안전하지만 시스템에 6 해시가 존재하면 악용 가능해집니다. 이는 관리자가 콘솔 비밀번호를 설정하거나 사용자 데이터가 해시된 비밀번호를 가진 사용자를 추가할 때 발생할 수 있으며, 즉 사실상 모든 경우에 해당합니다.
Alpine은 목요일에 3.21.10, 3.22.8, 3.23.8, 3.24.4를 출시하며 보안 변경 사항 중 OpenSSH 수정을 포함했습니다. 또한 3.16까지 각 릴리스에 대한 수정 패키지를 게시했습니다. Alpine 3.21은 11월 1일에 지원이 종료되었습니다.
방금 출시된 OpenSSH 10.6p2는 sshd에서 문제를 회피합니다. Alpine의 안정 브랜치에는 동일한 문제에 대한 패치가 포함되어 있습니다. apk upgrade -U -a를 실행한 다음 재시작해야 합니다.
The Good Times
받은 편지함에 뉴스를.
비꼬는 뉴스 요약을 일정에 맞게 배달합니다. 무료. 언제든지 취소하세요.
이미 구독했는데도 저희가 안 보이나요? 스팸함을 확인하고 '스팸 아님'(또는 '스팸에서 제거')을 눌러 주세요. 정크메일 연옥에서 저희를 꺼내 주고 덤으로 모두에게도 도움이 됩니다.
한 달 동안 저희 이메일을 하나도 열지 않으면 메일링 리스트에서 자동으로 삭제됩니다.
Rewrite Article
Select parts to regenerate with a fresh AI pass. Translations will be updated automatically.
Generate AI Image
Creates a sardonic version of the article image using OpenAI.