Bug 48450

Summary: Не меняет пароль через Winbind для Windows AD
Product: Sisyphus Reporter: Evgeny Shesteperov <alimektor>
Component: sambaAssignee: Andrey Limachko <liannnix>
Status: CLOSED NOTABUG QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: aen, amakeenk, max.gordeef, sin
Version: unstable   
Hardware: x86_64   
OS: Linux   

Description Evgeny Shesteperov 2023-11-14 21:41:13 MSK
Версия

-   samba-4.18.8-alt1

Дистрибутивы

-   ALT Server 10.1, обновлённый до Sisyphus

Предусловия

-   Настроенный Windows Server 2012R2 с AD.
-   Пользователь с включенной опцией Требовать смены пароля при
    следующем входе test1
-   Пользователь с просроченным паролем test2

Шаги воспроизведения

1.  Ввести машину в домен (WinBIND):

    apt-get install -y task-auth-ad-winbind pwgen alterator-gpupdate && \
    DOMAINNAME="altad.testdoma" && \
    SERVERIP=<SERVER IP> && hostname=$(pwgen -1 -A) && \
    hostnamectl set-hostname $hostname.${DOMAINNAME} && \
    echo -e "name_servers=${SERVERIP}\nsearch_domains=${DOMAINNAME}" >> /etc/resolvconf.conf && \
    reboot

    system-auth write ad "altad.testdoma" "$(hostname --short)" "ALTAD" Admin '$Password1' --winbind --gpo && reboot

2.  На клиенте изменить уровень логирования аутентификации для
    pam_winbind:

    # sed -i "s|pam_winbind.so krb5_auth|pam_winbind.so krb5_auth pwd_change_prompt debug|g" /etc/pam.d/system-auth-winbind-only

Перезагрузить систему, изменив параметр смены паролей:

    # sed -i '/machine password timeout = 0/d' /etc/samba/smb.conf && \
    reboot

Попытаться войти в систему доменным пользователем test1 с включенной
опцией Требовать смены пароля при следующем входе:

1.  Ввести старый пароль два раза.
2.  Ввести новый пароль два раза.

Ожидаемый результат: изменения пароля и вход пользователя

Фактический результат: пароль не изменён, вход пользователя
заканчивается с сообщением Неверный пароль, попробуйте ввести ещё раз в
логах LightDM:

    [+90.19s] DEBUG: Continue authentication
    [+90.81s] DEBUG: Session pid=3231: Authentication complete with return value 4: Системная ошибка
    [+90.81s] DEBUG: Authenticate result for user test1: Системная ошибка

Аналогичная ошибка с пользователем test2, у которого просрочился пароль.

В P10 не воспроизводится.
Comment 1 Evgeny Sinelnikov 2023-11-17 17:15:38 MSK
Давайте проверим на 4.19

#333680 TESTED #5 [test-only] sisyphus libtalloc.git=2.4.1-alt1 libtdb.git=1.4.9-alt1 libtevent.git=0.15.0-alt1 libldb.git=2.8.0-alt1 samba.git=4.19.2-alt1 sssd.git=2.9.2-alt1 admc.git=0.14.0-alt1 gpui.git=0.2.37-alt1 freeipa.git=4.9.12-alt1
Comment 2 Evgeny Shesteperov 2023-11-17 21:19:16 MSK
(Ответ для Evgeny Sinelnikov на комментарий #1)
> #333680 TESTED #5 [test-only] sisyphus libtalloc.git=2.4.1-alt1
> libtdb.git=1.4.9-alt1 libtevent.git=0.15.0-alt1 libldb.git=2.8.0-alt1
> samba.git=4.19.2-alt1 sssd.git=2.9.2-alt1 admc.git=0.14.0-alt1
> gpui.git=0.2.37-alt1 freeipa.git=4.9.12-alt1

Воспроизводится согласно описанию.
Comment 3 Evgeny Sinelnikov 2023-12-06 05:34:25 MSK
Данная проблема связана отсутствием апдейтов на Windows сервере.

Ключевая точка - в samba-4.17 появилась новая функция в для смены пароля:
* https://gitlab.com/samba-team/samba/-/commit/3469895aca624cf3fcf56c612fe4469bb03a8b5d

В WHATSNEW.txt релиза 4.17.3 для этого фикса есть исправление:
* https://bugzilla.samba.org/show_bug.cgi?id=15206

    ...
       * BUG 15206: libnet: change_password() doesn't work with
         dcerpc_samr_ChangePasswordUser4().
    ...

Старая версия Windows Server 2012R2 отбрасывает этот запрос и закрывает соединение.

Данная функция описана в спецификации MS-SAMR:

[MS-SAMR]: Security Account Manager (SAM) Remote Protocol (Client-to-Server)
* https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-samr/4df07fab-1bbc-452f-8e92-7853a3c7e380
3.1.5.10.4 SamrUnicodeChangePasswordUser4 (Opnum 73)
* https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-samr/bbc1c5e5-9b81-4038-b2b9-c87d3569ed38

Исправление по безопасности вышло 13 июля 2021г.:

KB5004605: обновление добавляет защиту шифрования AES к протоколу MS-SAMR для CVE-2021-33757
* https://support.microsoft.com/ru-ru/topic/kb5004605-обновление-добавляет-защиту-шифрования-aes-к-протоколу-ms-samr-для-cve-2021-33757-e4daa133-54aa-4a5d-a921-04bb50868fc2
* https://support.microsoft.com/en-us/topic/kb5004605-update-adds-aes-encryption-protections-to-the-ms-samr-protocol-for-cve-2021-33757-e4daa133-54aa-4a5d-a921-04bb50868fc2
* https://msrc.microsoft.com/update-guide/advisory/CVE-2021-33757

Старый метод с RC4 - SamrUnicodeChangePasswordUser2 (OpNum 55)
Новый метод с AES - SamrUnicodeChangePasswordUser4 (OpNum 73)

Новости:
* https://msreview.net/windows-10/4364-microsoft-vypustila-windows-10-build-190411110-190421110-i-190431110.html
* https://msreview.net/windows-7/4367-stali-dostupny-ijulskie-nakopitelnye-obnovlenija-dlja-windows-7-i-windows-81.html
* https://www.blumira.com/sam-database-vulnerability/

Качается в паках, один из них:
July 13, 2021—KB5004285 (Security-only update)
* https://support.microsoft.com/en-us/topic/july-13-2021-kb5004285-security-only-update-76461c8b-4aef-4a94-acb1-78b6d9bdd220

Скачивание:
Обновление качества (только система безопасности) для систем Windows Server 2012 R2 на базе процессоров x64 (KB5004285), 07 2021г.
* https://www.catalog.update.microsoft.com/Search.aspx?q=KB5004285
Comment 4 Alexander Makeenkov 2024-04-12 13:32:23 MSK
(Ответ для Evgeny Sinelnikov на комментарий #3)
> Обновление качества (только система безопасности) для систем Windows Server
> 2012 R2 на базе процессоров x64 (KB5004285), 07 2021г.
> * https://www.catalog.update.microsoft.com/Search.aspx?q=KB5004285

Подтверждаю, установка этого обновления решает проблему.