Павел, в src/mappers/digest_mapper.c#91 явно не хватает вызова memset(blk, 0, sizeof(mapper_module)): http://git.altlinux.org/gears/p/pam_pkcs11.git?p=pam_pkcs11.git;a=blob;f=pam_pkcs11/src/mappers/digest_mapper.c;h=7583cf1e40569dc793aab77599ec1f027dc74006;hb=e5c509e12919fb36afd96374ee7a8534d843a2d8#l88 Из-за этого не все поля заполняются и из-за этого не работает двухфакторная аутентификация в Сизифе и p10. Из-за этого есть риск не пройти очередной ИК, так как 2ФА есть в ПМИ. Бага критическая.
Извиняюсь, я перепутал второй и третий аргумент. Но memset() тут лучше, чем заполнять недостающие поля.
А какое поле там не заполняется? dbg_level? И почему это критично? И почему только в этом модуле? Там в каждом модуле, по-моему, такая инициализация (сделано копипастом). Расскажи, пожалуйста, как воспроизвести.
> Там в каждом модуле, по-моему, такая инициализация (сделано копипастом). По-крайней мере в opensc_mapper и openssh_mapper, на которых я всегда тестирую, инициализация точно такая же, как и в digest_mapper. При этом opensc_mapper и openssh_mapper точно работают.
(In reply to manowar@altlinux.org from comment #2) > А какое поле там не заполняется? dbg_level? Оно тоже получает случайное значение. Но главное -- указатель describer, что хорошо видно по исходнику структуры. В результате в процессе прохождения 2ФА возникает ошибка в PAM-модуле. > И почему это критично? Не понял вопроса. Почему критична CVE в модуле PAM? Или чем плоха не инициализированная память, особенно, если речь об указателе? Без рабочей 2ФА нельзя пройти ПМИ на Альт 8СП. На p9/c9f1 всё работало, а тут коллеги из Аткива подметили регрессию. > И почему только в этом модуле? > Там в каждом модуле, по-моему, такая инициализация Значит, надо везде исправлять, просто наткнулись при отладке именно в этом. А давно появилось поле describer в этой структуре? Ведь там и другие поля могут появиться. Так что лучше добавить memset(). > Расскажи, пожалуйста, как воспроизвести. Настроить 2ФА с использованием Рутокен (любого аппаратного кроме Lite и S) по статье на сайте Актив.
(In reply to manowar@altlinux.org from comment #3) > По-крайней мере в opensc_mapper и openssh_mapper, на которых я всегда > тестирую, инициализация точно такая же, как и в digest_mapper. При этом > opensc_mapper и openssh_mapper точно работают. Я бы даже не стендировал, т.к. в этом случае ошибка хорошо видна в исходнике. Достаточно собрать исправляющее задание. Я и сам могу это попозже сделать, просто очень занят сейчас. Можно сделать даже тестовое, а можно и сразу на тестирование чтобы ушло.
Согласен, что ошибка есть. Но прикол в том, что в p9/c9f1 поле describer тоже не инициализируется.
Пока подготовил вот такое исправление: http://git.altlinux.org/people/manowar/packages/?p=pam_pkcs11.git;a=shortlog;h=refs/heads/devel/no-copypast-init-mappers Для девятых бранчей этого должно быть достаточно. А вот для Сизифа нет: если уж делать новый релиз, то нужно обязательно закрыть ещё одно падение --- #39790.
Пока не хватает головы, чтобы оценить все детали. Но я вижу эту ошибку во всех дистрибутивах, даже в древних сборках свежайшего дебиана. Вижу, URL в пакете указывает на сайт, выставленный на продажу. Ошибка есть и в апстриме. Он тут, как я понимаю: https://github.com/OpenSC/pam_pkcs11 ? Это всё надо будет апстримить потом. И, не знаю, может ли пригодиться что-то из этих патчей: https://git.centos.org/rpms/pam_pkcs11/blob/c7/f/SOURCES , вроде сборка чуть посвежее.
(Ответ для Leonid Krivoshein на комментарий #8) > Пока не хватает головы, чтобы оценить все детали. Но я вижу эту ошибку во > всех дистрибутивах, даже в древних сборках свежайшего дебиана. Не может такого быть. Поле describer я сам добавлял, оно не заапстримлено. А без него инициализация, хоть и криво была сделана, но работала без дыр.
(In reply to manowar@altlinux.org from comment #9) > Не может такого быть. Поле describer я сам добавлял, оно не заапстримлено. А > без него инициализация, хоть и криво была сделана, но работала без дыр. Дело же не в том, что именно ты добавил, а в том, что любой может таким же образом что-то добавить и это может остаться незамеченным в других исходниках. Воспроизвести на p10 можно так: настроить по статье https://dev.rutoken.ru/pages/viewpage.action?pageId=66814663 . При попытке войти в систему по сертификату будет возвращаться ошибка "неверный пароль".
pam_pkcs11-0.6.12-alt1 -> sisyphus: Fri Aug 27 2021 Paul Wolneykien <manowar@altlinux> 0.6.12-alt1 - Fresh up to v0.6.12. - Fixed segfault in CRL check (thx Komarov Egor). - Fixed libpasswdqc initialization (closes: 39790). - Fixed memory corruption in mapper modules (closes: 40814).
(In reply to Repository Robot from comment #11) > pam_pkcs11-0.6.12-alt1 -> sisyphus: > - Fixed memory corruption in mapper modules (closes: 40814). Отличная работа, спасибо! Тоже потом думал, что calloc() здесь более уместен. Скопируешь сразу в p10 хотя бы тестовое?
(Ответ для Repository Robot на комментарий #11) > pam_pkcs11-0.6.12-alt1 -> sisyphus: > > Fri Aug 27 2021 Paul Wolneykien <manowar@altlinux> 0.6.12-alt1 > - Fresh up to v0.6.12. > - Fixed segfault in CRL check (thx Komarov Egor). > - Fixed libpasswdqc initialization (closes: 39790). > - Fixed memory corruption in mapper modules (closes: 40814). Спасибо!