1. はじめに
- 最近出た「Dirty Frag」と「Copy Fail」の脆弱性対応の手順確認をしていたが、「Copy Fail」の対応において、古いRHELの場合、カーネルパラメータを修正してOS再起動する手順が必要とのことで、理解のため一通り試してみる。
とりあえずどんな内容かの理解のため、ざっくり検証しただけで、正確性・深堀りはあまりない。
2. 予習
- Xのこちらのポストの流れで一通り書いてある。
- RedHat による公式説明はこちら。
3. やったこと
- 検証用のRHEL8サーバを作成する。
- 検証用エクスプロイトコードを用いて、脆弱性が存在することを確認する。
- 脆弱性を塞ぐ設定変更後、脆弱性に対応できたことを確認する。
4. 手順
4.1 検証用RHEL8サーバの作成
- 2026/5/22現在、AWS東京リージョンで、EC2インスタンス起動時のクイックスタートから選択できるRHEL8(ami-0cff03b60dac55202)を起動する。
- RHEL 8.10 であることを確認する。
[ec2-user@ip-10-0-0-121 ~]$ uname -a
Linux ip-10-0-0-121.ap-northeast-1.compute.internal 4.18.0-553.120.1.el8_10.x86_64 #1 SMP Wed Apr 8 22:26:17 EDT 2026 x86_64 x86_64 x86_64 GNU/Linux
4.2 検証用エクスプロイトコードの実行
- 既に公開されている検証用コード(https://copy.failに説明のあるもの) を用いて、一般ユーザがrootを取れることを確認する。
4.3 対処設定
- 設定変更前のgrubの設定状態を確認する。
[ec2-user@ip-10-0-0-121 ~]$ sudo grubby --info=ALL
index=0
kernel="/boot/vmlinuz-4.18.0-553.120.1.el8_10.x86_64"
args="console=tty0 console=ttyS0,115200n8 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=auto $tuned_params"
root="UUID=895913b9-13ac-4ee6-934c-1d6224d5d205"
initrd="/boot/initramfs-4.18.0-553.120.1.el8_10.x86_64.img $tuned_initrd"
title="Red Hat Enterprise Linux (4.18.0-553.120.1.el8_10.x86_64) 8.10 (Ootpa)"
id="ffffffffffffffffffffffffffffffff-4.18.0-553.120.1.el8_10.x86_64"
index=1
kernel="/boot/vmlinuz-0-rescue-ffffffffffffffffffffffffffffffff"
args="console=tty0 console=ttyS0,115200n8 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=auto"
root="UUID=895913b9-13ac-4ee6-934c-1d6224d5d205"
initrd="/boot/initramfs-0-rescue-ffffffffffffffffffffffffffffffff.img"
title="Red Hat Enterprise Linux (0-rescue-ffffffffffffffffffffffffffffffff) 8.10 (Ootpa)"
id="ffffffffffffffffffffffffffffffff-0-rescue"
- 現在、カーネルに渡されているオプションを確認する。
[ec2-user@ip-10-0-0-121 ~]$ cat /proc/cmdline
BOOT_IMAGE=(hd0,gpt3)/boot/vmlinuz-4.18.0-553.120.1.el8_10.x86_64 root=UUID=895913b9-13ac-4ee6-934c-1d6224d5d205 console=tty0 console=ttyS0,115200n8 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=auto
- Copy Fail 脆弱性対策のコマンド(カーネルパラメータ変更)を実行する。
[ec2-user@ip-10-0-0-121 ~]$ sudo grubby --update-kernel ALL --args="initcall_blacklist=algif_aead_init"
- 設定変更後のgrubの設定状態を見て、argsの行が変更されていることを確認する(grubの設定は次回OS再起動時に反映)。
[ec2-user@ip-10-0-0-121 ~]$ sudo grubby --info=ALL
index=0
kernel="/boot/vmlinuz-4.18.0-553.120.1.el8_10.x86_64"
args="console=tty0 console=ttyS0,115200n8 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=auto initcall_blacklist=algif_aead_init $tuned_params"
root="UUID=895913b9-13ac-4ee6-934c-1d6224d5d205"
initrd="/boot/initramfs-4.18.0-553.120.1.el8_10.x86_64.img $tuned_initrd"
title="Red Hat Enterprise Linux (4.18.0-553.120.1.el8_10.x86_64) 8.10 (Ootpa)"
id="ffffffffffffffffffffffffffffffff-4.18.0-553.120.1.el8_10.x86_64"
index=1
kernel="/boot/vmlinuz-0-rescue-ffffffffffffffffffffffffffffffff"
args="console=tty0 console=ttyS0,115200n8 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=auto initcall_blacklist=algif_aead_init"
root="UUID=895913b9-13ac-4ee6-934c-1d6224d5d205"
initrd="/boot/initramfs-0-rescue-ffffffffffffffffffffffffffffffff.img"
title="Red Hat Enterprise Linux (0-rescue-ffffffffffffffffffffffffffffffff) 8.10 (Ootpa)"
id="ffffffffffffffffffffffffffffffff-0-rescue"
-
OSを再起動して、設定変更を反映させる。
-
OS再起動完了後、カーネルに渡されているオプションを再確認する。algif_aead_initの設定が追加されていることを確認する。
[ec2-user@ip-10-0-0-121 ~]$ cat /proc/cmdline
BOOT_IMAGE=(hd0,gpt3)/boot/vmlinuz-4.18.0-553.120.1.el8_10.x86_64 root=UUID=895913b9-13ac-4ee6-934c-1d6224d5d205 console=tty0 console=ttyS0,115200n8 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=auto initcall_blacklist=algif_aead_init
- 検証用エクスプロイトコードを再実行し、失敗(rootが取れない)することを確認する。
5. 所感
- また、ただやってみただけになってしまったが、人に説明したりデモしたりするにあたり、多少の知識が身についた気がする。
