
An Ansible Playbook to mitigate the vulnerability CVE-2026-31431 on RHEL-based and Debian-based OSes.
Debian/Ubuntu 및 RHEL/Rocky/AlmaLinux 시스템에서 CVE-2026-31431 (AF_ALG) 커널 모듈 완화를 적용하고 롤백하는 Ansible 플레이북입니다.
이 플레이북은 취약한 algif_aead 커널 모듈을 비활성화하여 CVE-2026-31431을 완화합니다:
grubby를 사용하여 커널 initcall 블랙리스트 인자를 추가합니다⚠️ 중요: 이 플레이북은 서버를 자동으로 재부팅하지 않습니다. 재부팅이 필요한 경우 알림 메시지를 표시하여 운영자가 유지보수 시간에 재부팅을 예약할 수 있도록 합니다.
샘플 구성 파일은 examples/ 디렉토리에 제공됩니다:
# 샘플 인벤토리 복사
cp examples/inventory/hosts.ini inventory/hosts.ini
# 샘플 ansible 구성 복사 (선택 사항)
cp examples/ansible.cfg ansible.cfg
자세한 사용자 지정 지침은 examples/README.md를 참조하세요.
서버 정보로 inventory/hosts.ini를 편집하세요:
[servers]
server1.example.com
server2.example.com ansible_host=192.168.1.50
[servers:vars]
ansible_user=admin
ansible_become=true
ansible all -m ping
ansible-playbook mitigation-playbook.yaml
인벤토리의 모든 호스트에 완화를 적용하려면:
ansible-playbook mitigation-playbook.yaml
특정 호스트 또는 그룹에 적용하려면:
ansible-playbook mitigation-playbook.yaml --limit webservers
완화를 롤백(제거)하려면:
ansible-playbook mitigation-playbook.yaml -e "rollback=true"
또는 rollback 태그를 사용하세요:
ansible-playbook mitigation-playbook.yaml --tags rollback -e "rollback=true"
더 이상 사용되지 않는 systemd drop-in 파일을 제거하려면 (이 완화의 이전 버전에서 마이그레이션하는 경우):
ansible-playbook mitigation-playbook.yaml -e "run_systemd_cleanup=true"
TASK [CVE-2026-31431 Summary (Debian)] ****************************************
ok: [server1] => {
"msg": [
"===== CVE-2026-31431 SUMMARY — server1 =====",
"Action: apply",
"Module loaded (pre): False",
"Module loaded (post): False",
"Reboot required: False"
]
}
TASK [Remind operator to reboot (RHEL)] ****************************************
ok: [server2] => {
"msg": "REMINDER: Kernel args changed. Reboot required to activate mitigation."
}
TASK [CVE-2026-31431 Summary (Red Hat)] ****************************************
ok: [server2] => {
"msg": [
"===== CVE-2026-31431 SUMMARY — server2 =====",
"Action: apply",
"Kernel arg active (pre): False",
"Kernel arg active (post): False",
"Reboot required: True"
]
}
TASK [Remind to reboot if required (Red Hat)] **********************************
ok: [server2] => {
"msg": "REMINDER: A reboot is required to activate/deactivate the mitigation on this Red Hat-based host."
}
| OS 계열 | 재부팅 필요 조건 | 동작 |
|---|---|---|
| Debian/Ubuntu | 모듈이 "사용 중"이어서 언로드할 수 없는 경우 | 알림만 표시 |
| RHEL/Rocky/Alma | Grubby가 커널 인자를 변경한 경우 | 알림만 표시 |
이 플레이북은 운영자가 유지보수 시간을 완전히 제어할 수 있도록 자동으로 재부팅하지 않도록 설계되었습니다.
mitigation - 완화 적용 작업만 실행rollback - 롤백 작업만 실행systemd-cleanup - systemd 정리 작업만 실행예시:
# 완화 작업만 실행
ansible-playbook -i inventory/hosts.ini mitigation-playbook.yaml --tags mitigation
# 롤백 작업만 실행
ansible-playbook -i inventory/hosts.ini mitigation-playbook.yaml --tags rollback -e "rollback=true"
플레이북 실행 후 (프롬프트가 표시되면 재부팅 후) 완화가 활성화되었는지 확인하세요:
# 모듈이 블랙리스트에 등록되었는지 확인
cat /etc/modprobe.d/disable-algif.conf
# 모듈이 로드되었는지 확인 (아무것도 반환되지 않아야 함)
lsmod | grep algif_aead
# 커널 인자가 있는지 확인
grep initcall_blacklist /proc/cmdline
# 다음과 유사한 출력이 표시되어야 합니다:
# ... initcall_blacklist=algif_aead_init ...
MIT 라이선스 - 자세한 내용은 LICENSE 파일을 참조하세요
기여를 환영합니다! 이슈와 풀 리퀘스트를 제출해 주세요.
이 플레이북은 다음 소스에서 영감을 받아 작성되었습니다:
이 플레이북은 있는 그대로 제공됩니다. 프로덕션 시스템에 적용하기 전에 항상 환경에서 철저히 테스트하세요. 작성자는 이 플레이북 사용으로 인해 발생하는 시스템 손상이나 다운타임에 대해 책임을 지지 않습니다.
| 변수 | 기본값 | 설명 |
|---|
rollback | false | true로 설정하면 완화를 롤백합니다 |
run_systemd_cleanup | false | true로 설정하면 더 이상 사용되지 않는 systemd drop-in을 제거합니다 |
target_hosts | all | 특정 호스트 또는 그룹으로 실행을 제한합니다 |
mitigation_serial | 25% | 순차 실행을 위한 배치 크기 |