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)
   }
  } 

この例では、パーミッション '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 はもはや問題を報告していません。

関連チェッカー