public inbox for elfutils@sourceware.org
 help / color / mirror / Atom feed
From: "Adam Šulc" <sulcadam12@gmail.com>
To: Mark Wielaard <mark@klomp.org>
Cc: elfutils-devel@sourceware.org, mhabrnal@redhat.com, msuchy@redhat.com
Subject: Re: don't run elfutils as root in ABRT
Date: Mon, 22 May 2017 22:57:00 -0000	[thread overview]
Message-ID: <CAJdWHfjJkdy8KSTA7caanLXs=OqnsX+e7v31Dp8RHeP58dCECA@mail.gmail.com> (raw)
In-Reply-To: <1494333610.14615.26.camel@klomp.org>

Hi Mark,

Avast signature turned off thanks for notice :)

On Tue, May 9, 2017 at 2:40 PM, Mark Wielaard <mark@klomp.org> wrote:
> Hi Adam,
>
> Please don't include HTML mail. The mailinglist will not accept it.
> (In this case it is your HTML avast signature that looks like an
> advertisement.)
>
> On Tue, 2017-05-09 at 10:49 +0200, Adam Šulc wrote:
>> On Mon, May 8, 2017 at 2:10 PM, Mark Wielaard <mark@klomp.org> wrote:
>> > On Fri, 2017-05-05 at 18:25 +0200, Adam Šulc wrote:
>> >> I work on ABRT improvement in order to increase security related to
>> >> core backtrace generating using elfutils library.
>> >> Here is a short description of my problem:
>> >>
>> >> Goal is to not call base code in elfutils and gdb functions under root.
>> >> If you are more interested you can read more there:
>> >> https://github.com/abrt/abrt/issues/890
>> >>
>> >> We need root for opening /proc files only.
>> >
>> > And, depending on system settings, for ptrace attach or other
>> > interprocess services like reading memory with process_vm_read.
>> >
>> >> First, we open these files under root,
>> >> then we drop capabilities & privileges and finally, we generate core_backtrace.
>> >
>> > If you just drop privileges to the user owning the process you should
>> > keep having access.
>>
>> I have tried in ABRT dropping privileges & access these special files.
>> It doesn't work in my case.
>
> What exactly do you do when "dropping privileges"? If you drop
> privileges to the uid that runs the process you really should have
> access (unless something weird like yama is involved).
>

Yes this works but if set-uid program crashes (e.g. passwd) this does not work.
I mean when ABRT core backtrace runs under root and then dropping
the privileges because of security reason, it drops to the fsuid in
case of SetUID
program, that crashed, otherwise drops to the uid of the crashed program.
You can read more there if you are interested:
https://github.com/xsulca00/abrt/blob/iss%23890/src/hooks/abrt-hook-ccpp.c#L730

>> >> We have one problem that still persists, we need to pass the opened
>> >> /proc/[tid]/mem file to this function:
>> >> dwfl_linux_proc_find_elf
>> >> Because this function opens the /proc/[tid]/mem file itself, thus it
>> >> is hard coded and we cannot pass our /proc/[tid]/mem file pointer:
>> >> https://github.com/abrt/satyr/blob/master/lib/core_unwind_elfutils.c#L246
>> >> So we dont know how to pass the opened file to this function.
>> >>
>> >> Do you have any idea how to pass the open file descriptor into the
>> >> function? Or what is the best way how to achieve this?
>> >
>> > You cannot easily unless you write your own Dwfl_Callbacks.find_elf
>> > handler. But as long as you only drop privileges to the user owning the
>> > process you should be able to open that file.
>> >
>> > Note that this code path should only be called if the ELF module
>> > couldn't be found on the file system. In that case it will try to slurp
>> > it from the process memory. Does that fallback path not work as intended
>> > for your setup?
>>
>> Could you please explain what do you mean by "ELF module couldn't be
>> found on the file system" ? I would like to try that if ABRT can
>> process that or not.
>
> See the code in libdwfl/linux-proc-maps.c (dwfl_linux_proc_find_elf). If
> the module name starts with a '/' and it is a regular file then it will
> first try to just read that file from the file system. Only if it fails
> to open the file through the module path will the code try to read the
> ELF image from the process itself.

Thank you. Now I see. One more question.
Do both ways (read file from file system & read the ELF image from the process)
produce equivalent result like reading from file system gives the same output
as reading ELF image from process?

Thanks,
Adam

  reply	other threads:[~2017-05-11  9:22 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-08  8:38 Adam Šulc
2017-05-08  8:48 ` Frank Ch. Eigler
2017-05-09 12:25 ` Mark Wielaard
     [not found]   ` <CAJdWHfgTf4p7_nUq6R3n2wJVCjUG123BmQBUA-f6GguN-P3gLQ@mail.gmail.com>
2017-05-09 16:05     ` Mark Wielaard
2017-05-22 22:57       ` Adam Šulc [this message]
     [not found] <CAJdWHfgzF1JxTBzHTW3ozxqiaBxJ50dY3LdU6W3mfOtaqdy=DQ@mail.gmail.com>
2017-03-07 12:52 ` Mark Wielaard

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAJdWHfjJkdy8KSTA7caanLXs=OqnsX+e7v31Dp8RHeP58dCECA@mail.gmail.com' \
    --to=sulcadam12@gmail.com \
    --cc=elfutils-devel@sourceware.org \
    --cc=mark@klomp.org \
    --cc=mhabrnal@redhat.com \
    --cc=msuchy@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).