説明
ファイルやディレクトリの権限を広く許可すると、他のユーザーが重要なファイルを読み書きできるおそれがあります。java.nio.file.Files.setPosixFilePermissions()に不適切な権限を渡した場合も、機密データが公開される可能性があります。
想定される影響
- 情報漏えい: 読み取り権限によって、パスワード、APIキー、ユーザー情報が漏えいするおそれがあります。
- ファイルの改ざん:
rw-rw-rw-などの広い書き込み権限で内容を変更できます。削除できるかは親ディレクトリの権限などにも依存します。 - 権限昇格: 重要な実行ファイルを変更し、別の主体の権限で悪意のあるコードを動かされる可能性があります。
対処方法
- 最小権限を適用してください。機密情報を含む通常ファイルは、必要に応じて所有者だけが読み書きできる
rw-------にしてください。ディレクトリの探索には実行権限が必要なので、同じ文字列を一律に適用しないでください。 - 所有者だけのアクセスが適切なファイルには、
java.nio.file.attribute.PosixFilePermissions.fromString("rw-------")を使ってください。 - 設定、ログ、一時ファイルを不正なアクセスから保護してください。
例
POSIX権限に対応するファイルシステム上で、既存の通常ファイルの権限を変更する例です。アプリケーションが管理するパスを使い、他のユーザーがファイルや親ディレクトリを変更したり、シンボリックリンクで置き換えたりできないようにしてください。
変更前
java
import java.nio.file.*;
import java.nio.file.attribute.*;
import java.io.IOException;
import java.util.Set;
public class InsecureFilePermission {
public static void main(String[] args) throws IOException {
Path path = Paths.get("/tmp/sensitive-data.txt");
// すべてのユーザーに読み書きを許可
Set<PosixFilePermission> permissions = PosixFilePermissions.fromString("rw-rw-rw-");
Files.setPosixFilePermissions(path, permissions);
}
}
変更後
java
import java.nio.file.*;
import java.nio.file.attribute.*;
import java.io.IOException;
import java.util.Set;
public class SecureFilePermission {
public static void main(String[] args) throws IOException {
Path path = Paths.get("/tmp/sensitive-data.txt");
// 所有者だけに読み書きを許可(rw-------)
Set<PosixFilePermission> permissions = PosixFilePermissions.fromString("rw-------");
Files.setPosixFilePermissions(path, permissions);
}
}
説明:
- 変更前:
rw-rw-rw-を設定し、すべてのユーザーにファイルの読み書きを許可します。 - 変更後:
rw-------を設定し、通常の読み書き権限を所有者に限定します。