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

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

    <bug>
          <bug_id>40621</bug_id>
          
          <creation_ts>2021-07-31 03:04:44 +0300</creation_ts>
          <short_desc>Enable RPM signature verification</short_desc>
          <delta_ts>2024-08-06 17:28:18 +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>rpm</component>
          <version>unstable</version>
          <rep_platform>x86</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Vitaly Chikunov">vt</reporter>
          <assigned_to name="placeholder@altlinux.org">placeholder</assigned_to>
          <cc>alexey.tourbin</cc>
    
    <cc>at</cc>
    
    <cc>glebfm</cc>
    
    <cc>imz</cc>
    
    <cc>iv</cc>
    
    <cc>lav</cc>
    
    <cc>ldv</cc>
    
    <cc>manowar</cc>
    
    <cc>placeholder</cc>
    
    <cc>vt</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>201103</commentid>
    <comment_count>0</comment_count>
    <who name="Vitaly Chikunov">vt</who>
    <bug_when>2021-07-31 03:04:44 +0300</bug_when>
    <thetext>Сейчас проверка подписей отключена, на сколько я понимаю (возможно ошибаюсь), из-за того, что у нас ключи хранятся в другом месте - не в базе rpm в виде псевдо-пакетов.

Предлагаю сделать поддержку нашего местоположения ключей и включить проверку подписей в RPM пакетах.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201109</commentid>
    <comment_count>1</comment_count>
    <who name="">alexey.tourbin</who>
    <bug_when>2021-07-31 11:19:51 +0300</bug_when>
    <thetext>Verifying individual signatures is redundant.  When you update from a repo, its release file is signed.  The release file references pkglist, and pkglist references individual packages.  Since those references must be cryptographically-strong, there is no point in verifying the signatures of each individual package.  The top-level signature covers it all.

As an analogy, in git, you don&apos;t sign individual blobs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202945</commentid>
    <comment_count>2</comment_count>
    <who name="Vitaly Chikunov">vt</who>
    <bug_when>2021-09-20 03:00:40 +0300</bug_when>
    <thetext>Есть, как минимум, два не покрытых сценария.
1) Инсталляция в обход `apt-get` через `rpm -i`. Например, в `epm` используется `rpm -U`.
2) Желание пользователя подтвердить принадлежность скачанного когда-то или откуда-то rpm&apos;а. Коме того, если пакет в репозитории обновился, то pkglist уже не ссылается на этот rpm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203040</commentid>
    <comment_count>3</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2021-09-21 18:58:49 +0300</bug_when>
    <thetext>(In reply to Vitaly Chikunov from comment #2)
&gt; Есть, как минимум, два не покрытых сценария.

Наверняка найдутся и другие редкие сценарии.
Например, для girar я сделал обёртку под названием alt-rpmkeys-checksig, которая поддерживает и rpm-4.0.4, и более новый rpm.

&gt; 1) Инсталляция в обход `apt-get` через `rpm -i`.

Есть много способов испортить себе систему в обход `apt-get`.
Просто не надо использовать `rpm -i` для обработки untrusted input.

&gt; Например, в `epm` используется `rpm -U`.

В таком случае `epm` должен обеспечивать проверку того, что отдаётся на вход `rpm -U`.

&gt; 2) Желание пользователя подтвердить принадлежность скачанного когда-то или
&gt; откуда-то rpm&apos;а. Коме того, если пакет в репозитории обновился, то pkglist
&gt; уже не ссылается на этот rpm.

