SV.PERMS.WIDE

权限过宽

向文件夹或文件赋予其他用户可读取/可写入/可执行或组可写入的权限时,便会触发 SV.PERMS.WIDE。任何匹配 ****w*rwx 的权限集均会视为有安全漏洞的权限。

漏洞与风险

以上权限会造成安全威胁,因为非预期用户可读取或修改资源。尽管这种分配在某些情况下可能是有意为之,但也可能是错误实施所致,从而给资源造成安全漏洞。

缓解与预防

如果为组和其他用户设置正确的权限,或者使用以下 java.nio 方法来创建临时文件或文件夹,则可防止此问题:
  • createTempFile
  • createTempDirectory

漏洞代码示例 1

复制
  public class FilePosix {    
    public static void test() throws Exception {         
     Path path = Paths.get("/home/ubuntu/test/posix-file.txt");         
     if (!Files.exists(path)) Files.createFile(path);  
     String s = "rwxrwxr-x";
     Set<PosixFilePermission> perms = PosixFilePermissions.fromString(s); // matched to '****w*rwx' >> NG
     Files.setPosixFilePermissions(path, perms)
   }
  } 

Klocwork 在第 4 行报告 SV.PERMS.WIDE 缺陷,这表示“文件/文件夹 /home/ubuntu/test/posix-file.txt 的 rwxrwxr-x 权限过宽”。向文件分配的权限过宽,因为这些权限向所有者以外的个人提供读取、写入或执行访问权限。

修正代码示例 1

复制
  public class FilePosix {     
   public static void test() throws Exception {          
    Path path = Paths.get("/home/ubuntu/test/posix-file.txt");          
    if (!Files.exists(path)) Files.createFile(path);    
    String s = "rwx------";  
    Set<PosixFilePermission> perms = PosixFilePermissions.fromString(s); // Good, no defect  
    Files.setPosixFilePermissions(path, perms)
   }
  } 

在此示例中,Klocwork 不再报告该问题,因为权限 rwx------ 仅允许所有者进行读取、写入和执行操作。组和其他用户无法进行这些操作。

漏洞代码示例 2

复制
  public class FilePosix {    
  public static void test() throws Exception {   
    Path path = Paths.get("/home/ubuntu/test");           
    String s = "rwxrwxr-x";
    Set<PosixFilePermission> perms = PosixFilePermissions.fromString(s); // matched to '****w*rwx' -> Defect found!  
    FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms)
    Files.createDirectory(path, attr);
   }
  }

Klocwork 在第 7 行报告 SV.PERMS.WIDE 缺陷,这表示“文件/文件夹 /home/ubuntu/test 的 rwxrwxr-x 权限过宽”。权限 rwxrwxr-x 允许组进行读取、写入和执行操作,并允许其他用户进行读取和执行操作,这对新目录而言过宽。

修正代码示例 2

复制
  public class FilePosix {     
   public static void test() throws Exception {    
    Path path = Paths.get("/home/ubuntu/test");            
    String s = "rwxrwxr-x";
    Set<PosixFilePermission> perms = PosixFilePermissions.fromString(s);  
    FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms);   
    Files.createTempDirectory(path, attr);
   }
  }

在此示例中,Klocwork 不再报告该问题,因为尽管权限 rwxrwxr-x 对组和其他用户而言很宽,但当前的情况会创建临时目录。

相关检查器

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。