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 对组和其他用户而言很宽,但当前的情况会创建临时目录。