no-new-privileges 保護がないコンテナー

no-new-privileges は、新しいプログラムの実行による追加権限の取得を制限します。

説明

Docker Compose の security_opt に no-new-privileges:true を設定すると、新しいプログラムの実行時に setuid・setgid やファイルの capability を通じて追加権限を得ることを制限します。この保護がなければ、こうした権限昇格の経路が残る場合があります。

この設定は既存の権限を取り除くものではなく、すべての脆弱性悪用を防ぐものでもありません。最小権限での実行と組み合わせてください。

想定される影響

  • 侵害されたプロセスが、権限を与えるプログラムの実行により、より強い権限を得る可能性があります。
  • 追加権限でアクセスできるデータやリソースへ被害が広がる場合があります。

対処方法

  • サービスの security_opt に no-new-privileges:true を指定してください。
  • 権限昇格に依存する初期化や実行処理を確認し、最小権限で動くよう調整してください。
  • privileged、追加の capability、機密性の高いマウントも確認し、変更後のアプリケーションをテストしてください。

例

実際のビルドコンテキストと service.dockerfile が必要です。

変更前

yaml
version: "3.4"
services:
  app:
    build:
      context: ./
      dockerfile: service.dockerfile
    security_opt:
      - no-new-privileges:false

新しいプログラムの実行による権限昇格を制限する保護が無効です。

変更後

yaml
version: "3.4"
services:
  app:
    build:
      context: ./
      dockerfile: service.dockerfile
    security_opt:
      - no-new-privileges:true

no-new-privileges:true を有効にしています。この制限の下で必要な初期化と実行処理が動くことを確認してください。

参考資料