The CIL compiler in SELinux 3.2 has a heap-based buffer over-read in ebitmap_match_any (called indirectly from cil_check_neverallow). NOTE: bad0a746e9f4cf260dedba5828d9645d50176aac is cited in the OSV "fixed" field but does not have a code change. References: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=32675 https://github.com/google/oss-fuzz-vulns/blob/main/vulns/selinux/OSV-2021-585.yaml Upstream patch: https://github.com/SELinuxProject/selinux/commit/bad0a746e9f4cf260dedba5828d9645d50176aac
Created libsepol tracking bugs for this issue: Affects: fedora-all [bug 1979669]
The issue was caused by a complex policy that would create and then delete an optional block. The deleted optional block would then try to be accessed. This caused the heap overflow. This was fixed in upstream patch by removing optional blocks about to be disabled. https://github.com/SELinuxProject/selinux/commit/340f0eb7f3673e8aacaf0a96cbfcd4d12a405521 and is the correct fix and code change.
selinux/libsepol is mostly local access and to perform this attack would require local access as compared to network access. An attacker would also require some form of privileges to write the policy file and compile the CIL. The availability impact is also low as this flaw would not cause a system wide or complete lack of availability. Instead the attack would only impact availability of selinux temporarily.
This issue has been addressed in the following products: Red Hat Enterprise Linux 8 Via RHSA-2021:4513 https://access.redhat.com/errata/RHSA-2021:4513
This bug is now closed. Further updates for individual products will be reflected on the CVE page(s): https://access.redhat.com/security/cve/cve-2021-36087