過剰なファイル権限

過剰なファイル権限

説明

ファイルやディレクトリのアクセス制御が不適切だと、機密情報が露出したり、許可されていないユーザーが内容を変更したりするおそれがあります。アプリケーションが改ざんされた内容を実行・信頼する場合は、システム侵害につながる可能性もあります。

想定される影響

  • 情報漏えい: 権限のないユーザーが機密ファイルを読める可能性があります。
  • データ改ざん: 他のユーザーがファイルを書き換え、完全性を損なうおそれがあります。
  • システムへの影響: 重要なファイルの変更や削除によって、システムが正常に動作しなくなる可能性があります。

対処方法

  • ファイルとディレクトリの権限を必要最小限にしてください。
  • 定期的に権限を確認し、不要なアクセスを取り除いてください。

例

ファイル権限

変更前

python
# 過剰なファイル権限
import os

file_path = 'sensitive_data.txt'
with open(file_path, 'w') as f:
    f.write('Sensitive information')

# 過剰な権限で他のユーザーが上書きできます。実行の危険性はファイルの用途にも依存します。
os.chmod(file_path, 0o777)

変更後

python
# 制限したファイル権限
import os

file_path = 'sensitive_data.txt'
# 新規ファイルを0o600で原子的に作成します。既存のファイルやシンボリックリンクがあれば失敗します。
fd = os.open(file_path, os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o600)
with os.fdopen(fd, 'w') as f:
    f.write('Sensitive information')

説明

  • 変更前: 過剰な権限により他のユーザーがファイルを上書きできます。コード実行につながるかは、アプリケーションによる内容の扱いにも依存します。
  • 変更後: O_CREAT | O_EXCL と 0o600 により、作成時から権限を制限します。同じパスにファイルやシンボリックリンクがあれば、上書きせず失敗します。

ディレクトリ権限

変更前

python
# 過剰なディレクトリ権限
import os

dir_path = 'sensitive_dir'
os.mkdir(dir_path)

# 全ユーザーに読み取り・書き込み・探索権限を明示的に付与
os.chmod(dir_path, 0o777)

変更後

python
# 制限したディレクトリ権限
import os

dir_path = 'sensitive_dir'
# 作成時から所有者だけがアクセスできるように設定
os.mkdir(dir_path, mode=0o700)

説明

  • 変更前: 0o777 を明示的に付与するため、他のユーザーもディレクトリを探索し、内容を変更できます。
  • 変更後: 作成時に 0o700 を指定し、所有者だけにアクセスを制限します。作成後に権限を変更するまでの露出を避けられます。

参考資料