Note: This bug is displayed in read-only format because
the product is no longer active in Red Hat Bugzilla.
RHEL Engineering is moving the tracking of its product development work on RHEL 6 through RHEL 9 to Red Hat Jira (issues.redhat.com). If you're a Red Hat customer, please continue to file support cases via the Red Hat customer portal. If you're not, please head to the "RHEL project" in Red Hat Jira and file new tickets here. Individual Bugzilla bugs in the statuses "NEW", "ASSIGNED", and "POST" are being migrated throughout September 2023. Bugs of Red Hat partners with an assigned Engineering Partner Manager (EPM) are migrated in late September as per pre-agreed dates. Bugs against components "kernel", "kernel-rt", and "kpatch" are only migrated if still in "NEW" or "ASSIGNED". If you cannot log in to RH Jira, please consult article #7032570. That failing, please send an e-mail to the RH Jira admins at rh-issues@redhat.com to troubleshoot your issue as a user management inquiry. The email creates a ServiceNow ticket with Red Hat. Individual Bugzilla bugs that are migrated will be moved to status "CLOSED", resolution "MIGRATED", and set with "MigratedToJIRA" in "Keywords". The link to the successor Jira issue will be found under "Links", have a little "two-footprint" icon next to it, and direct you to the "RHEL project" in Red Hat Jira (issue links are of type "https://issues.redhat.com/browse/RHEL-XXXX", where "X" is a digit). This same link will be available in a blue banner at the top of the page informing you that that bug has been migrated.
Description of problem:
Sometimes libsemanage does access checks with access(2) and acts upon the results. That is racy, because there is no guarantee that the file stays the same between the access() check and open(). Moreover, access() uses the real UID and not effective for access checks, which makes it hard for setuid programs (helpers) to use libsemanage.
Steps to Reproduce:
1. call libsemanage from a setuid helper
2.
3.
Actual results:
Expected results:
Additional info:
Better solution is to just attempt the IO operation and fail gracefully if EACCESS or EPERM is returned.
(In reply to Petr Lautrbach from comment #4)
> Jakub, would you please share your concerns in the discussion about your
> report at https://marc.info/?l=selinux&m=148708503828211&w=2
I hope it's OK to reply here since I'm not on the selinux list.
I think the reason why I filed the bug back then was https://fedorahosted.org/sssd/ticket/2564
In general I don't think the bug is a big deal to us and if upstream is reluctant to this change, just close the bug. I just found it odd to check if a file exists before acting on it instead of just trying to work with the file and failing on errors..the current approach seems a bit racy to me.
About the question in the thread that asks why do we use the selinux libraries in a setuid library..the reason is that in order to pass certain certifications, no code in SSSD that deals with network connections should run as root. Therefore, the SSSD itself runs as a nonprivileged user and for actions that require root privileges (like setting a selinux context for a user) we fork our a setgid helper that actually does the work.
Created attachment 1261511[details]
Reproducer
Usage:
# gcc access.c -lsemanage
# sudo chown root a.out
# sudo chmod +s a.out
In the following configuration
UID: 1000, EIUD: 0
semanage_connect should work (fixed by patch), but semanage_access_check fails.
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.
For information on the advisory, and where to find the updated
files, follow the link below.
If the solution does not work for you, open a new bug report.
https://access.redhat.com/errata/RHBA-2017:2112