Rocky Linux 9 Zabbix 6 PHP 취약점 조치 사례 (CVE-2026-109619)
Rocky Linux 9.8 기반 Zabbix 6 서버에서 PHP 원격 코드 실행 취약점(CVE-2026-109619)을 점검하고, Remi 저장소로 PHP 8.2.35를 적용한 뒤 PHP-FPM과 Zabbix 웹 화면 동작을 확인한 과정을 정리합니다.
2026년 10월 21일, PHP 프로젝트가 인증 없이 원격 코드 실행으로 이어질 수 있는 치명적 취약점 두 건(CVE-2026-109618, CVE-2026-109619)의 수정 릴리스를 배포했습니다. 운영 환경에 반영하기 전, 동일한 구성의 Rocky Linux 9.8 기반 Zabbix 6 테스트 서버에서 PHP 8.2.35 업데이트를 먼저 진행하고 그 과정을 기록합니다.
이 글에서는 취약점 해결 기준과 저장소별 제공 버전을 비교해 업데이트 경로를 정한 과정, Remi 저장소 적용 절차, 그리고 PHP-FPM과 Zabbix 웹 프론트엔드 동작 확인 범위를 다룹니다.
취약점 개요와 조치 기준
PHP 공식 릴리스 공지에 따르면 CVE-2026-109618과 CVE-2026-109619는 인증되지 않은 공격자의 원격 코드 실행으로 이어질 수 있는 취약점입니다. PHP 측은 별도의 우회나 완화책이 없으므로 버전 업데이트만 권고합니다. 브랜치별 수정 버전은 다음과 같습니다.
- PHP 8.5: 8.5.12 이상
- PHP 8.4: 8.4.27 이상
- PHP 8.3: 8.3.36 이상
- PHP 8.2: 8.2.35 이상 (이번 작업 대상)
점검 대상 서버에 설치된 기존 PHP-FPM 패키지는 다음과 같았습니다.
rpm -q php-fpm
실행 결과
php-fpm-8.0.30-8.el9_8.x86_64
PHP 8.0은 PHP 프로젝트의 공식 보안 지원이 끝난 브랜치라 업스트림 수정 릴리스 대상에서 제외됩니다. 상위 브랜치 가운데 PHP 8.2를 선택한 이유는 현재 사용 중인 Zabbix 6.0 LTS가 공식 지원하는 PHP 버전 범위(7.2~8.2)에 맞춰 프론트엔드 호환성 문제를 최소화하기 위해서입니다.
사전 백업
모듈 스트림과 저장소를 변경하기 전에 기존 PHP 설정 파일과 설치된 패키지 목록을 먼저 백업했습니다.
BACKUP_DIR=/root/php-backup-$(date +%Y%m%d)
mkdir -p "$BACKUP_DIR"
cp -a /etc/php.ini "$BACKUP_DIR"/
cp -a /etc/php-fpm.d "$BACKUP_DIR"/
rpm -qa 'php*' | sort > "$BACKUP_DIR"/php-packages.txt
배포판 패치 여부 확인
RHEL 계열 배포판은 업스트림 버전 번호를 올리지 않고 보안 패치만 백포트하는 경우가 있으므로, 버전 숫자만 보고 판단하지 않고 패키지 변경 이력과 보안 공지를 먼저 확인했습니다.
rpm -q --changelog php-fpm | grep -i -E "CVE-2026-109618|CVE-2026-109619"
dnf updateinfo info --cve CVE-2026-109619
실행 결과
Last metadata expiration check: 0:14:22 ago on Thu 22 Oct 2026 08:38:43 AM KST.
두 명령 모두 해당 CVE와 일치하는 패치 내역이나 보안 권고 정보가 출력되지 않았습니다. 작업 시점 기준으로 배포판 기본 패키지에는 아직 수정 사항이 반영되지 않은 상태입니다.
AppStream과 Remi 저장소 비교
Rocky Linux 기본 AppStream 저장소가 제공하는 PHP 패키지 버전을 먼저 조회했습니다.
dnf list --showduplicates php-common php-fpm
실행 결과
...(중략) Installed Packages php-common.x86_64 8.0.30-8.el9_8 @appstream php-fpm.x86_64 8.0.30-8.el9_8 @appstream Available Packages php-common.x86_64 8.0.30-5.el9_7 appstream php-common.x86_64 8.0.30-6.el9_8 appstream php-common.x86_64 8.0.30-8.el9_8 appstream php-fpm.x86_64 8.0.30-5.el9_7 appstream php-fpm.x86_64 8.0.30-6.el9_8 appstream php-fpm.x86_64 8.0.30-8.el9_8 appstream
기본 상태에서는 8.0.30 패키지만 조회되므로, AppStream의 PHP 8.2 모듈 스트림을 활성화해 제공 버전을 확인했습니다.
dnf module enable php:8.2 -y
실행 결과
Last metadata expiration check: 0:16:01 ago on Thu 22 Oct 2026 08:38:43 AM KST. Dependencies resolved. ================================================================================ Package Architecture Version Repository Size ================================================================================ Enabling module streams: php 8.2 Transaction Summary ================================================================================ Complete!
distro-sync는 활성화된 모듈 스트림에 맞춰 여러 PHP 관련 패키지의 버전을 일괄 변경합니다. 실제 운영 서버에 적용할 때는 -y 없이 실행하거나 --assumeno 옵션으로 변경 예정 패키지와 의존성을 먼저 확인하는 편이 안전합니다.
dnf distro-sync 'php*' --assumeno
테스트 서버에서 AppStream의 PHP 8.2 스트림으로 동기화를 실행해 제공 버전을 확인했습니다.
dnf distro-sync 'php*' -y
실행 결과
Last metadata expiration check: 0:16:10 ago on Thu 22 Oct 2026 08:38:43 AM KST. Dependencies resolved. ================================================================================ Package Arch Version Repo Size ================================================================================ Upgrading: php-bcmath x86_64 8.2.33-1.module+el9.8.0+40305+0c876ebe appstream 33 k php-common x86_64 8.2.33-1.module+el9.8.0+40305+0c876ebe appstream 709 k php-fpm x86_64 8.2.33-1.module+el9.8.0+40305+0c876ebe appstream 1.8 M php-gd x86_64 8.2.33-1.module+el9.8.0+40305+0c876ebe appstream 40 k php-ldap x86_64 8.2.33-1.module+el9.8.0+40305+0c876ebe appstream 41 k php-mbstring x86_64 8.2.33-1.module+el9.8.0+40305+0c876ebe appstream 519 k php-mysqlnd x86_64 8.2.33-1.module+el9.8.0+40305+0c876ebe appstream 144 k php-pdo x86_64 8.2.33-1.module+el9.8.0+40305+0c876ebe appstream 84 k php-xml x86_64 8.2.33-1.module+el9.8.0+40305+0c876ebe appstream 144 k Transaction Summary ================================================================================ Upgrade 9 Packages
작업 시점에 AppStream의 PHP 8.2 스트림 최신 버전은 8.2.33이었고, 설치 후 rpm -q --changelog php-fpm을 다시 확인해도 이번 CVE 패치는 포함되어 있지 않았습니다. 반면 Remi 저장소의 Enterprise Linux 9용 PHP 8.2 패키지 목록에는 2026년 10월 21일자 PHP 8.2.35가 올라와 있어 Remi 저장소를 사용하기로 결정했습니다.
다만 Remi는 서드파티 저장소이므로 배포판 공식 패키지보다 업데이트 주기가 빠른 대신 별도의 신뢰 관리와 의존성 점검이 필요합니다. 운영 서버에 적용할 때는 이 점을 감안해야 합니다.
저장소 추가와 모듈 스트림 전환
EPEL과 Remi 저장소를 설치한 뒤, 기존 모듈 스트림을 초기화하고 php:remi-8.2 스트림을 활성화했습니다.
dnf install epel-release -y
dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm -y
dnf module reset php -y
dnf module enable php:remi-8.2 -y
실행 결과 (remi-release 설치 발췌)
Last metadata expiration check: 0:46:08 ago on Thu 22 Oct 2026 08:38:43 AM KST. remi-release-9.rpm 10 kB/s | 33 kB 00:03 Dependencies resolved. ================================================================================ Package Architecture Version Repository Size ================================================================================ Installing: remi-release noarch 9.8-1.el9.remi @commandline 33 k Transaction Summary ================================================================================ Install 1 Package ...(중략) Installed: remi-release-9.8-1.el9.remi.noarch Complete!
remi-8.2 모듈 스트림이 정상적으로 활성화되었는지 확인합니다.
dnf module list php
실행 결과
Last metadata expiration check: 0:00:26 ago on Thu 22 Oct 2026 09:26:06 AM KST. Rocky Linux 9 - AppStream Name Stream Profiles Summary php 8.1 common [d], devel, minimal PHP scripting language php 8.2 common [d], devel, minimal PHP scripting language php 8.3 common [d], devel, minimal PHP scripting language Remi's Modular repository for Enterprise Linux 9 - x86_64 Name Stream Profiles Summary php remi-7.4 common [d], devel, minimal PHP scripting language php remi-8.0 common [d], devel, minimal PHP scripting language php remi-8.1 common [d], devel, minimal PHP scripting language php remi-8.2 [e] common [d], devel, minimal PHP scripting language php remi-8.3 common [d], devel, minimal PHP scripting language php remi-8.4 common [d], devel, minimal PHP scripting language php remi-8.5 common [d], devel, minimal PHP scripting language php remi-8.6 common [d], devel, minimal PHP scripting language Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
패키지 동기화
활성화된 Remi 저장소 기준으로 PHP 패키지를 동기화했습니다.
dnf distro-sync 'php*' -y
실행 결과
Last metadata expiration check: 0:00:33 ago on Thu 22 Oct 2026 09:26:06 AM KST. Dependencies resolved. ================================================================================ Package Arch Version Repo Size ================================================================================ Upgrading: php-bcmath x86_64 8.2.35-1.module_php.8.2.el9.remi remi-modular 41 k php-common x86_64 8.2.35-1.module_php.8.2.el9.remi remi-modular 858 k php-fpm x86_64 8.2.35-1.module_php.8.2.el9.remi remi-modular 1.9 M php-gd x86_64 8.2.35-1.module_php.8.2.el9.remi remi-modular 58 k php-ldap x86_64 8.2.35-1.module_php.8.2.el9.remi remi-modular 56 k php-mbstring x86_64 8.2.35-1.module_php.8.2.el9.remi remi-modular 572 k php-mysqlnd x86_64 8.2.35-1.module_php.8.2.el9.remi remi-modular 214 k php-pdo x86_64 8.2.35-1.module_php.8.2.el9.remi remi-modular 112 k php-xml x86_64 8.2.35-1.module_php.8.2.el9.remi remi-modular 210 k Installing dependencies: gd3php x86_64 2.3.3-11.el9.remi remi-safe 133 k highway x86_64 1.3.0-1.el9 epel 553 k libaom x86_64 3.13.3-1.el9 epel 1.8 M libavif x86_64 1.1.1-3.el9 epel 94 k libdav1d x86_64 1.5.4-1.el9 epel 633 k libimagequant x86_64 2.17.0-1.el9 epel 62 k libjxl x86_64 0.7.2-2.el9 epel 982 k libraqm x86_64 0.8.0-1.el9 epel 19 k libvmaf x86_64 2.3.0-2.el9 epel 177 k libyuv x86_64 0-0.45.20201024git19d71f6.el9 epel 139 k oniguruma5php x86_64 6.9.10-1.el9.remi remi-safe 222 k rav1e-libs x86_64 0.8.1-2.el9 epel 1.1 M svt-av1-libs x86_64 2.3.0-3.el9 epel 1.8 M Installing weak dependencies: jxl-pixbuf-loader x86_64 0.7.2-2.el9 epel 52 k Transaction Summary ================================================================================ Install 14 Packages Upgrade 9 Packages ...(중략) Upgraded: php-bcmath-8.2.35-1.module_php.8.2.el9.remi.x86_64 php-common-8.2.35-1.module_php.8.2.el9.remi.x86_64 php-fpm-8.2.35-1.module_php.8.2.el9.remi.x86_64 php-gd-8.2.35-1.module_php.8.2.el9.remi.x86_64 php-ldap-8.2.35-1.module_php.8.2.el9.remi.x86_64 php-mbstring-8.2.35-1.module_php.8.2.el9.remi.x86_64 php-mysqlnd-8.2.35-1.module_php.8.2.el9.remi.x86_64 php-pdo-8.2.35-1.module_php.8.2.el9.remi.x86_64 php-xml-8.2.35-1.module_php.8.2.el9.remi.x86_64 Installed: gd3php-2.3.3-11.el9.remi.x86_64 highway-1.3.0-1.el9.x86_64 jxl-pixbuf-loader-0.7.2-2.el9.x86_64 libaom-3.13.3-1.el9.x86_64 libavif-1.1.1-3.el9.x86_64 libdav1d-1.5.4-1.el9.x86_64 libimagequant-2.17.0-1.el9.x86_64 libjxl-0.7.2-2.el9.x86_64 libraqm-0.8.0-1.el9.x86_64 libvmaf-2.3.0-2.el9.x86_64 libyuv-0-0.45.20201024git19d71f6.el9.x86_64 oniguruma5php-6.9.10-1.el9.remi.x86_64 rav1e-libs-0.8.1-2.el9.x86_64 svt-av1-libs-2.3.0-3.el9.x86_64 Complete!
Remi 저장소로 전환하면서 기존 PHP 패키지 9개가 8.2.35로 업그레이드되었고, gd3php, oniguruma5php 및 EPEL 저장소의 이미지 처리 라이브러리(libavif, libjxl 등) 14개가 의존성 패키지로 새로 설치되었습니다.
PHP 8.2.35 적용 및 서비스 검증
패키지 업데이트 후 PHP-FPM 버전을 확인했습니다.
php-fpm -v
실행 결과
PHP 8.2.35 (fpm-fcgi) (built: Oct 19 2026 07:29:52) Copyright (c) The PHP Group Zend Engine v4.2.35, Copyright (c) Zend Technologies
PHP 버전이 목표였던 8.2.35로 변경된 것을 확인한 뒤, PHP-FPM 서비스를 재시작하고 상태를 점검했습니다.
systemctl restart php-fpm
systemctl status php-fpm
실행 결과
● php-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/etc/systemd/system/php-fpm.service; enabled; preset: disabled) Active: active (running) since Fri 2026-10-23 15:33:52 KST; 2s ago Main PID: 3365698 (php-fpm) Status: "Ready to handle connections" Tasks: 11 Memory: 20.6M (peak: 24.6M) CPU: 154ms CGroup: /system.slice/php-fpm.service ├─3365698 "php-fpm: master process (/etc/php-fpm.conf)" ├─3365700 "php-fpm: pool www" ├─3365701 "php-fpm: pool www" ├─3365702 "php-fpm: pool www" ├─3365703 "php-fpm: pool www" ├─3365704 "php-fpm: pool www" ├─3365705 "php-fpm: pool zabbix" ├─3365706 "php-fpm: pool zabbix" ├─3365707 "php-fpm: pool zabbix" ├─3365708 "php-fpm: pool zabbix" └─3365709 "php-fpm: pool zabbix" Oct 23 15:33:51 test systemd[1]: Starting The PHP FastCGI Process Manager... Oct 23 15:33:52 test systemd[1]: Started The PHP FastCGI Process Manager.
위 출력에서 Loaded 경로가 기본 경로(/usr/lib/systemd/system/)가 아닌 /etc/systemd/system/php-fpm.service로 표시됩니다. 별도로 구성한 유닛 파일이 있을 때는 패키지 업데이트로 추가된 기본 유닛 설정과 차이가 없는지 systemctl cat php-fpm으로 비교해 두는 것이 안전합니다.
이어서 Zabbix 웹 프론트엔드에 접속해 대시보드가 정상적으로 열리고 HTTP 502 Bad Gateway 같은 연동 오류가 발생하지 않는지 확인했습니다.
이번 테스트에서 검증한 항목은 다음과 같습니다.
- PHP-FPM 실행 버전이 8.2.35로 변경되었는지 확인
- PHP-FPM 재시작 후 마스터 프로세스와
zabbix풀 정상 기동 확인 - Zabbix 웹 프론트엔드 접속 및 대시보드 화면 출력 확인
패키지 변경 이력을 남기려면 변경 후 RPM 릴리스 정보도 함께 보관해 두는 것이 좋습니다.
rpm -q php-common php-fpm
실행 결과
php-common-8.2.35-1.module_php.8.2.el9.remi.x86_64 php-fpm-8.2.35-1.module_php.8.2.el9.remi.x86_64
한계와 추가 점검 사항
위 검증은 PHP 버전과 웹 서비스의 기본 동작을 확인한 절차이며, 보안 감사 기준의 취약점 조치 완료 증적을 모두 대체하지는 않습니다. 대시보드가 열린다고 해서 모든 하위 메뉴의 호환성이 검증된 것은 아니므로, 조치 증적이 필요하다면 패키지 버전 기록과 취약점 스캐너 재검사 결과를 함께 보관해야 합니다.
실제 운영 서버에 반영할 때는 아래 항목도 이어서 점검하는 것을 권장합니다.
- PHP 확장 모듈: 모듈 스트림 전환 후 Zabbix가 요구하는 필수 확장(DB 드라이버, gd, bcmath, mbstring, ldap, xml 등)이 누락 없이 로드되는지
php -m과 Zabbix 프론트엔드 요구 사항 화면에서 대조 - 설정 파일 비교: 패키지 교체 과정에서
/etc/php.ini나/etc/php-fpm.d/zabbix.conf등 기존 설정 경로에.rpmnew또는.rpmsave파일이 생성되었는지 확인 - 취약점 재검사: 사내 취약점 스캐너로 대상 서버를 재검사해 조치 결과 보관
또한 PHP 8.2는 2026년 12월 31일에 공식 보안 지원이 종료될 예정입니다. 이번 작업은 당면한 원격 코드 실행 취약점에 대응하기 위한 조치이며, 추후 Zabbix 메이저 버전 업그레이드나 지원 범위 확인을 거쳐 PHP 8.3 이상(이번 취약점 수정 버전은 8.3.36 이상)으로 전환 계획을 세우는 것이 좋습니다.
참고 자료
- 블로그 : www.infracody.com
이 글이 유익했나요? 댓글로 소중한 의견을 남겨주시거나 커피 한 잔의 선물은 큰 힘이 됩니다.