Пользователи, желающие странного, найдут способ этого добиться.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208609</commentid>
    <comment_count>4</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2022-03-18 12:18:54 +0300</bug_when>
    <thetext>(Ответ для Dmitry V. Levin на комментарий #3)
&gt; (In reply to Vitaly Chikunov from comment #2)
&gt; &gt; Есть, как минимум, два не покрытых сценария.
&gt; 
&gt; Наверняка найдутся и другие редкие сценарии.
&gt; Например, для girar я сделал обёртку под названием alt-rpmkeys-checksig,
&gt; которая поддерживает и rpm-4.0.4, и более новый rpm.
&gt; 
&gt; &gt; 1) Инсталляция в обход `apt-get` через `rpm -i`.
&gt; 
&gt; Есть много способов испортить себе систему в обход `apt-get`.
&gt; Просто не надо использовать `rpm -i` для обработки untrusted input.
&gt; 
&gt; &gt; Например, в `epm` используется `rpm -U`.
&gt; 
&gt; В таком случае `epm` должен обеспечивать проверку того, что отдаётся на вход
&gt; `rpm -U`.
Как я понимаю, что сейчас мы имеем только доверие к репозиторию, это проверка на уровне apt.
То есть подпись самого пакета не проверяется ни в каком случае.
Существует ли способ включить для rpm эту проверку, чтобы можно было устанавливать доверенные пакеты,
поставляемые вне репозиториев? 

То есть тут речь о сторонних поставщиках решений для ALT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249773</commentid>
    <comment_count>5</comment_count>
    <who name="manowar@altlinux.org">manowar</who>
    <bug_when>2024-08-06 17:28:18 +0300</bug_when>
    <thetext>(Ответ для Vitaly Lipatov на комментарий #4)
&gt; Существует ли способ включить для rpm эту проверку, чтобы можно было
&gt; устанавливать доверенные пакеты,
&gt; поставляемые вне репозиториев? 

Похоже, что для этого достаточно обнулить тег %__vsflags (записать туда 0x00000),
и выставить ещё один тег --- %_keyringpath (например, в /var/lib/rpm),
а затем по этому пути положить один или несколько файлов *.key,
с публичными ключами в формате PGP (GPG). Они у нас лежат в пакете
alt-gpgkeys. После этого программа rpmverify начинает работать как
ожидается. Причём, в режиме -vv показывает информацию о контрольных
суммах и подписях, результатах их проверки.

# tail -n +486 /usr/lib/rpm/macros | head -2
%__vsflags		0x00000
%_keyringpath		/var/lib/rpm

gpg --import /usr/lib/alt-gpgkeys/pubring.gpg

gpg --armor --export ff979dedda2773bb &gt;/var/lib/rpm/alt-sisyphus.key

# /usr/bin/rpmverify -vv zlib
...
D: loading keyring from pubkeys in /var/lib/rpm/*.key
ufdio:       1 reads,     2407 total bytes in 0.000002 secs
D: added key /var/lib/rpm/alt-sisyphus.key to keyring
D:  read h#     231 Заголовок V4 RSA/SHA512 Signature, key ID da2773bb: OK
D: ========== +++ zlib-1.3.1-alt1 x86_64/linux 0x0
D:  read h#      75 Заголовок V4 RSA/SHA512 Signature, key ID da2773bb: OK
D:  Requires: libc.so.6(GLIBC_2.14)(64bit)                  ДА (db provides)
D:  Requires: libc.so.6(GLIBC_2.2.5)(64bit)                 ДА (db provides)
D:  Requires: libc.so.6(GLIBC_2.3.4)(64bit)                 ДА (db provides)
D:  Requires: libc.so.6(GLIBC_2.4)(64bit)                   ДА (db provides)
D:  Requires: rtld(GNU_HASH)                                ДА (db provides)
D:  Requires: rpmlib(PayloadIsLzma)                         ДА (rpmlib provides)
D: Conflicts: libxml2 &lt; 1:2.7.7                             НЕT 
.........    /lib64/libz.so.1
ufdio:       2 reads,   117312 total bytes in 0.000096 secs
.........    /lib64/libz.so.1.3.1
.........    /usr/share/doc/zlib-1.3.1
ufdio:       2 reads,     1002 total bytes in 0.000290 secs
.........  d /usr/share/doc/zlib-1.3.1/LICENSE
ufdio:       2 reads,     5317 total bytes in 0.000205 secs
.........  d /usr/share/doc/zlib-1.3.1/README
...</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>