<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>40814</bug_id>
          
          <creation_ts>2021-08-25 23:07:09 +0300</creation_ts>
          <short_desc>CVE: не инициализированная память при работе с PAM-стеком</short_desc>
          <delta_ts>2021-08-31 02:13:37 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>pam_pkcs11</component>
          <version>unstable</version>
          <rep_platform>x86_64</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Leonid Krivoshein">klark</reporter>
          <assigned_to name="manowar@altlinux.org">manowar</assigned_to>
          <cc>aen</cc>
    
    <cc>boyarsh</cc>
    
    <cc>manowar</cc>
    
    <cc>nbr</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>202058</commentid>
    <comment_count>0</comment_count>
    <who name="Leonid Krivoshein">klark</who>
    <bug_when>2021-08-25 23:07:09 +0300</bug_when>
    <thetext>Павел, в 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ФА есть в ПМИ. Бага критическая.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202066</commentid>
    <comment_count>1</comment_count>
    <who name="Leonid Krivoshein">klark</who>
    <bug_when>2021-08-26 01:23:35 +0300</bug_when>
    <thetext>Извиняюсь, я перепутал второй и третий аргумент. Но memset() тут лучше, чем заполнять недостающие поля.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202073</commentid>
    <comment_count>2</comment_count>
    <who name="manowar@altlinux.org">manowar</who>
    <bug_when>2021-08-26 21:30:31 +0300</bug_when>
    <thetext>А какое поле там не заполняется? dbg_level? И почему это критично? И почему только в этом модуле? Там в каждом модуле, по-моему, такая инициализация (сделано копипастом).

Расскажи, пожалуйста, как воспроизвести.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202074</commentid>
    <comment_count>3</comment_count>
    <who name="manowar@altlinux.org">manowar</who>
    <bug_when>2021-08-26 21:33:49 +0300</bug_when>
    <thetext>&gt; Там в каждом модуле, по-моему, такая инициализация (сделано копипастом).

