
Linux 호스트에서 PHP 바이너리와 Apache mod_php를 인벤토리화하고 PHP2Shell(CVE-2026-109618/109619) 상태, 백포트 및 오래된 프로세스를 보고하는 에이전트 플러그인이 포함된 Checkmk 확장입니다.
Linux 호스트의 모든 PHP 설치에 대해 PHP2Shell - 2026-10-21에 PHP 8.2.35, 8.3.36, 8.4.27 및 8.5.12에서 공개되고 수정된 사전 인증 원격 코드 실행 취약점 CVE-2026-109618 및 CVE-2026-109619 - 의 영향을 받는지 여부를 보여주는 Checkmk 확장입니다.
이 확장은 사실만 수집하는 작은 POSIX 셸 에이전트 플러그인을 제공합니다(PHP 바이너리, Apache mod_php, NGINX Unit 및 FrankenPHP의 PHP 라이브러리, 버전, 패키지 변경 로그, php.ini 설정, 교체된 바이너리로 여전히 실행 중인 프로세스). 그것이 "수정됨"을 의미하는지 "취약함"을 의미하는지는 Checkmk 서버의 체크 플러그인이 결정하므로, 새로운 정보 - 또 다른 수정 릴리스, 새로운 CVE - 는 모든 호스트에 새 스크립트를 배포할 필요 없이 업데이트된 .mkp만 있으면 됩니다.
단순히 버전 번호만 비교하지 않는 이유: 배포판은 업스트림 버전을 변경하지 않고 수정 사항을 백포트합니다. Ubuntu 24.04는 PHP 8.3.6을, AlmaLinux 9는 8.0.30을 제공합니다 - 둘 다 수정되었지만 버전상으로는 "취약"합니다. 따라서 이 확장은 각 바이너리를 소유한 패키지의 변경 로그도 읽습니다.
cmk_addons.plugins 플러그인 API 사용)./proc/<pid>/maps를 읽음). GNU 또는 busybox 도구를 갖춘 일반 POSIX sh; 패키지 변경 로그는 dpkg, rpm 또는 apk로 읽습니다. Debian 계열(Debian, Ubuntu), Red Hat 계열(RHEL, AlmaLinux, Rocky Linux, Oracle Linux, CentOS Stream, Fedora, Amazon Linux 2023, CentOS 7) 및 Alpine에서 테스트되었습니다. 아래를 참조하십시오.| Checkmk 이미지 | 날짜 | 결과 |
|---|---|---|
checkmk/check-mk-ultimate:2.5.0p17 | 2026-10-27 | OK (빌드, cmk-validate-plugins, 스모크 테스트, 설치 + 검색 + 체크 + 에이전트 베이크) |
checkmk/check-mk-ultimate:3.0.0-2026.10.27 (daily) | 2026-10-27 | OK (빌드, cmk-validate-plugins, 스모크 테스트, 설치 + 검색 + 체크 + 에이전트 베이크) |
에이전트 플러그인은 2026-10-27에 배포판 자체의 PHP 패키지에 대해 실행되었습니다(scripts/test_agent_plugin.sh). 대상이 웹 SAPI(FPM, 배포판이 여전히 제공하는 경우 Apache mod_php, NGINX Unit, FrankenPHP)를 시작하는 경우, 이후 디스크에서 FPM 바이너리와 libphp가 교체되었고, 재시작 감지가 실행 중인 프로세스를 보고했습니다.
Debian 계열 및 Alpine
| 배포판 | PHP 패키지 | 플러그인 결과 |
|---|---|---|
| Ubuntu 24.04 | 8.3.6-0ubuntu0.24.04.13 (CLI, FPM, CGI, mod_php) | 백포트로 수정됨 (변경 로그에 두 CVE 모두 명시) |
| Debian 12 | 8.2.35-1~deb12u1 (CLI, FPM, mod_php) | 버전으로 수정됨 |
| Debian 12 + nginx | 8.2.35-1~deb12u1 (CLI, nginx 뒤의 FPM) | 버전으로 수정됨 |
| Debian 13 | 8.4.27-1~deb13u1 (CLI, FPM) | 버전으로 수정됨 |
| Alpine 3.22 | php83 8.3.36-r0 (CLI, FPM, CGI) | 버전으로 수정됨 |
Red Hat 계열
| 배포판 | PHP 패키지 | 플러그인 결과 |
|---|---|---|
| AlmaLinux 8.10 | 7.2.24-1.module_el8.10.0 (CLI, FPM, CGI, mod_php libphp7.so) | 백포트로 수정됨 (changelog에 두 CVE 모두 명시됨) |
AlmaLinux 8.10, 모듈 php:8.2 | 8.2.35-1.module_el8.10.0 (CLI, FPM, CGI) | 버전으로 수정됨 |
| RHEL 9.8 (UBI), AlmaLinux 9.8, Rocky Linux 9.8, Oracle Linux 9.8 | 8.0.30-8.el9_8.1 (CLI, FPM, CGI) | 백포트로 수정됨 (changelog에 두 CVE 모두 명시됨) |
AlmaLinux 9.8, 모듈 php:8.3 | 8.3.36-1.module_el9.8.0 (CLI, FPM, CGI) | 버전으로 수정됨 |
| AlmaLinux 9.8 + Remi SCL | php74 7.4.33-31.el9.remi, php81 8.1.34-6.el9.remi (/opt/remi) | 백포트로 수정됨 (changelog에 두 CVE 모두 명시됨) |
| AlmaLinux 10.2, CentOS Stream 10 | 8.3.36-1.el10 (CLI, FPM, CGI) | 버전으로 수정됨 |
| Fedora 44 | 8.5.12-1.fc44 (CLI, FPM, CGI) | 버전으로 수정됨 |
| Amazon Linux 2023 | php8.5 8.5.12-1.amzn2023.0.1 (CLI, FPM, CGI) | 버전으로 수정됨 |
| CentOS 7 (수명 종료, vault) | 5.4.16-48.el7 (CLI, FPM, CGI) | 취약함 - 유료 연장 지원 외에는 EL7용 백포트 없음 |
공식 컨테이너 이미지 및 FrankenPHP
| 이미지 | PHP | 플러그인 결과 |
|---|---|---|
php:8.2.20-fpm | 8.2.20, 소스에서 빌드됨 | 취약함 |
unit:php8.3 (NGINX Unit) | 8.3.26 (CLI, CGI, 내장 libphp) | 취약함 |
dunglas/frankenphp:latest | 8.5.12 (CLI, CGI, 내장 libphp) | 버전으로 수정됨 |
| FrankenPHP 정적 바이너리 (GitHub 릴리스) | 8.5.12 | 버전으로 수정됨 |
아직 컨테이너 외부의 프로덕션 호스트에서는 실행되지 않았습니다. 특히 SELinux가 enforcing 상태인 환경(RHEL 계열)에서는 실행되지 않았으며, 해당 환경에서 에이전트는 보통 unconfined로 실행됩니다.
Setup > Maintenance > Extension packages > Upload package, 또는 사이트 내부의 명령줄에서:
mkp add php2shell-<version>.mkp
mkp enable php2shell <version>
확인하려는 호스트에 에이전트 플러그인을 배포합니다:
호스트에서 서비스 검색을 실행합니다. 모든 PHP 바이너리와 Apache PHP 모듈이 각각
자체 서비스가 되며, 호스트당 하나의 PHP2Shell restart 서비스가 추가됩니다.
선택 사항: Setup > Services > Service monitoring rules > PHP2Shell (CVE-2026-109618 / CVE-2026-109619) 및 PHP2Shell restart에서 상태를 조정합니다.
package/agents/plugins/php2shell을 에이전트의
플러그인 디렉터리 아래 캐시 간격 하위 디렉터리에 복사하고 실행 가능하게 만듭니다:
install -m 755 php2shell /usr/lib/check_mk_agent/plugins/3600/php2shell
3600 디렉터리는 에이전트가 이를 백그라운드에서 한 시간에 한 번 실행하고 그 사이에는 캐시된 결과를 제공하도록 합니다. 이를 plugins/에 직접 넣지 마십시오. 이는 모든 PHP 바이너리를 실행하고 모든 프로세스의 메모리 맵을 읽기 때문에 모든 에이전트 쿼리에 비해 너무 무겁습니다.
| 서비스 | 단위 | 상태 (기본값, 구성 가능) |
|---|---|---|
PHP2Shell <path> | PHP 바이너리 또는 라이브러리, 예: PHP2Shell /usr/sbin/php-fpm8.3 | OK 고정됨 - CRIT 취약한 웹 SAPI - WARN 모든 중간 완화 조치가 적용된 취약한 웹 SAPI - WARN 취약한 CLI - UNKNOWN 버전 확인 불가 |
PHP2Shell restart | PHP가 설치된 호스트 | OK - CRIT 프로세스가 여전히 교체된 PHP 바이너리 또는 libphp를 실행 중 |
flowchart TD
A[PHP binary or module] --> B{Version known?}
B -- no --> U[UNKNOWN]
B -- yes --> C{"Version >= fix of its branch?<br/>8.2.35 / 8.3.36 / 8.4.27 / 8.5.12<br/>or branch newer than 8.5"}
C -- yes --> OK[OK: fixed]
C -- no --> D{"Package changelog names<br/>both CVEs?"}
D -- yes --> OKB[OK: fixed by distribution backport]
D -- no --> E{SAPI}
E -- CLI --> W1[WARN: vulnerable, CLI only]
E -- "FPM / CGI / LiteSpeed / Apache module /<br/>embedded libphp / FrankenPHP" --> F{"All interim mitigations<br/>in this SAPI's php.ini?"}
F -- yes --> W2[WARN: vulnerable, mitigated]
F -- no --> CR[CRIT: vulnerable]
OK --> G{"session.upload_progress.enabled<br/>= On?"}
OKB --> G
G -- yes --> H["Hint: CVE-2026-115560 not fixed yet<br/>(state configurable, default OK)"]
memory_limit=-1, CVE-2026-109619에 대한 session.upload_progress.enabled=0(PHP 8.5에서는 fatal_error_backtraces=0). 이는 CRIT를 WARN으로만 낮출 뿐 OK로 낮추지는 않습니다 - PHP는 업데이트만이 유일한 완전한 수정이라고 밝히고 있으며, memory_limit=-1은 그 자체로 메모리 고갈 문제를 야기합니다.php -S가 웹 서버로 이를 사용하고, mod_php를 찾을 수 없는 호스트에서는 PHP 버전의 유일한 가시적 흔적일 수 있기 때문에 여전히 보고됩니다.session.upload_progress.enabled=On인 수정된 설치에는 세부 정보에 힌트가 표시됩니다; 경고를 받고 싶다면 규칙에서 상태를 높이십시오.flowchart LR
subgraph host [Monitored Linux host]
P["agent plug-in php2shell<br/>(plugins/3600/, as root)"]
P -- "php -v / php -i" --> BIN[PHP binaries]
P -- "X-Powered-By string" --> SO[libphp*.so]
P -- "dpkg / rpm / apk" --> CL[package changelog]
P -- "/proc/*/maps" --> PR[running processes]
end
P -- "php2shell agent section" --> CP
subgraph site [Checkmk site]
CP["check plug-ins<br/>php2shell, php2shell_restart"]
R[rules: service states] --> CP
BK["bakery rule<br/>PHP2Shell agent plug-in"]
end
BK -. bakes into agent .-> P
CP --> S1["PHP2Shell (one per path)"]
CP --> S2[PHP2Shell restart]
에이전트 플러그인: