iam:UpdateLoginProfile による権限昇格のおそれがある IAM ロール

IAM コンソールのパスワード変更を、承認された管理者と対象ユーザーに限定してください。

説明

iam:UpdateLoginProfile を広く許可すると、他の IAM ユーザーの既存コンソールパスワードを変更できます。強い権限を持つユーザーに対してこの権限が有効で、ログイン条件も満たす場合、そのユーザーの権限が悪用されるおそれがあります。

この操作は既存のログインプロファイルを変更するもので、新規作成の権限ではありません。パスワードを変更しても、MFA や他のログイン制限を回避できるわけではありません。

想定される影響

  • ユーザーアカウントを通じて、その権限範囲のデータやリソースが悪用されるおそれがあります。
  • 未承認のパスワード変更により、正当なユーザーのアクセスが中断する場合があります。

対処方法

  • 不要なロールから iam:UpdateLoginProfile を削除し、必要な場合は承認されたユーザー ARN に限定してください。
  • パスワード管理をヘルプデスクやセキュリティ管理者に限定し、高権限ユーザーの変更には追加承認を適用してください。
  • ログインプロファイルの変更とその後のログイン記録を確認し、MFA など既存の認証制御を維持してください。

例

ロール権限の抜粋です。必須の assume_role_policy は省略しているため、承認済みの主体だけがロールを使用できるよう別途構成してください。

変更前

hcl
resource "aws_iam_role" "example" {
  name = "cosmic"
}

resource "aws_iam_role_policy" "example" {
  name = "test_inline_policy"
  role = aws_iam_role.example.name

  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = [
          "iam:UpdateLoginProfile",
        ]
        Effect   = "Allow"
        Resource = "*"
      },
    ]
  })
}

変更後

hcl
resource "aws_iam_role" "example" {
  name = "cosmic"
}

resource "aws_iam_role_policy" "example" {
  name = "inline_policy_run_instances"
  role = aws_iam_role.example.name

  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = [
          "ec2:Describe*",
        ]
        Effect   = "Allow"
        Resource = "*"
      },
    ]
  })
}

補足:

  • 変更前: 対象ユーザーを限定せずにログインプロファイルの変更を許可します。実際のログインと影響は、対象アカウントと適用される制御に左右されます。
  • 変更後: 同じロールの例示ポリシーを EC2 の参照に限定します。他のポリシーのプロファイル変更権限も削除し、ec2:Describe* を必要な参照操作に絞ってください。

参考資料