Bug 40814 - CVE: не инициализированная память при работе с PAM-стеком
Summary: CVE: не инициализированная память при работе с PAM-стеком
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: pam_pkcs11 (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 major
Assignee: manowar@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-08-25 23:07 MSK by Leonid Krivoshein
Modified: 2021-08-31 02:13 MSK (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Leonid Krivoshein 2021-08-25 23:07:09 MSK
Павел, в 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ФА есть в ПМИ. Бага критическая.
Comment 1 Leonid Krivoshein 2021-08-26 01:23:35 MSK
Извиняюсь, я перепутал второй и третий аргумент. Но memset() тут лучше, чем заполнять недостающие поля.
Comment 2 manowar@altlinux.org 2021-08-26 21:30:31 MSK
А какое поле там не заполняется? dbg_level? И почему это критично? И почему только в этом модуле? Там в каждом модуле, по-моему, такая инициализация (сделано копипастом).

Расскажи, пожалуйста, как воспроизвести.
Comment 3 manowar@altlinux.org 2021-08-26 21:33:49 MSK
> Там в каждом модуле, по-моему, такая инициализация (сделано копипастом).

По-крайней мере в opensc_mapper и openssh_mapper, на которых я всегда тестирую, инициализация точно такая же, как и в digest_mapper. При этом opensc_mapper и openssh_mapper точно работают.
Comment 4 Leonid Krivoshein 2021-08-26 21:47:04 MSK
(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) по статье на сайте Актив.
Comment 5 Leonid Krivoshein 2021-08-26 21:51:03 MSK
(In reply to manowar@altlinux.org from comment #3)
> По-крайней мере в opensc_mapper и openssh_mapper, на которых я всегда
> тестирую, инициализация точно такая же, как и в digest_mapper. При этом
> opensc_mapper и openssh_mapper точно работают.
Я бы даже не стендировал, т.к. в этом случае ошибка хорошо видна в исходнике. Достаточно собрать исправляющее задание. Я и сам могу это попозже сделать, просто очень занят сейчас. Можно сделать даже тестовое, а можно и сразу на тестирование чтобы ушло.
Comment 6 manowar@altlinux.org 2021-08-26 22:06:50 MSK
Согласен, что ошибка есть. Но прикол в том, что в p9/c9f1 поле describer тоже не инициализируется.
Comment 7 manowar@altlinux.org 2021-08-27 03:38:01 MSK
Пока подготовил вот такое исправление: http://git.altlinux.org/people/manowar/packages/?p=pam_pkcs11.git;a=shortlog;h=refs/heads/devel/no-copypast-init-mappers

Для девятых бранчей этого должно быть достаточно. А вот для Сизифа нет: если уж делать новый релиз, то нужно обязательно закрыть ещё одно падение --- #39790.
Comment 8 Leonid Krivoshein 2021-08-27 04:37:25 MSK
Пока не хватает головы, чтобы оценить все детали. Но я вижу эту ошибку во всех дистрибутивах, даже в древних сборках свежайшего дебиана. Вижу, URL в пакете указывает на сайт, выставленный на продажу. Ошибка есть и в апстриме. Он тут, как я понимаю: https://github.com/OpenSC/pam_pkcs11 ? Это всё надо будет апстримить потом. И, не знаю, может ли пригодиться что-то из этих патчей: https://git.centos.org/rpms/pam_pkcs11/blob/c7/f/SOURCES , вроде сборка чуть посвежее.
Comment 9 manowar@altlinux.org 2021-08-27 12:36:29 MSK
(Ответ для Leonid Krivoshein на комментарий #8)
> Пока не хватает головы, чтобы оценить все детали. Но я вижу эту ошибку во
> всех дистрибутивах, даже в древних сборках свежайшего дебиана.

Не может такого быть. Поле describer я сам добавлял, оно не заапстримлено. А без него инициализация, хоть и криво была сделана, но работала без дыр.
Comment 10 Leonid Krivoshein 2021-08-27 14:24:33 MSK
(In reply to manowar@altlinux.org from comment #9)
> Не может такого быть. Поле describer я сам добавлял, оно не заапстримлено. А
> без него инициализация, хоть и криво была сделана, но работала без дыр.
Дело же не в том, что именно ты добавил, а в том, что любой может таким же образом что-то добавить и это может остаться незамеченным в других исходниках.

Воспроизвести на p10 можно так: настроить по статье https://dev.rutoken.ru/pages/viewpage.action?pageId=66814663 . При попытке войти в систему по сертификату будет возвращаться ошибка "неверный пароль".
Comment 11 Repository Robot 2021-08-31 00:25:32 MSK
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).
Comment 12 Leonid Krivoshein 2021-08-31 00:55:18 MSK
(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 хотя бы тестовое?
Comment 13 AEN 2021-08-31 02:13:37 MSK
(Ответ для 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).

Спасибо!