SV.PERMS.WIDE
広すぎるパーミッション
SV.PERMS.WIDE は、他のユーザーによる読み取り/作成/実行可能なパーミッション、またはグループによる作成可能なパーミッションが、フォルダーまたはファイルに付与されたときにトリガーされます。****w*rwx に一致する一連のパーミッションは、セキュリティが脆弱なパーミッションと見なされます。
脆弱性とリスク
上記のパーミッションでは、故意ではないユーザーがリソースを読み取るか変更する可能性があるため、セキュリティ上の脅威をもたらします。この割り当ては故意である場合もありますが、誤って実装されている場合があり、リソースにセキュリティの脆弱性をまねく可能性があります。
軽減と防止
- 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);
}
}
この例では、パーミッション 'rwx ------' は所有者だけに読み取り、作成、および実行を許可しているため、Klocwork は問題を報告しなくなりました。グループとその他はそうすることを妨げられます。
脆弱コード例 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);
}
}
この例では、パーミッション 'rwxrwxr-x' はグループとその他にとって広くなっていますが、この場合では一時ディレクトリが作成されるため、Klocwork はもはや問題を報告していません。
関連チェッカー
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。