Bug 511143

Summary: selinux policy allows addr 0 mappings by default
Product: Red Hat Enterprise Linux 5 Reporter: Daniel Walsh <dwalsh>
Component: selinux-policyAssignee: Daniel Walsh <dwalsh>
Status: CLOSED ERRATA QA Contact: BaseOS QE <qe-baseos-auto>
Severity: high Docs Contact:
Priority: high    
Version: 5.3CC: eparis, eteo, jan.iven, jmorris, liko, ma, mishu, mjc, mmalik, ohudlick, pm-rhel, security-response-team, syeghiay, vmayatsk
Target Milestone: rcKeywords: Security
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: 444133
: 512605 (view as bug list) Environment:
Last Closed: 2009-09-02 07:58:15 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 444133    
Bug Blocks: 512605, 517830    

Comment 1 Daniel Walsh 2009-07-13 21:19:55 UTC
I have a fix for this in selinux-policy-2.4.6-252.el5

Comment 10 Eugene Teo (Security Response) 2009-07-17 10:53:30 UTC
The default SELinux policy allows processes in the unconfined domains to map low memory in the kernel. We are updating the selinux-policy package to allow the user to set the allow_unconfined_mmap_low boolean, and to prevent unconfined_t from being able to map low memory in the kernel. No Relabel or Reboot required.

Comment 14 Eugene Teo (Security Response) 2009-07-22 06:38:38 UTC
mmap_min_addr on SELinux and non-SELinux systems
http://eparis.livejournal.com/606.html

Confining the unconfined. Oxymoron?
http://danwalsh.livejournal.com/30084.html

Comment 15 Tomas Hoger 2009-07-22 08:07:08 UTC
Dan Walsh's blog post mentioned in the previous comment details selinux-policy part of the issue tracked via bug #512284.  As noted in the the blog, selinux-policy provides a boolean - allow_unconfined_mmap_low - which controls whether mmap_min_addr restriction is applied to the process.  This boolean, however, did not work as expected, as unconfined_t domain (default domain for logged-in unprivileged users) was always permitted to map low memory pages regardless of the boolean setting.  This problem with the boolean is being fixed and the fix will be included in future selinux-policy updates in RHEL5 and Fedora (see Dan's blog for NVRs).

Few notes specific to Red Hat Enterprise Linux 5:
Support for mmap_min_addr sysctl was not included in the GA version of RHEL5.  It was only added in kernel update in 5.2 (it first appeared upstream in 2.6.24).  selinux-policy was, to avoid breaking applications needing low memory pages mapping on upgrade from 5.1 to 5.2, configured to allow mmap_zero in unconfined domains and only disallow it in confined domains (e.g. various network facing services).  In 5.3, allow_unconfined_mmap_low boolean was added, but it's default value for targeted policy was changed to on, i.e. allowing mmap_zero in all unconfined domains by default.  This default boolean value is planned to remain unchanged in 5.4.

It should also be noted, that even with allow_unconfined_mmap_low boolean set to off, it is still possible for unconfined_t user to transition to other domain that is permitted to mmap_zero, as details in the Dan's blog post.  Upstream discussion on how to best address this issue is still ongoing.

Eric's proposed patches moving mmap_min_addr check out of security were submitted.  If they are accepted upstream, mmap_min_addr will be checked before LSM hooks are called.  Security modules will only be consulted if mmap_min_addr check has passed (e.g. when mmap_min_addr is 0), so SELinux may still be able to restrict mapping of the low pages / zero page for confined domains and permit mapping in unconfined, even when mmap_min_addr is 0.

Eric's patches with further discussion:
http://patchwork.kernel.org/patch/36540/
http://patchwork.kernel.org/patch/36539/

Updated version:
http://patchwork.kernel.org/patch/36650/
http://patchwork.kernel.org/patch/36649/

Comment 16 Tomas Hoger 2009-07-22 09:15:35 UTC
Further discussion of the proposed change:
http://thread.gmane.org/gmane.linux.kernel.lsm/9075

Comment 20 Tomas Hoger 2009-08-25 09:37:48 UTC
Related knowledge base article:
  http://kbase.redhat.com/faq/docs/DOC-18042

Bug tracking addition of Eric's changes to perform mmap_min_addr as root-based check instead of SELinux policy only based check - bug #517830.

Comment 21 errata-xmlrpc 2009-09-02 07:58:15 UTC
An advisory has been issued which should help the problem
described in this bug report. This report is therefore being
closed with a resolution of ERRATA. For more information
on therefore solution and/or where to find the updated files,
please follow the link below. You may reopen this bug report
if the solution does not work for you.

http://rhn.redhat.com/errata/RHBA-2009-1242.html