• Jann Horn's avatar
    LSM: SafeSetID: verify transitive constrainedness · 4f72123d
    Jann Horn authored
    Someone might write a ruleset like the following, expecting that it
    securely constrains UID 1 to UIDs 1, 2 and 3:
    
        1:2
        1:3
    
    However, because no constraints are applied to UIDs 2 and 3, an attacker
    with UID 1 can simply first switch to UID 2, then switch to any UID from
    there. The secure way to write this ruleset would be:
    
        1:2
        1:3
        2:2
        3:3
    
    , which uses "transition to self" as a way to inhibit the default-allow
    policy without allowing anything specific.
    
    This is somewhat unintuitive. To make sure that policy authors don't
    accidentally write insecure policies because of this, let the kernel verify
    that a new ruleset does not contain any entries that are constrained, but
    transitively unconstrained.
    Signed-off-by: default avatarJann Horn <jannh@google.com>
    Signed-off-by: default avatarMicah Morton <mortonm@chromium.org>
    4f72123d
securityfs.c 5.84 KB