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

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

    <bug>
          <bug_id>38163</bug_id>
          
          <creation_ts>2020-02-27 18:55:01 +0300</creation_ts>
          <short_desc>bwrap игнорирует PATH при поиске запускаемых приложений</short_desc>
          <delta_ts>2024-10-30 11:41:00 +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>bubblewrap</component>
          <version>unstable</version>
          <rep_platform>x86_64</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugzilla.altlinux.org/show_bug.cgi?id=51514</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>34937</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Anton Farygin">rider</reporter>
          <assigned_to name="Yuri N. Sedunov">aris</assigned_to>
          <cc>aris</cc>
    
    <cc>cas</cc>
    
    <cc>iv</cc>
    
    <cc>lav</cc>
    
    <cc>ldv</cc>
    
    <cc>rider</cc>
    
    <cc>underwit</cc>
    
    <cc>zerg</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>188229</commentid>
    <comment_count>0</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2020-02-27 18:55:01 +0300</bug_when>
    <thetext>Нарвался при попытке использовании opam, но это точно воспроизводится для всех приложений, запускающих что-то через bwrap
В моём случае это выглядит так:

$echo $PATH
/home/rider/.opam/ocaml-base-compiler/bin:/home/rider/bin:/usr/lib/kf5/bin:/usr/local/bin:/usr/bin:/bin:/usr/games

$ bwrap --unshare-net --new-session --proc /proc --dev /dev --bind /tmp/.private/rider /tmp --setenv TMPDIR /tmp --setenv TMP /tmp --setenv TEMPDIR /tmp --setenv TEMP /tmp --tmpfs /run --ro-bind /usr /usr --ro-bind /bin /bin --ro-bind /lib /lib --ro-bind /lib64 /lib64 --ro-bind /etc /etc --ro-bind /opt /opt --ro-bind /home /home --ro-bind /var /var --ro-bind /home/rider/.opam/ocaml-base-compiler /home/rider/.opam/ocaml-base-compiler --bind /home/rider /home/rider --bind /home/rider/.cache/dune /home/rider/.cache/dune ocam
Creating root mount point
creating new namespace
forking for child
launch executable ocam
bwrap: execvp ocam: No such file or directory

$ which ocaml
/home/rider/.opam/ocaml-base-compiler/bin/ocaml

Легко воспроизводится, если попытаться запустить с помощью bwrap что-то из ~/bin/

На других дистрибутивах такого нет. 
Проблема скорее всего в нашей glibc - execvpe сбрасывает PATH для суидных бинарей.

А т.к. bwrap не работает, то проблемы запуска некоторых приложений flatpack тоже , вероятно, растут из этого места.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188230</commentid>
    <comment_count>1</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2020-02-27 18:56:03 +0300</bug_when>
    <thetext>В glibc это поведение привносится:
commit 69a1f59f8b86ee9b031c74fcd3d218605ba5be93
Author: Dmitry V. Levin &lt;ldv@altlinux.org&gt;
Date:   Mon Oct 20 11:06:36 2008 +0000

    owl-alt-sanitize-env
    
    Sanitize the environment in a paranoid way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188231</commentid>
    <comment_count>2</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2020-02-27 18:57:56 +0300</bug_when>
    <thetext>Да, в первом примере запуск bwrap был с опечаткой, но по сути ничего не меняется:
$ bwrap --unshare-net --new-session --proc /proc --dev /dev --bind /tmp/.private/rider /tmp --setenv TMPDIR /tmp --setenv TMP /tmp --setenv TEMPDIR /tmp --setenv TEMP /tmp --tmpfs /run --ro-bind /usr /usr --ro-bind /bin /bin --ro-bind /lib /lib --ro-bind /lib64 /lib64 --ro-bind /etc /etc --ro-bind /opt /opt --ro-bind /home /home --ro-bind /var /var --ro-bind /home/rider/.opam/ocaml-base-compiler /home/rider/.opam/ocaml-base-compiler --bind /home/rider /home/rider --bind /home/rider/.cache/dune /home/rider/.cache/dune ocaml
Creating root mount point
creating new namespace
forking for child
launch executable ocaml
bwrap: execvp ocaml: No such file or directory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188232</commentid>
    <comment_count>3</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2020-02-27 19:04:26 +0300</bug_when>
    <thetext>Для чего используется bwrap в opam можно почитать тут:
