AWS ParallelCluster 3.7.1 がリリースされ OpenPMIx の脆弱性に対応済みのバージョンとなりました(CVE-2023-41915)

CVE-2023-41915対策済みのParallelClusterのバージョンは3.7.1以降です。
2023.09.25

2023 年 9 月 22 日に AWS ParallelCluster 3.7.1 がリリースされました。

今回のアップデートで機能追加はありません。ですが、CVE-2023-41915 の脆弱性に対応しました

Upgrade Pmix to 4.2.6 (from 3.2.3).

Release AWS ParallelCluster v3.7.1 · aws/aws-parallelcluster

AWS ParallelCluster が抱えた脆弱性

ParallelCluster ご利用の対象者には 2023 年 9 月 15 日に AWS サポートから以下の件名でメール通知がありました。

Subject: [Action Required] Upgrade AWS ParallelCluster OpenPMIx Package [AWS Account: 123456789012]

内容を要約すると、重要度の高い脆弱性が公開され影響を受けるためアップデートを推奨するといったものです。

  • OpenMPIx の脆弱性が公開された(CVE-2023-41915
  • ParallelCluster には OpenPMIx パッケージが含まれており、すべてのバージョンで影響を受ける
  • クラスターの OpenMPIx パッケージのバージョンを 4.2.6 へ更新することを推奨する
AWS のハイパフォーマンスコンピューティング (HPC) クラスターを管理するためのオープンソースツールである AWS ParallelCluster を使用している、または最近使用したことが確認できたため、ご連絡を差し上げます。AWS ParallelCluster を使用しなくなった場合は、このメッセージを無視してもかまいません。

AWS ParallelCluster には、Process Management Interface Exascale (PMIx) standard を使用できるようにするための OpenPMIx パッケージが含まれています。OpenPMIx は CVE-2023-41915 [1] を公開しました。これは AWS ParallelCluster のすべてのバージョンに影響します。これにより、サードパーティのアクターが特定のライブラリ関数の実行中に競合状態によって任意のファイルの所有権を取得する可能性があるという問題が発生する可能性があります。クラスターの PMIx パッケージのバージョンをバージョン 4.2.6 に更新して、重要なセキュリティ修正を組み込むことをお勧めします。このアップデートの方法については、インストラクションガイド [2] を参照してください。

ご質問やご不明点等ございましたら、AWS サポート [3] までお問い合わせください。

AWS Health Dashboard で同じ内容の通知を確認できます。

タイトルはEC2 Security notificationとなっています。ParallelCluster の件とはパッと見ですと見つけにくいかもしれません。影響のあるヘッドノードも、コンピュートノードも EC2 インスタンスですから何も間違ったタイトルではないのですけどね。

推奨されるアップデート方法

必要なアップデート手順は ParallelCluster の GitHub リポジトリで公開されています。2 種類の OpenMPIx のバージョンのアップデート方法が紹介されています。

課題

コンピュートノードの OpenMPIx のアップデート方法はカスタムブートストラップ処理による EC2 インスタンス起動後にコンパイルしてからインストールし直すことになります。コンピュートノードの起動から演算開始までの時間が数分単位で遅くなることを意味します。これはコンピュートノードの動作仕様の都合、毎回コンパイルからスタートするのは仕方がありません。

他の解決策としては OpenMPIx をアップデート済みのカスタム AMI を作成する方法です。カスタム AMI で運用しているユーザーは良いですが、カスタムブートストラップの処理で初期セットアップを行っているユーザーには二の足を踏む内容です。

AWS ParallelCluster 3.7.1 Relesed

CVE-2023-41915 の対策は、OpenMPIx のバージョンを 4.2.6 か 5.0.x 以上にすることでした。

2023 年 9 月 22 日にリリースされた AWS ParallelCluster 3.7.1 で、OpenMPIx のバージョンがデフォルトで 4.2.6 となりました。つまり、ParallelCluster 3.7.0 以前のすべてのバージョンで抱えた脆弱性が解消されたバージョンとなります。

バージョンを確認してみる

ParallelCluster 3.7.1 のクラスターを作成し、バージョンを確認してみます。

v3.7.1 のクラスターは以下のコンフィグで構築しました。全文は長いため折りたたみしています。

  • OS: Ubuntu 22.04
折りたたみ
Region: ap-northeast-1
Image:
  Os: ubuntu2204
Tags:
  - Key: Name
    Value: v371-cluster
# ----------------------------------------------------------------
# Head Node Settings
# ----------------------------------------------------------------
HeadNode:
  InstanceType: t3.micro
  Networking:
    ElasticIp: false
    SubnetId: subnet-0cc9326cae7a514a3
  Ssh:
    KeyName: sandbox-keypair
  LocalStorage:
    RootVolume:
      Size: 40
      Encrypted: true
      VolumeType: gp3
      Iops: 3000
      Throughput: 125
  Iam:
    AdditionalIamPolicies:
      - Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
    S3Access:
      - BucketName: hpc-dev-postinstall-files
        EnableWriteAccess: false
# ----------------------------------------------------------------
# Compute Node Settings
# ----------------------------------------------------------------
Scheduling:
  Scheduler: slurm
  SlurmSettings:
    ScaledownIdletime: 5
  SlurmQueues:
    # ------ Compute 1 ------
    - Name: queue1
      ComputeResources:
        - Name: queue1
          Instances:
            - InstanceType: c6i.large
            - InstanceType: m6i.large
          MinCount: 0
          MaxCount: 10
          DisableSimultaneousMultithreading: true
      ComputeSettings:
        LocalStorage:
          RootVolume:
            Size: 40
            Encrypted: true
            VolumeType: gp3
            Iops: 3000
            Throughput: 125
      CapacityType: SPOT
      AllocationStrategy: lowest-price
      Networking:
        SubnetIds:
          - subnet-0cc9326cae7a514a3
        PlacementGroup:
          Enabled: false
      Iam:
        AdditionalIamPolicies:
          - Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
        S3Access:
          - BucketName: hpc-dev-postinstall-files
            EnableWriteAccess: false

# ----------------------------------------------------------------
# Shared Storage Settings
# ----------------------------------------------------------------

# ----------------------------------------------------------------
#  Other Settings
# ----------------------------------------------------------------
Monitoring:
  Logs:
    CloudWatch:
      Enabled: true
      RetentionInDays: 180
      DeletionPolicy: "Delete"
  Dashboards:
    CloudWatch:
      Enabled: false

ヘッドノードへログイン

ParallelCluster 3.7.1 の AMI が利用されいます。

OpenMPIx のバージョンを確認してみました。PMIX: 4.2.6の表記を確認できました。脆弱性対応に必要なバージョンまであがった OpenMPIx がデフォルトでインストールされた状態となっています。

v3.7.1

$ /opt/pmix/bin/pmix_info
                 Package: PMIx root@ip-172-31-0-106 Distribution
                    PMIX: 4.2.6
      PMIX repo revision: gitf20e0d5d
       PMIX release date: Sep 09, 2023
           PMIX Standard: 4.2
       PMIX Standard ABI: Stable (0.0), Provisional (0.0)
                  Prefix: /opt/pmix
 Configured architecture: pmix.arch
          Configure host: ip-172-31-0-106
           Configured by: root
           Configured on: Fri Sep 15 16:03:39 UTC 2023
          Configure host: ip-172-31-0-106
  Configure command line: '--prefix=/opt/pmix'
                Built by:
                Built on: Fri Sep 15 16:04:26 UTC 2023
              Built host: ip-172-31-0-106
              C compiler: gcc
     C compiler absolute: /usr/bin/gcc
  C compiler family name: GNU
      C compiler version: "11" "." "4" "." "0"
  Internal debug support: no
              dl support: yes
     Symbol vis. support: yes
          Manpages built: yes
              MCA bfrops: v12 (MCA v2.1.0, API v1.0.0, Component v4.2.6)
              MCA bfrops: v20 (MCA v2.1.0, API v1.0.0, Component v4.2.6)
              MCA bfrops: v21 (MCA v2.1.0, API v1.0.0, Component v4.2.6)
              MCA bfrops: v3 (MCA v2.1.0, API v1.0.0, Component v4.2.6)
              MCA bfrops: v4 (MCA v2.1.0, API v1.0.0, Component v4.2.6)
              MCA bfrops: v41 (MCA v2.1.0, API v1.0.0, Component v4.2.6)
                 MCA gds: hash (MCA v2.1.0, API v1.0.0, Component v4.2.6)
                 MCA gds: ds12 (MCA v2.1.0, API v1.0.0, Component v4.2.6)
                 MCA gds: ds21 (MCA v2.1.0, API v1.0.0, Component v4.2.6)
           MCA pcompress: zlib (MCA v2.1.0, API v2.0.0, Component v4.2.6)
                 MCA pdl: pdlopen (MCA v2.1.0, API v1.0.0, Component v4.2.6)
              MCA pfexec: linux (MCA v2.1.0, API v1.0.0, Component v4.2.6)
                 MCA pif: linux_ipv6 (MCA v2.1.0, API v2.0.0, Component
                          v4.2.6)
                 MCA pif: posix_ipv4 (MCA v2.1.0, API v2.0.0, Component
                          v4.2.6)
        MCA pinstalldirs: env (MCA v2.1.0, API v1.0.0, Component v4.2.6)
        MCA pinstalldirs: config (MCA v2.1.0, API v1.0.0, Component v4.2.6)
                MCA plog: default (MCA v2.1.0, API v1.0.0, Component v4.2.6)
                MCA plog: stdfd (MCA v2.1.0, API v1.0.0, Component v4.2.6)
                MCA plog: syslog (MCA v2.1.0, API v1.0.0, Component v4.2.6)
                MCA pmdl: ompi (MCA v2.1.0, API v1.0.0, Component v4.2.6)
                MCA pmdl: oshmem (MCA v2.1.0, API v1.0.0, Component v4.2.6)
                MCA pnet: opa (MCA v2.1.0, API v1.0.0, Component v4.2.6)
                MCA preg: compress (MCA v2.1.0, API v1.0.0, Component v4.2.6)
                MCA preg: native (MCA v2.1.0, API v1.0.0, Component v4.2.6)
                MCA preg: raw (MCA v2.1.0, API v1.0.0, Component v4.2.6)
                 MCA prm: slurm (MCA v2.1.0, API v1.0.0, Component v4.2.6)
                 MCA prm: default (MCA v2.1.0, API v1.0.0, Component v4.2.6)
                MCA psec: native (MCA v2.1.0, API v1.0.0, Component v4.2.6)
                MCA psec: none (MCA v2.1.0, API v1.0.0, Component v4.2.6)
             MCA psensor: file (MCA v2.1.0, API v1.0.0, Component v4.2.6)
             MCA psensor: heartbeat (MCA v2.1.0, API v1.0.0, Component
                          v4.2.6)
              MCA pshmem: mmap (MCA v2.1.0, API v1.0.0, Component v4.2.6)
             MCA psquash: flex128 (MCA v2.1.0, API v1.0.0, Component v4.2.6)
             MCA psquash: native (MCA v2.1.0, API v1.0.0, Component v4.2.6)
               MCA pstat: linux (MCA v2.1.0, API v1.0.0, Component v4.2.6)
                 MCA ptl: client (MCA v2.1.0, API v2.0.0, Component v4.2.6)
                 MCA ptl: server (MCA v2.1.0, API v2.0.0, Component v4.2.6)
                 MCA ptl: tool (MCA v2.1.0, API v2.0.0, Component v4.2.6)

おわりに

2023 年 9 月 15 日にメール通知を確認したときにアップデートの具体的な方法が記載されている Wiki が用意されているなんてステキ!と思いました。内容を確認すると結構手間でしたので、ParallelCluster のバージョンアップを期待して待っていました。脆弱性の公表から一週間で脆弱性対応済みの ParallelCluster がリリースされました。ユーザー規模がそこまで大きくないと思われるサービスでも素早い対応で素晴らしいです。ありがたいですね。

参考