По-крайней мере в opensc_mapper и openssh_mapper, на которых я всегда тестирую, инициализация точно такая же, как и в digest_mapper. При этом opensc_mapper и openssh_mapper точно работают.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202075</commentid>
    <comment_count>4</comment_count>
    <who name="Leonid Krivoshein">klark</who>
    <bug_when>2021-08-26 21:47:04 +0300</bug_when>
    <thetext>(In reply to manowar@altlinux.org from comment #2)
&gt; А какое поле там не заполняется? dbg_level?
Оно тоже получает случайное значение. Но главное -- указатель describer, что хорошо видно по исходнику структуры. В результате в процессе прохождения 2ФА возникает ошибка в PAM-модуле.

&gt; И почему это критично?
Не понял вопроса. Почему критична CVE в модуле PAM? Или чем плоха не инициализированная память, особенно, если речь об указателе? Без рабочей 2ФА нельзя пройти ПМИ на Альт 8СП. На p9/c9f1 всё работало, а тут коллеги из Аткива подметили регрессию.

&gt; И почему только в этом модуле?
&gt; Там в каждом модуле, по-моему, такая инициализация
Значит, надо везде исправлять, просто наткнулись при отладке именно в этом. А давно появилось поле describer в этой структуре? Ведь там и другие поля могут появиться. Так что лучше добавить memset().

&gt; Расскажи, пожалуйста, как воспроизвести.
Настроить 2ФА с использованием Рутокен (любого аппаратного кроме Lite и S) по статье на сайте Актив.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202076</commentid>
    <comment_count>5</comment_count>
    <who name="Leonid Krivoshein">klark</who>
    <bug_when>2021-08-26 21:51:03 +0300</bug_when>
    <thetext>(In reply to manowar@altlinux.org from comment #3)
&gt; По-крайней мере в opensc_mapper и openssh_mapper, на которых я всегда
&gt; тестирую, инициализация точно такая же, как и в digest_mapper. При этом
&gt; opensc_mapper и openssh_mapper точно работают.
Я бы даже не стендировал, т.к. в этом случае ошибка хорошо видна в исходнике. Достаточно собрать исправляющее задание. Я и сам могу это попозже сделать, просто очень занят сейчас. Можно сделать даже тестовое, а можно и сразу на тестирование чтобы ушло.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202077</commentid>
    <comment_count>6</comment_count>
    <who name="manowar@altlinux.org">manowar</who>
    <bug_when>2021-08-26 22:06:50 +0300</bug_when>
    <thetext>Согласен, что ошибка есть. Но прикол в том, что в p9/c9f1 поле describer тоже не инициализируется.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202080</commentid>
    <comment_count>7</comment_count>
    <who name="manowar@altlinux.org">manowar</who>
    <bug_when>2021-08-27 03:38:01 +0300</bug_when>
    <thetext>Пока подготовил вот такое исправление: http://git.altlinux.org/people/manowar/packages/?p=pam_pkcs11.git;a=shortlog;h=refs/heads/devel/no-copypast-init-mappers

Для девятых бранчей этого должно быть достаточно. А вот для Сизифа нет: если уж делать новый релиз, то нужно обязательно закрыть ещё одно падение --- #39790.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202081</commentid>
    <comment_count>8</comment_count>
    <who name="Leonid Krivoshein">klark</who>
    <bug_when>2021-08-27 04:37:25 +0300</bug_when>
    <thetext>Пока не хватает головы, чтобы оценить все детали. Но я вижу эту ошибку во всех дистрибутивах, даже в древних сборках свежайшего дебиана. Вижу, URL в пакете указывает на сайт, выставленный на продажу. Ошибка есть и в апстриме. Он тут, как я понимаю: https://github.com/OpenSC/pam_pkcs11 ? Это всё надо будет апстримить потом. И, не знаю, может ли пригодиться что-то из этих патчей: https://git.centos.org/rpms/pam_pkcs11/blob/c7/f/SOURCES , вроде сборка чуть посвежее.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202083</commentid>
    <comment_count>9</comment_count>
    <who name="manowar@altlinux.org">manowar</who>
    <bug_when>2021-08-27 12:36:29 +0300</bug_when>
    <thetext>(Ответ для Leonid Krivoshein на комментарий #8)
&gt; Пока не хватает головы, чтобы оценить все детали. Но я вижу эту ошибку во
&gt; всех дистрибутивах, даже в древних сборках свежайшего дебиана.

Не может такого быть. Поле describer я сам добавлял, оно не заапстримлено. А без него инициализация, хоть и криво была сделана, но работала без дыр.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202091</commentid>
    <comment_count>10</comment_count>
    <who name="Leonid Krivoshein">klark</who>
    <bug_when>2021-08-27 14:24:33 +0300</bug_when>
    <thetext>(In reply to manowar@altlinux.org from comment #9)
&gt; Не может такого быть. Поле describer я сам добавлял, оно не заапстримлено. А
&gt; без него инициализация, хоть и криво была сделана, но работала без дыр.
Дело же не в том, что именно ты добавил, а в том, что любой может таким же образом что-то добавить и это может остаться незамеченным в других исходниках.

Воспроизвести на p10 можно так: настроить по статье https://dev.rutoken.ru/pages/viewpage.action?pageId=66814663 . При попытке войти в систему по сертификату будет возвращаться ошибка &quot;неверный пароль&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202155</commentid>
    <comment_count>11</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2021-08-31 00:25:32 +0300</bug_when>
    <thetext>pam_pkcs11-0.6.12-alt1 -&gt; sisyphus:

 Fri Aug 27 2021 Paul Wolneykien &lt;manowar@altlinux&gt; 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).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202156</commentid>
    <comment_count>12</comment_count>
    <who name="Leonid Krivoshein">klark</who>
    <bug_when>2021-08-31 00:55:18 +0300</bug_when>
    <thetext>(In reply to Repository Robot from comment #11)
&gt; pam_pkcs11-0.6.12-alt1 -&gt; sisyphus:
&gt;  - Fixed memory corruption in mapper modules (closes: 40814).
Отличная работа, спасибо! Тоже потом думал, что calloc() здесь более уместен. Скопируешь сразу в p10 хотя бы тестовое?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202158</commentid>
    <comment_count>13</comment_count>
    <who name="AEN">aen</who>
    <bug_when>2021-08-31 02:13:37 +0300</bug_when>
    <thetext>(Ответ для Repository Robot на комментарий #11)
&gt; pam_pkcs11-0.6.12-alt1 -&gt; sisyphus:
&gt; 
&gt;  Fri Aug 27 2021 Paul Wolneykien &lt;manowar@altlinux&gt; 0.6.12-alt1
&gt;  - Fresh up to v0.6.12.
&gt;  - Fixed segfault in CRL check (thx Komarov Egor).
&gt;  - Fixed libpasswdqc initialization (closes: 39790).
&gt;  - Fixed memory corruption in mapper modules (closes: 40814).

Спасибо!</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>