Alpine Linux болон OpenSSH дээр 0-day цоорхой илэрлээ: 256 тэмдэгтээс урт нууц үгээр шууд нэвтэрч байна
Дэлхий даяар олон сая контейнер, хөнгөн жинтэй сервер, үүлэн дэд бүтцийн үндэс суурь болдог Alpine Linux болон OpenSSH багийнхан хамтран аюулгүй байдлын яаралтай шинэчлэлт (OpenSSH 10.6p2)-ийг гаргалаа.
Судлаачдын "sshole" (CVE-2026-123158) хэмээн нэрлэсэн уг алдаа нь алсын халдагчид систем дээрх тодорхой хэрэглэгчийн эрх рүү нэг ч нууц үг таах шаардлагагүйгээр, ганцхан хүсэлтээр шууд нэвтрэх боломжийг олгож байгаа бөгөөд exploit нь 100%-ийн амжилттай ажиллаж байна.
Хэрэв танай дэд бүтцэд Alpine Linux дээр sshd ажиллаж байгаа бол энэхүү нийтлэлд анхаарлаа хандуулж, серверүүдээ нэн даруй шалгахыг зөвлөж байна.
Алдаа хэрхэн ажилладаг вэ? (The Mechanics of "sshole")
Энэхүү эмзэг байдал нь криптограф алгоритмын алдаа биш, харин системийн хоёр өөр бүрэлдэхүүн хэсгийн төсөөлөл, логик зөрчилдсөнөөс үүсчээ.
1. * утгатай нууц үггүй хэрэглэгчид
Линукс системд зөвхөн SSH түлхүүрээр (key-only) нэвтрэх зориулалттай эсвэл нууц үг тохируулаагүй хэрэглэгчдийг үүсгэх үед /etc/shadow файлын нууц үгийн талбарт * (од) тэмдэгт бичигддэг. Энэ нь системд уг хэрэглэгч рүү ямар ч нууц үгээр нэвтрэхийг хориглосон дохио болдог.
2. OpenSSH болон PAM-гүй орчин
Alpine Linux-ийн үндсэн openssh-server багц нь хэмжээ болон системийн хамаарлыг багасгахын тулд PAM (Pluggable Authentication Modules) дэмжлэггүйгээр, musl libc сан дээр хөрвүүлэгддэг. PAM-гүй үед OpenSSH daemon (sshd) нь хэрэглэгчийн оруулсан нууц үгийг шалгахын тулд системийн стандарт crypt() функцийг шууд дуудаж, гарсан hash-ийг /etc/shadow дахь утгатай жишдэг.
Хэрэв хэрэглэгчийн нууц үгийн талбар нь ганцхан * тэмдэгттэй байвал sshd шифрлэлтэд хэрэгтэй salt-ийг систем дээрх нууц үгтэй өөр нэг данснаас "зээлж" авдаг.
3. musl libc-ийн алдаа ба үхлийн харьцуулалт
Хамгийн ноцтой хэсэг нь энд эхэлнэ. Халдагч тухайн хэрэглэгчийн нууц үгэнд 257-оос 1024 байтын урттай дурын урт текст илгээдэг.
musl libc сангийн crypt() функц нь 256 байтаас урт түлхүүр ирэх үед алдаа зааж, буцаах утга дээрээ алдааны индикатор болгон яг л "*" гэсэн тэмдэгтийг буцаадаг байна!
Улмаар процесс дараах байдлаар өрнөнө:
- Халдагч 300 тэмдэгттэй санамсаргүй нууц үг илгээнэ.
musl libc-ийнcrypt()функц "нууц үг хэт урт байна" гэж үзээд"*"буцаана.sshdньcrypt()-ийн буцаасан үр дүнг shadow файл дахь хэрэглэгчийн нууц үгтэй жишнэ.- Shadow файл дахь утга нь
"*"байна. "*" == "*"буюу шалгалт амжилттай давж, OpenSSH халдагчид хаалгаа шууд нээнэ!
Ингэснээр систем дээр ердөө нэг л хэрэглэгч жинхэнэ нууц үгтэй байхад л систем дэх бусад БҮХ нууц үггүй (key-only) данс руу алсаас дурын урт нууц үг хийгээд нэвтэрч болохоор болжээ.
Ямар системүүд эрсдэлд орсон бэ?
Дараах гурван нөхцөл зэрэг хангагдсан тохиолдолд таны систем шууд халдлагад өртөх боломжтой:
- Alpine Linux дээр openssh-server ажиллаж байгаа: Стандарт PAM-гүй хувилбар ажиллаж байгаа, эсвэл
UsePAM noтохиргоотой. PasswordAuthentication yesтохиргоотой: Энэ нь OpenSSH-ийн анхдагч тохиргоо байдаг. Та зөвхөн SSH түлхүүрээр нэвтэрдэг байсан ч энэ тохиргоог гараарааnoболгоогүй бол эрсдэлтэй.- Систем дээр нэг нь нууц үгтэй, нөгөө нь нууц үггүй дор хаяж хоёр данс байгаа үед: Жишээ нь нэг админ хэрэглэгч нууц үгтэй, харин деплой хийдэг сервис данс нь зөвхөн SSH-key ашиглахаар үүсгэгдсэн бол.
Анхаарах зүйл: Зөвхөн Alpine Docker image ашиглаж, дотор нь SSH daemon ажиллуулаагүй веб аппликейшн, microservice ажиллуулж байгаа бол энэ алдаа шууд нөлөөлөхгүй. Харин Alpine дээр суурилсан VPS, виртуал машин, cloud instance, эсвэл дотроо SSH серверийн порт нээлттэй контейнерууд шууд цохилтод өртөнө.
Яг одоо ямар арга хэмжээ авах вэ?
Алхам 1: OpenSSH багцаа шинэчлээд, daemon-ийг дахин асаах
Alpine-ийн албан ёсны репозиторуудад засвар орсон байна. Зөвхөн багцыг шинэчлэхэд санах ойд ажиллаж байгаа sshd шинэчлэгдэхгүй тул daemon-оо заавал рестарт хийх шаардлагатай:
apk update && apk upgrade openssh
rc-service sshd restart
Алхам 2: Түргэн арга хэмжээ (Workaround)
Хэрэв та шууд багцаа шинэчлэх боломжгүй, эсвэл олон сервер дээр ажиллаж байгаа бол /etc/ssh/sshd_config файлдаа дараах өөрчлөлтийг оруулж нууц үгээр нэвтрэхийг бүрэн хаагаарай:
PasswordAuthentication no
Тохиргоог хадгалсны дараа sshd сервисээ дахин ачаална. Ингэснээр халдагч нууц үг илгээж auth bypass хийх ямар ч боломжгүй болно.
Дүгнэлт ба сургамж
CVE-2026-123158 нь компьютерийн системийн архитектур дахь "жижиг логик алдаа" хэрхэн сүйрлийн хэмжээний цоорхой үүсгэж бодгийг харуулсан сонгодог жишээ боллоо. POSIX стандартын дагуу crypt() функц нь алдаа гарсан үед NULL заагч (null pointer) буцааж, алдааны дугаар (errno) оноох ёстой байдаг.
Гэвч musl libc сан нь түүхэндээ алдааг "*" тэмдэгтээр илэрхийлж байсан нь 2026 онд ийнхүү хамгийн аюултай authentication bypass-уудын нэг болон хувирав. Систем хөгжүүлэгчид функцийн буцаах утгыг зөв шалгаж хэвших, мөн системийн тохиргоонд шаардлагагүй нэвтрэх аргуудыг хааж сурах нь хичнээн чухал болохыг энэ удаагийн явдал дахин нэг санууллаа.
Эх сурвалж: Alpine Linux Security Advisory (alpinelinux.org), OpenSSH 10.6p2 Release Notes.
Сэтгэгдэл
Ачаалж байна...