https://opam.ocaml.org/doc/FAQ.html#Why-does-opam-require-bwrap

2ldv: хотелось бы, что бы bwrap у нас заработал так же как, как и в других дистрибутивах.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188237</commentid>
    <comment_count>4</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2020-02-27 23:57:48 +0300</bug_when>
    <thetext>Из вышепроцитированного у меня сложилось ощущение, что это уязвимость в bwrap, причём в точности того класса, который наш ld.so затыкает.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188238</commentid>
    <comment_count>5</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2020-02-28 00:02:22 +0300</bug_when>
    <thetext>тогда  это хороший повод сходить в апстрим, если у тебя есть понимание, в чём заключается уязвимость и как её эксплуатировать.

Код в нём конечно ужасен, но именно в данном месте уязвимости быть не должно - bwrap в этом месте работает уже не под рутом.

/* This acquires the privileges that the bwrap will need it to work.
 * If bwrap is not setuid, then this does nothing, and it relies on
 * unprivileged user namespaces to be used. This case is
 * &quot;is_privileged = FALSE&quot;.
 *
 * If bwrap is setuid, then we do things in phases.
 * The first part is run as euid 0, but with fsuid as the real user.
 * The second part, inside the child, is run as the real user but with
 * capabilities.
 * And finally we drop all capabilities.
 * The reason for the above dance is to avoid having the setup phase
 * being able to read files the user can&apos;t, while at the same time
 * working around various kernel issues. See below for details.
 */</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188285</commentid>
    <comment_count>6</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2020-03-03 10:55:30 +0300</bug_when>
    <thetext>Есть предложение реализовать в bwrap самостоятельную обработку PATH по аналогии с execvpe из glibc.

Дима, как по твоему, что лучше - тащить реализацию поиска приложение из glibc в bubblewrap или откатить в нашем glibc игнорирование PATH в execvpe для суидных придожений ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189167</commentid>
    <comment_count>7</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2020-04-09 15:33:11 +0300</bug_when>
    <thetext>ping</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189819</commentid>
    <comment_count>8</comment_count>
    <who name="Sergey V Turchin">zerg</who>
    <bug_when>2020-05-08 11:40:06 +0300</bug_when>
    <thetext>Как видно, Дима предлагает самим выбрать из одного варианта.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189824</commentid>
    <comment_count>9</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2020-05-08 14:08:37 +0300</bug_when>
    <thetext>(Ответ для Sergey V Turchin на комментарий #8)
&gt; Как видно, Дима предлагает самим выбрать из одного варианта.

Тогда перенесите в него поиск файла по пути, пожалуйста, из glibc, что бы нам не лезть в старый код в самом glibc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190127</commentid>
    <comment_count>10</comment_count>
    <who name="underwit">underwit</who>
    <bug_when>2020-05-20 13:22:14 +0300</bug_when>
    <thetext>Сделал исправление. Пропустите сборку #251987</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190133</commentid>
    <comment_count>11</comment_count>
    <who name="Sergey V Turchin">zerg</who>
    <bug_when>2020-05-20 16:29:33 +0300</bug_when>
    <thetext>У меня заработало. Например, установленный из flatpak kdenlive стал запускатся,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190248</commentid>
    <comment_count>12</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2020-05-22 17:00:41 +0300</bug_when>
    <thetext>bubblewrap-0.4.1-alt2 -&gt; sisyphus:

 Wed May 20 2020 Ivan Razzhivin &lt;underwit@altlinux&gt; 0.4.1-alt2
 - fix run path (Closes: 38163)</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>