Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Detections-CVE-2026-23918 — CVE-2026-23918 Apache http2 RCE 탐지 규칙 - 크레딧: stringa.ai, isec.pl | Kitploit
도구/GitHubGitHub/insomnisec/detections-cve-2026-23918
Indicator of Compromise (IOC) ManagementVulnerability AnalysisExploitationIDS/IPS EvasionWeb SecurityNetwork SecurityThreat IntelligenceIntrusion DetectionIncident Response

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
Archived
GitHubinsomnisec/detections-cve-2026-23918

Detections-CVE-2026-23918

CVE-2026-23918 Apache http2 RCE 탐지 규칙 - 크레딧: stringa.ai, isec.pl

저장소 보기
83개월 전아직 검토되지 않음

이동 예정: https://github.com/insomnisec/public_cve_detections

탐지 게시물의 장기적인 관리를 위해

이 저장소는 2026년 6월에 제거됩니다

앞으로는 다른 저장소를 사용해 주세요

CVE-2026-23918 "Apache HTTP/2 Double-Free" — 탐지 및 대응 패키지

게시일: 2026-05-04
CVSSv3: 8.8 (높음)
유형: 원격 코드 실행 / 서비스 거부 (Double-Free 메모리 손상)
구성 요소: Apache HTTP Server mod_http2 (h2_mplx.c 스트림 정리 경로)
영향: HTTP/2가 활성화되고 멀티스레드 MPM을 사용하는 Apache HTTP Server 2.4.66
참고:

  • Apache HTTP Server 보안 권고
  • oss-security 공개
  • Hadrian 기술 분석
  • insomnisec 적용 범위

목차

  1. 취약점 요약
  2. 익스플로잇 작동 방식
  3. 탐지 아키텍처 — 이 패키지가 LPE 패키지와 다른 이유
  4. 탐지 제한 사항
  5. 즉시 완화 조치
  6. Suricata 규칙
  7. ModSecurity / Coraza 구성
  8. Auditd 규칙
  9. Wazuh 규칙
  10. YARA 규칙
  11. MISP 이벤트 템플릿
  12. 패치 및 수정
  13. 주요 IoC 참조

취약점 요약

CVE-2026-23918은 Apache HTTP Server 2.4.66의 HTTP/2 프로토콜 구현에서 발생하는 double-free 메모리 손상 취약점으로, mod_http2 모듈의 h2_mplx.c에 있는 스트림 정리 경로에만 영향을 미칩니다. 인증되지 않은 원격 공격자가 단일 TCP 연결과 두 개의 HTTP/2 프레임만으로 Apache 작업자 프로세스를 충돌(서비스 거부)시킬 수 있습니다. Debian 계열 시스템 및 공식 Apache Docker 이미지에 존재하는 조건에서는 double-free가 완전한 원격 코드 실행(RCE)으로 이어질 수 있습니다.

DoS 악용은 실제 환경에서 확인되었습니다. HTTP/2 엔드포인트를 대상으로 하는 대규모 인터넷 스캔이 관찰되었습니다. RCE 악용은 통제된 환경에서 가능한 것으로 입증되었지만, 현재 시점에서 RCE를 위한 광범위한 공개 악용 증거는 없습니다.

MPM prefork는 영향을 받지 않습니다. 취약점이 발생하려면 멀티스레드 MPM 구성(worker, event 또는 유사)이 필요합니다. CVE-2026-23918은 Apache HTTP Server 버전 2.4.66에만 영향을 미칩니다.


익스플로잇 작동 방식```

Attacker opens HTTP/2 connection to Apache 2.4.66 (mod_http2 loaded, multi-threaded MPM) └─ Sends HTTP/2 HEADERS frame on stream N (opens the stream) └─ Immediately sends RST_STREAM on stream N (non-zero error code) └─ Sent BEFORE the multiplexer has registered the stream

Two nghttp2 callbacks fire in sequence: ├─ on_frame_recv_cb (RST received) → calls h2_mplx_c1_client_rst → m_stream_cleanup └─ on_stream_close_cb (stream closed) → calls h2_mplx_c1_client_rst → m_stream_cleanup

Result: same h2_stream pointer pushed onto spurge[] cleanup array TWICE

c1_purge_streams() iterates spurge[] and calls h2_stream_destroy() on each entry: ├─ First call: valid — frees the stream └─ Second call: DOUBLE-FREE — operates on already-freed memory → heap corruption

DoS path (trivial, in the wild): └─ Heap corruption → SIGABRT in worker process → worker dies → service disruption

RCE path (requires mmap allocator — default on Debian/Ubuntu and official Docker): └─ Attacker places fake h2_stream struct at freed virtual address via mmap reuse └─ Points pool cleanup function pointer to system() └─ Uses Apache scoreboard shared memory (fixed address, ASLR-resistant) as payload container └─ c1_purge_streams() executes system() with attacker-controlled argument → RCE

root@kitploit:~
> **핵심 비대칭성:** DoS 경로는 힙 조작 기술이 필요하지 않으며 실제로 적극적으로 악용되고 있습니다. RCE 경로는 기술적으로 까다롭지만 실험실 조건에서 입증되었으며, 점수판이 ASLR에 저항하는 고정 주소를 가지고 있기 때문에 가까운 미래에 거의 확실히 무기화될 것입니다.

---

## 탐지 아키텍처

> 이 섹션은 여기의 탐지 도구가 일반적인 로컬 권한 상승 패키지와 크게 다른 이유를 설명합니다.

Copy Fail (CVE-2026-31431)은 **호스트 측, 접근 후** 취약점이었습니다. 공격자는 시스템에 기존에 존재해야 했습니다. 탐지는 주로 syscall 계층(auditd, Wazuh)에서 이루어졌으며, YARA를 사용하여 디스크에 있는 PoC 스크립트를 스캔했습니다.

CVE-2026-23918은 **네트워크 측, 접근 전** 취약점입니다. 익스플로잇은 애플리케이션 코드가 실행되기 전에 HTTP/2 프로토콜 프레임 형태로 네트워크를 통해 전달됩니다. 이로 인해 탐지 스택이 크게 변경됩니다:

| 계층 | Copy Fail (LPE) | CVE-2026-23918 (RCE) |
|---|---|---|
| **기본 탐지** | auditd syscall 규칙 | Suricata 네트워크 규칙 |
| **WAF (ModSecurity)** | 제한적 — 익스플로잇을 볼 수 없음 | 관련 있음 — 이상 징후 + 사후 익스플로잇 |
| **Auditd** | 핵심 탐지 | 결과 탐지(충돌, 사후 익스플로잇) |
| **YARA** | PoC 스크립트 스캔 | 웹 셸 스캔(사후 익스플로잇 아티팩트) |
| **네트워크 IDS** | 해당 없음 | 일급 탐지 계층 |
| **TLS 검사** | 해당 없음 | 전체 Suricata 커버리지에 필요 |

경험상: 네트워크 수준 RCE의 경우 외부에서 내부로(네트워크 → WAF → 호스트) 작업합니다. 로컬 권한 상승의 경우 호스트에서 외부로 작업합니다.

---

## 탐지 한계

> **규칙을 배포하기 전에 이 내용을 읽으십시오.**

**1. TLS는 HTTP/2 가시성을 종료합니다.**
대부분의 프로덕션 Apache 배포는 HTTPS를 제공합니다. Suricata는 TLS 복호화가 구성되지 않은 경우 암호화된 HTTP/2 프레임의 내용을 검사할 수 없습니다. Suricata 배포에 TLS 세션 키나 복호화 미러에 접근할 수 없는 경우, 아래 네트워크 수준 규칙은 다음만 감지합니다:
- 일반 텍스트 HTTP/2 (h2c) — 프로덕션에서는 드물지만 내부 환경에 존재
- TCP 연결 동작의 네트워크 시그니처(연결 수, TCP 계층의 RST 패턴)

HTTPS 배포의 경우, Suricata의 TLS 복호화를 `tls-decrypt` 설정 및 세션 키 로깅을 통해 활성화하거나, 대신 WAF(ModSecurity/Coraza) 및 호스트 기반(auditd/Wazuh) 계층에 의존하십시오.

**2. ModSecurity는 익스플로잇 트리거를 차단할 수 없습니다.**
이중 해제(double-free)는 완전한 HTTP 요청이 조립되어 ModSecurity에 전달되기 전에 HTTP/2 프레임 파서 내부에서 발생합니다. WAF는 프레임 구문 분석이 완료된 후에만 요청을 확인합니다. 이때 이미 피해가 발생했을 수 있습니다. 이 패키지의 ModSecurity는 이상 징후 탐지, 속도 제한 및 사후 익스플로잇 탐지에 사용되며, 트리거 차단용이 아닙니다.

**3. MPM prefork는 영향을 받지 않습니다.**
Apache 배포가 `mpm_prefork_module`(단일 스레드)을 사용하는 경우 이 취약점은 적용되지 않습니다. 버그는 다중 스레드 MPM(`mpm_event_module` 또는 `mpm_worker_module`)에서만 나타납니다. 규칙을 배포하기 전에 `apachectl -V | grep MPM`으로 확인하여 prefork 서버에서 오탐을 방지하십시오.

**4. RCE는 mmap 할당자가 필요합니다.**
RCE 경로(DoS 경로가 아님)는 APR의 mmap 할당자가 필요하며, 이는 Debian 계열 배포판 및 공식 Apache Docker 이미지의 기본값입니다. jemalloc 또는 system malloc을 사용하는 RHEL/CentOS 기반 배포판은 RCE 위험이 감소하지만, DoS에는 여전히 완전히 취약합니다.

**5. 안정적인 사후 익스플로잇 IoC는 아직 없습니다.**
현재까지 사후 익스플로잇 활동에 대해 공급업체가 발표한 IoC는 없습니다. 사후 익스플로잇 동작을 대상으로 하는 YARA 규칙과 auditd 규칙은 일반적인 웹 셸 및 권한 상승 패턴을 기반으로 합니다. 이는 일반적인 결과는 잡아내지만 정교한 맞춤형 페이로드는 잡아내지 못합니다.

---

## 즉시 완화

선호도 순서대로 적용하십시오. 각각은 이전보다 더 파괴적이지만, 더 완전합니다.```bash
# Option 1 (Preferred): Upgrade to 2.4.67
# See Patching & Remediation section below

# Option 2: Disable HTTP/2 in Apache config (no reboot required, restart required)
# In httpd.conf or relevant VirtualHost / site config:
#   Remove or comment out:  Protocols h2 h2c http/1.1
#   Replace with:           Protocols http/1.1
# Then:
apachectl configtest && sudo systemctl restart apache2

# Option 3: Switch to MPM prefork (eliminates vulnerability entirely — more disruptive)
sudo a2dismod mpm_event mpm_worker
sudo a2enmod mpm_prefork
apachectl configtest && sudo systemctl restart apache2

# Option 4: Reverse proxy HTTP/2 termination
# If nginx, HAProxy, or a CDN is in front of Apache and terminates HTTP/2,
# Apache only receives HTTP/1.1 — confirm your proxy config explicitly:
#   nginx: proxy_http_version 1.1; (already the default for upstream connections)
#   HAProxy: use-server-close + http/1.1 on backend bind
# Verify with: curl -v --http2 https://your-origin-directly

완화 조치를 확인하세요: HTTP/2를 비활성화한 후 다음으로 확인합니다:

root@kitploit:~
curl -s -o /dev/null -w "%{http_version}" --http2 http://localhost/
# Should return "1.1", not "2"
apachectl -M | grep http2
# Should produce no output

Suricata 규칙

cve-2026-23918.rules로 저장하고 suricata.yaml에서 참조하십시오.

전제 조건:

  • Suricata 6.0+에서 http2.frametype / http2.errorcode 키워드 지원을 위해 (Suricata 7.x 권장)
  • suricata.yaml에서 app-layer.protocols.http2.enabled: yes
  • HTTPS 범위를 위해 TLS 복호화 구성 (위의 탐지 한계 참조)
  • $HTTP_SERVERS 변수를 Apache 호스트를 포함하도록 설정
  • 아래 SID는 예시입니다 — 로컬 SID 정책에 맞게 조정하십시오.```

=============================================================

CVE-2026-23918 Apache HTTP/2 Double-Free — Suricata Rules

=============================================================

Rule overview:

9926231801 — HTTP/2 RST_STREAM with non-zero error code (app layer, high fidelity)

9926231802 — RST_STREAM flood threshold (DoS scanning pattern)

9926231803 — Raw HTTP/2 RST_STREAM frame detection (h2c / non-TLS fallback)

9926231804 — HEADERS+RST rapid sequence targeting HTTP/2 port (behavioral)

9926231805 — Apache worker crash signal (host-network correlation)

9926231806 — Outbound connection from Apache user post-RCE (lateral movement)

=============================================================

--- Rule 1: HTTP/2 RST_STREAM with non-zero error code (app layer) ---

Requires: Suricata HTTP/2 app layer parsing, TLS decryption for HTTPS

This is the highest-fidelity rule — targets the exact protocol condition that

triggers the double-free. RST_STREAM with error code 0 (NO_ERROR) is normal

and common; any non-zero error code in the early-reset context is suspicious.

Expected false positives: legitimate HTTP/2 connection errors (network issues,

client bugs). Tune threshold if noisy in your environment.

alert http2 $EXTERNAL_NET any -> $HTTP_SERVERS any
(msg:"CVE-2026-23918 Apache mod_http2 Double-Free - RST_STREAM with non-zero error code";
flow:established,to_server;
http2.frametype:3;
http2.errorcode:!0;
classtype:web-application-attack;
reference:cve,2026-23918;
sid:9926231801; rev:1;)

--- Rule 2: RST_STREAM flood threshold (active DoS/scan pattern) ---

Triggers after 10 RST_STREAM frames with non-zero error code from one source

within 30 seconds. This matches the confirmed in-the-wild DoS scanning behavior.

Lower threshold (e.g., count 5) for higher sensitivity in low-traffic environments.

alert http2 $EXTERNAL_NET any -> $HTTP_SERVERS any
(msg:"CVE-2026-23918 Apache mod_http2 Double-Free - RST_STREAM flood (active DoS/exploit scan)";
flow:established,to_server;
http2.frametype:3;
http2.errorcode:!0;
threshold: type both, track by_src, count 10, seconds 30;
classtype:denial-of-service;
reference:cve,2026-23918;
sid:9926231802; rev:1;)

--- Rule 3: Raw RST_STREAM frame detection (h2c cleartext / TLS fallback) ---

Matches the raw HTTP/2 RST_STREAM frame header bytes in cleartext traffic.

HTTP/2 RST_STREAM frame: 3-byte length (0x000004) | type (0x03) | flags (0x00)

This does NOT require app-layer HTTP/2 parsing and catches h2c (non-TLS) traffic.

Higher false positive rate than Rule 1 — use threshold in production.

For h2c on non-standard ports, adjust destination ports accordingly.

alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS [80,8080,8000,8443]
(msg:"CVE-2026-23918 Apache mod_http2 - HTTP/2 RST_STREAM frame detected (cleartext)";
flow:established,to_server;
content:"|00 00 04 03 00|"; depth:5; offset:0;
threshold: type both, track by_src, count 5, seconds 30;
classtype:web-application-attack;
reference:cve,2026-23918;
sid:9926231803; rev:1;)

--- Rule 4: HTTP/2 connection preface followed by rapid RST (behavioral) ---

HTTP/2 client preface begins with "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n".

Matching this followed by a rapid close is consistent with DoS scanning tooling

that establishes a connection, sends the trigger, and moves to the next target.

Most useful on cleartext h2c; for HTTPS this requires TLS decryption.

alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS [80,8080,8000]
(msg:"CVE-2026-23918 Apache mod_http2 - HTTP/2 client preface with rapid RST_STREAM (exploit pattern)";
flow:established,to_server;
content:"PRI * HTTP/2.0|0d 0a 0d 0a|SM|0d 0a 0d 0a|"; depth:24; offset:0;
content:"|00 00 04 03|"; distance:0; within:512;
classtype:web-application-attack;
reference:cve,2026-23918;
sid:9926231804; rev:1;)

--- Rule 5: Apache version string exposure (scanner pre-targeting) ---

Attackers actively scanning for vulnerable Apache 2.4.66 servers will often

trigger a version-identifying response. Alert on Apache/2.4.66 in server headers.

Useful for identifying which of your servers are exposed AND being actively scanned.

Note: ServerTokens Prod in Apache config suppresses the version string (recommended).

alert http $HTTP_SERVERS any -> $EXTERNAL_NET any
(msg:"CVE-2026-23918 Apache 2.4.66 version string in response - vulnerable version exposed";
flow:established,to_client;
http.header; content:"Apache/2.4.66";
classtype:policy-violation;
reference:cve,2026-23918;
sid:9926231805; rev:1;)

--- Rule 6: Suspicious outbound connection from web server process port ---

Post-RCE, an attacker will likely establish a reverse shell or exfiltrate data.

This rule detects NEW outbound TCP connections originating FROM HTTP server ports

to external destinations, which is anomalous for legitimate Apache behavior.

Tune $HOME_NET and $HTTP_SERVERS to avoid false positives on proxy configurations.

This rule pairs with the auditd rule monitoring www-data/apache outbound connects.

alert tcp $HTTP_SERVERS [80,443,8080,8443] -> $EXTERNAL_NET ![$HTTP_PORTS,443,80]
(msg:"CVE-2026-23918 Apache possible post-RCE reverse shell - outbound from web server port";
flow:established,to_server;
classtype:trojan-activity;
reference:cve,2026-23918;
sid:9926231806; rev:1;)

root@kitploit:~
### 튜닝 참고 사항

`alert` 모드로 24~48시간 배포한 후, 규칙 3과 4의 적중을 검토하십시오. 트래픽이 많은 환경에서는 합법적인 HTTP/2 클라이언트가 이를 트리거할 수 있습니다. 규칙 1(애플리케이션 계층)이 충분한 신호를 포착하고 있다면 규칙 3과 4는 심각도를 낮추거나 제거할 수 있습니다.

`stream-depth` 제한이 있는 Suricata 배포의 경우, 규칙 4의 HTTP/2 프리페이스 패턴이 검사 창 내에 있는지 확인하십시오.

---

## ModSecurity / Coraza 구성

> **전제 조건:**
> - ModSecurity 2.x (`libapache2-mod-security2`) 또는 [Coraza](https://coraza.io/) (드롭인 대체, 적극 유지 관리됨)
> - OWASP Core Rule Set (CRS) 4.x 권장: [coreruleset.org/installation](https://coreruleset.org/installation/)
> - `SecRuleEngine On` (또는 초기 튜닝 중 로깅 전용 모드의 경우 `DetectionOnly`)

### ModSecurity가 여기서 중요한 이유 (그러나 충분하지 않음)

탐지 제한 사항 섹션에서 언급했듯이, ModSecurity는 이중 해제 트리거를 가로챌 수 없습니다. 악용이 HTTP/2 프레임 계층에서 작동하기 때문입니다. 그러나 ModSecurity는 이 CVE에 대해 세 가지 의미 있는 가치 계층을 제공합니다:

1. **속도 제한** — 자동화된 DoS 스캔을 늦추고 RCE 힙 스프레이를 무차별 대입하는 비용을 증가시킵니다.
2. **사후 악용 탐지** — RCE가 달성되면 공격자는 웹 셸을 배포하거나 명령을 실행하려고 시도합니다. ModSecurity는 둘 다 포착할 수 있습니다.
3. **OWASP CRS 이상 점수** — 악용과 관련된 비정상적인 헤더 및 연결 패턴은 CRS Paranoia 수준 2 이상에서 이상 점수를 받을 수 있습니다.

### Apache 구성 강화 (ModSecurity와 함께 적용)

`httpd.conf` 또는 포함 파일에 추가하세요. 이는 ModSecurity 규칙이 아닌 Apache 지시문이지만 HTTP/2 공격 표면을 줄여줍니다:```apache
# ============================================================
# CVE-2026-23918 Apache HTTP/2 Hardening Directives
# ============================================================

# Limit concurrent streams per HTTP/2 session.
# The exploit typically uses 1 stream, but limiting sessions
# reduces the rate at which a single client can attempt the trigger.
H2MaxSessionRequests 100

# Restrict H2 stream push (unused surface, reduce complexity)
H2Push Off

# Suppress version information in Server headers.
# Prevents trivial identification of vulnerable 2.4.66 instances.
ServerTokens Prod
ServerSignature Off

# Constrain HTTP/2 window size — reduces memory available for heap spray
H2WindowSize 65535

# If HTTP/2 is not required at all:
# Protocols http/1.1

ModSecurity 규칙

이 내용을 ModSecurity 사용자 정의 규칙 파일(예: /etc/modsecurity/cve-2026-23918.conf)에 저장하십시오:```apache

============================================================

CVE-2026-23918 ModSecurity Detection Rules

============================================================

Rule IDs 9923918xx — adjust range to fit your local policy.

============================================================

Initialize per-IP request counter in the IP collection

SecAction
"id:9923918001,
phase:1,
nolog,
pass,
initcol:ip=%{REMOTE_ADDR},
setvar:ip.http2_requests=+1,
expirevar:ip.http2_requests=60"

Rule 01: Rate limit — block IPs sending more than 30 requests per minute

Tune the threshold to match your expected legitimate traffic volume.

This catches automated DoS scanning tools that rapidly recycle connections.

SecRule ip:http2_requests "@gt 30"
"id:9923918002,
phase:1,
deny,
status:429,
log,
msg:'CVE-2026-23918: Rate limit exceeded - possible DoS/exploit scan',
tag:'CVE-2026-23918',
tag:'OWASP_CRS/DoS',
severity:'CRITICAL'"

Rule 02: Detect abnormal connection error rates from same IP

Legitimate clients rarely produce rapid sequences of HTTP errors.

Repeated 400-level errors suggest exploit scanning or fuzzing.

SecAction
"id:9923918003,
phase:1,
nolog,
pass,
initcol:ip=%{REMOTE_ADDR}"

SecRule RESPONSE_STATUS "@rx ^(4|5)[0-9]{2}"
"id:9923918004,
phase:5,
nolog,
pass,
setvar:ip.error_count=+1,
expirevar:ip.error_count=120"

SecRule ip:error_count "@gt 20"
"id:9923918005,
phase:1,
log,
pass,
msg:'CVE-2026-23918: Elevated error rate from source IP - possible exploit scanning',
tag:'CVE-2026-23918',
severity:'WARNING'"

============================================================

POST-EXPLOITATION DETECTION

The following rules detect outcomes of successful RCE:

web shell deployment and in-request command execution.

These are NOT specific to CVE-2026-23918 but are the most

likely post-exploitation patterns given the Apache context.

============================================================

Rule 03: Web shell detection in POST body — command execution patterns

Catches PHP web shells that use $_GET/$_POST to pass OS commands.

Note: if you use legitimate PHP applications, tune false positives carefully.

SecRule REQUEST_BODY
"@rx (?:system|exec|passthru|shell_exec|popen|proc_open)\s*(\s*(?:$_(?:GET|POST|REQUEST|COOKIE)|base64_decode)"
"id:9923918010,
phase:2,
deny,
status:403,
log,
msg:'CVE-2026-23918: Possible web shell command execution in POST body',
tag:'CVE-2026-23918',
tag:'WEBSHELL',
severity:'CRITICAL'"

Rule 04: Web shell access pattern — direct GET parameter command execution

Catches requests like: GET /shell.php?cmd=id

These are the most common web shell interaction patterns.

SecRule ARGS
"@rx (?:(?:^|[;&|`])\s*(?:id|whoami|uname|cat\s+/etc|ls\s+/|pwd|wget\s+http|curl\s+http|bash\s+-[ci]|nc\s+-[el]|python[23]?\s+-c|perl\s+-e|ruby\s+-e))"
"id:9923918011,
phase:2,
deny,
status:403,
log,
msg:'CVE-2026-23918: OS command injection pattern in request arguments - possible post-exploit web shell',
tag:'CVE-2026-23918',
tag:'WEBSHELL',
severity:'CRITICAL'"

Rule 05: PHP web shell upload detection

Catches multipart file uploads containing PHP code.

If your application accepts PHP file uploads legitimately, tune carefully.

SecRule FILES_TMPNAMES "@inspectFile /etc/modsecurity/util/php-filter.pm"
"id:9923918012,
phase:2,
log,
deny,
status:403,
msg:'CVE-2026-23918: PHP code detected in file upload - possible web shell deployment',
tag:'CVE-2026-23918',
tag:'WEBSHELL',
severity:'CRITICAL'"

Rule 06: Reverse shell patterns in request data

Catches common reverse shell one-liners often placed in web shells.

SecRule REQUEST_BODY|ARGS
"@rx (?:bash\s+-i\s+>&?\s*/dev/tcp|/dev/tcp/[0-9]{1,3}.[0-9]{1,3}|nc\s+(?:-e|-c)\s+/bin/(?:bash|sh)|python[23]?\s+-c\s+['"]import\s+socket)"
"id:9923918013,
phase:2,
deny,
status:403,
log,
msg:'CVE-2026-23918: Reverse shell pattern in request - possible post-exploit activity',
tag:'CVE-2026-23918',
tag:'REVERSE_SHELL',
severity:'CRITICAL'"

root@kitploit:~
### OWASP CRS 조정 권장사항

과도한 오탐 없이 최고의 이상 징후 신호를 얻으려면 이상 징후 점수를 활성화한 상태로 CRS를 Paranoia Level 2로 배포하십시오. 트리거 연결 동작(HTTP/1.x 폴백 오류로 이어지는 비정상 HTTP/2, 반복된 재설정)은 CRS 규칙 920xxx 및 921xxx에 따라 이상 징후 점수를 누적하며 기본 `inbound_anomaly_score_threshold` 값인 5를 초과하여 사용자 정의 규칙 없이도 경고를 생성할 수 있습니다.

---

## Auditd 규칙

다음으로 저장: `/etc/audit/rules.d/cve-2026-23918.rules`

다음으로 다시 로드: `sudo augenrules --load`

> **설계 원칙:** 익스플로잇 트리거가 네트워크/커널 HTTP/2 파싱 계층에 있기 때문에 auditd가 트리거 자체를 포착할 수 없습니다. 이 규칙들은 다음을 탐지합니다:
> 1. DoS 익스플로잇의 **결과**(Apache 작업자 충돌 신호)
> 2. RCE가 달성된 경우 **익스플로잇 후 활동**(셸 실행, 파일 쓰기, Apache 사용자에 의한 아웃바운드 연결)```bash
## ============================================================
## CVE-2026-23918 Apache HTTP/2 Double-Free — Auditd Rules
## ============================================================
## These rules detect the CONSEQUENCES of exploitation, not the
## trigger. The trigger is a network protocol event and is
## detected by Suricata. These rules catch:
##   1. Apache worker process crashes (DoS outcome)
##   2. Shell execution by the web server user (RCE outcome)
##   3. Web root file creation (web shell deployment)
##   4. Outbound network connections by web server process (reverse shell)
##
## Distribution notes for UID values:
##   - Debian/Ubuntu: www-data = uid 33
##   - RHEL/Rocky/CentOS: apache = uid 48
##   Adjust -F uid= values for your distribution. Use `id www-data`
##   or `id apache` to confirm the UID on your systems.
## ============================================================

## --- Apache worker SIGABRT detection (DoS exploitation outcome) ---
## A double-free that reaches the crash path generates SIGABRT (signal 6).
## Monitoring kill() syscalls with a1=6 (SIGABRT) targets abnormal process
## termination, which Apache itself triggers on double-free detection.
## Correlate with Apache error log entries (child exited with signal 6).
-a always,exit -F arch=b64 -S kill -F a1=6 -k cve_2026_23918_sigabrt
-a always,exit -F arch=b32 -S kill -F a1=6 -k cve_2026_23918_sigabrt

## --- SIGSEGV monitoring (alternative crash path) ---
## Depending on heap state, the double-free may produce a SIGSEGV (signal 11)
## rather than SIGABRT. Both are abnormal for production Apache workers.
-a always,exit -F arch=b64 -S kill -F a1=11 -k cve_2026_23918_sigsegv
-a always,exit -F arch=b32 -S kill -F a1=11 -k cve_2026_23918_sigsegv

## --- Shell execution by web server user (RCE outcome - Debian/Ubuntu) ---
## If RCE is achieved via the mmap allocator path, the attacker's payload
## runs as the Apache worker user (www-data on Debian/Ubuntu, uid=33).
## Legitimate Apache does not exec() a shell. Any execve() of bash/sh/dash
## by www-data is anomalous and warrants immediate investigation.
-a always,exit -F arch=b64 -S execve -F uid=33 -F exe=/bin/bash -k cve_2026_23918_rce_shell_deb
-a always,exit -F arch=b64 -S execve -F uid=33 -F exe=/bin/sh   -k cve_2026_23918_rce_shell_deb
-a always,exit -F arch=b64 -S execve -F uid=33 -F exe=/bin/dash -k cve_2026_23918_rce_shell_deb
-a always,exit -F arch=b64 -S execve -F uid=33 -F exe=/usr/bin/python3 -k cve_2026_23918_rce_shell_deb
-a always,exit -F arch=b64 -S execve -F uid=33 -F exe=/usr/bin/perl -k cve_2026_23918_rce_shell_deb

## --- Shell execution by web server user (RCE outcome - RHEL/Rocky, uid=48) ---
-a always,exit -F arch=b64 -S execve -F uid=48 -F exe=/bin/bash -k cve_2026_23918_rce_shell_rhel
-a always,exit -F arch=b64 -S execve -F uid=48 -F exe=/bin/sh   -k cve_2026_23918_rce_shell_rhel

## --- Web root file creation (web shell deployment) ---
## Post-RCE, the most common next step is writing a persistent web shell.
## Monitor web root directories for new file creation and write operations.
## Adjust paths for your DocumentRoot configuration.
-w /var/www/html     -p wa -k cve_2026_23918_webroot_write
-w /var/www          -p wa -k cve_2026_23918_webroot_write
-w /srv/www          -p wa -k cve_2026_23918_webroot_write
-w /usr/share/apache2/default-site -p wa -k cve_2026_23918_webroot_write

## --- Outbound network connections by web server user (reverse shell) ---
## Apache workers do not normally initiate outbound TCP connections.
## connect() syscalls by www-data/apache indicate post-exploitation activity.
-a always,exit -F arch=b64 -S connect -F uid=33 -k cve_2026_23918_apache_outbound_deb
-a always,exit -F arch=b64 -S connect -F uid=48 -k cve_2026_23918_apache_outbound_rhel

## --- Apache config and module modification (persistence) ---
## An attacker with RCE may attempt to persist by modifying Apache config
## or dropping a malicious module. Watch for writes to config directories.
-w /etc/apache2      -p wa -k cve_2026_23918_apache_config
-w /etc/httpd        -p wa -k cve_2026_23918_apache_config
-w /etc/apache2/mods-enabled -p wa -k cve_2026_23918_apache_mods

충돌 이벤트와 네트워크 활동 간의 상관 관계

배포 후, 다음의 ausearch 원라이너를 사용하여 충돌 후 셸 시퀀스를 확인하세요:```bash

Find all CVE-2026-23918 related auditd events from the past 24 hours

sudo ausearch -k cve_2026_23918_sigabrt
-k cve_2026_23918_rce_shell_deb
-k cve_2026_23918_rce_shell_rhel
-k cve_2026_23918_webroot_write
--start yesterday -i

Look for www-data process trees that include shell execution

sudo ausearch -k cve_2026_23918_rce_shell_deb --start today -i | grep -A5 "exe="

root@kitploit:~
---

## Wazuh 규칙

사용자 정의 규칙 파일로 저장합니다 (예: `/var/ossec/etc/rules/local_rules.xml`).

> **전제 조건:**
> - 위에 배포된 Auditd 규칙 및 Wazuh auditd 디코더 활성화
> - Apache 오류 로그 (`/var/log/apache2/error.log` 또는 `/var/log/httpd/error_log`)가 Wazuh 모니터링 파일에 추가됨
> - Apache 액세스 로그에서 HTTP/2 연결 오류 패턴 모니터링```xml
<!-- ==============================================================
     CVE-2026-23918 Apache HTTP/2 Double-Free — Wazuh Rules
     Requires:
       - auditd rules from cve-2026-23918.rules deployed
       - Apache error log monitored by Wazuh agent
     ============================================================== -->

<!-- Level 10: Apache worker crash signal (SIGABRT) detected via auditd -->
<rule id="113001" level="10">
    <if_group>auditd</if_group>
    <field name="audit.key">cve_2026_23918_sigabrt</field>
    <description>CVE-2026-23918: SIGABRT sent to process — possible Apache worker double-free crash (DoS exploitation)</description>
    <group>cve,denial_of_service,apache,http2,</group>
</rule>

<!-- Level 10: SIGSEGV variant crash path -->
<rule id="113002" level="10">
    <if_group>auditd</if_group>
    <field name="audit.key">cve_2026_23918_sigsegv</field>
    <description>CVE-2026-23918: SIGSEGV sent to process — possible Apache worker memory corruption crash</description>
    <group>cve,denial_of_service,apache,http2,</group>
</rule>

<!-- Level 14 CRITICAL: Multiple worker crashes in short window — active DoS -->
<rule id="113003" level="14" frequency="3" timeframe="60">
    <if_matched_sid>113001</if_matched_sid>
    <description>CVE-2026-23918 CRITICAL: Multiple Apache worker SIGABRT crashes within 60 seconds — active DoS exploitation in progress</description>
    <group>cve,denial_of_service,apache,http2,high_confidence,</group>
</rule>

<!-- Level 15 CRITICAL: Shell execution by web server user — RCE achieved -->
<rule id="113004" level="15">
    <if_group>auditd</if_group>
    <field name="audit.key">cve_2026_23918_rce_shell_deb|cve_2026_23918_rce_shell_rhel</field>
    <description>CVE-2026-23918 CRITICAL: Shell executed by web server user (www-data/apache) — RCE likely achieved, immediate incident response required</description>
    <group>cve,rce,privilege_escalation,apache,http2,high_confidence,</group>
</rule>

<!-- Level 14 CRITICAL: Web shell written to web root -->
<rule id="113005" level="14">
    <if_group>auditd</if_group>
    <field name="audit.key">cve_2026_23918_webroot_write</field>
    <description>CVE-2026-23918: File written to web root directory — possible web shell deployment post-RCE</description>
    <group>cve,rce,webshell,apache,</group>
</rule>

<!-- Level 13 CRITICAL: Outbound connection by Apache worker process -->
<rule id="113006" level="13">
    <if_group>auditd</if_group>
    <field name="audit.key">cve_2026_23918_apache_outbound_deb|cve_2026_23918_apache_outbound_rhel</field>
    <description>CVE-2026-23918: Outbound TCP connection by web server user — possible reverse shell post-RCE</description>
    <group>cve,rce,reverse_shell,apache,</group>
</rule>

<!-- Level 14: RCE shell followed by outbound connection (reverse shell confirmed) -->
<rule id="113007" level="14">
    <if_matched_sid>113004</if_matched_sid>
    <if_group>auditd</if_group>
    <field name="audit.key">cve_2026_23918_apache_outbound_deb|cve_2026_23918_apache_outbound_rhel</field>
    <description>CVE-2026-23918 CRITICAL: Shell execution AND outbound connection by web server user — reverse shell active</description>
    <group>cve,rce,reverse_shell,apache,high_confidence,</group>
</rule>

<!-- Level 12: Apache config modified (persistence attempt) -->
<rule id="113008" level="12">
    <if_group>auditd</if_group>
    <field name="audit.key">cve_2026_23918_apache_config|cve_2026_23918_apache_mods</field>
    <description>CVE-2026-23918: Apache config or module directory modified — possible attacker persistence attempt</description>
    <group>cve,rce,persistence,apache,</group>
</rule>

<!-- Level 10: Apache error log — child process crash (log-based correlation) -->
<!-- Requires Apache error log monitored by Wazuh, decoded via apache decoder -->
<rule id="113009" level="10">
    <decoded_as>apache-errorlog</decoded_as>
    <match>child pid \d+ exit signal Aborted|child process \d+ still did not exit|segmentation fault</match>
    <description>CVE-2026-23918: Apache child process crash in error log — possible double-free DoS exploitation</description>
    <group>cve,denial_of_service,apache,http2,</group>
</rule>

<!-- Level 13: Multiple Apache child crashes in error log + auditd SIGABRT (high confidence) -->
<rule id="113010" level="13">
    <if_matched_sid>113009</if_matched_sid>
    <if_matched_sid>113001</if_matched_sid>
    <description>CVE-2026-23918: Apache error log crash + auditd SIGABRT — high-confidence active DoS, investigate immediately</description>
    <group>cve,denial_of_service,apache,http2,high_confidence,</group>
</rule>

YARA Rules

Save as cve_2026_23918.yar

중요 범위 참고 사항: Copy Fail(CVE-2026-31431)과 달리 YARA는 이 취약점의 익스플로잇 트리거를 감지할 수 없습니다. 트리거는 네트워크 연결을 통해 전송되는 두 개의 원시 HTTP/2 프레임입니다 — 스캔할 스크립트나 파일이 없습니다. 아래 YARA 규칙은 다음을 대상으로 합니다:

  1. 성공적인 RCE 후에 배포될 수 있는 사후 익스플로잇 웹 셸
  2. 웹 접근 가능 파일의 리버스 셸 원라이너 및 인코딩된 페이로드
  3. 피벗 호스트 또는 공격자 준비 서버에 존재하는 경우 익스플로잇 도구 자체

권장 스캔 범위: 웹 루트 디렉토리(/var/www/, /srv/www/), Apache 임시 디렉토리(/tmp/, /var/tmp/), 그리고 www-data 또는 apache가 소유한 최근 생성된 파일.```yara rule CVE_2026_23918_PostExploit_PHP_WebShell { meta: description = "Post-exploitation PHP web shell — possible CVE-2026-23918 outcome" author = "Detection Engineering" reference = "https://insomnisec.com/posts/2026-05-05-cve-2026-23918-apache-http2-rce_v2/" cve = "CVE-2026-23918" date = "2026-05-08" severity = "Critical" note = "Not specific to CVE-2026-23918 trigger — detects likely post-exploitation artifacts"

root@kitploit:~
strings:
    $php_open       = "<?php" ascii nocase
    $php_short      = "<?" ascii nocase

    // OS command execution functions
    $sys            = "system("       ascii nocase
    $exec           = "exec("         ascii nocase
    $passthru       = "passthru("     ascii nocase
    $shell_exec     = "shell_exec("   ascii nocase
    $popen          = "popen("        ascii nocase
    $proc_open      = "proc_open("    ascii nocase

    // Parameter sourcing — required for command injection
    $get_param      = "$_GET["        ascii
    $post_param     = "$_POST["       ascii
    $req_param      = "$_REQUEST["    ascii
    $cookie_param   = "$_COOKIE["     ascii
    $server_param   = "$_SERVER["     ascii

    // Obfuscation patterns common in web shells
    $b64decode      = "base64_decode(" ascii nocase
    $str_rot13      = "str_rot13("    ascii nocase
    $gzinflate      = "gzinflate("    ascii nocase
    $eval_call      = "eval("         ascii nocase

    // Common web shell capability strings
    $phpinfo        = "phpinfo()"     ascii nocase
    $file_put       = "file_put_contents(" ascii nocase

condition:
    filesize < 512KB and
    (
        // Classic command web shell: PHP + execution function + parameter input
        ($php_open or $php_short) and
        any of ($sys, $exec, $passthru, $shell_exec, $popen, $proc_open) and
        any of ($get_param, $post_param, $req_param, $cookie_param)
    )
    or
    (
        // Obfuscated web shell: eval + decode chain
        ($php_open or $php_short) and
        $eval_call and
        any of ($b64decode, $str_rot13, $gzinflate)
    )

}

rule CVE_2026_23918_PostExploit_ReverseShell_InFile { meta: description = "Reverse shell one-liner in web-accessible file — possible post-RCE persistence" author = "Detection Engineering" cve = "CVE-2026-23918" date = "2026-05-08" severity = "Critical" note = "Scan web directories and /tmp; may also appear in crontabs and rc.local"

root@kitploit:~
strings:
    // Bash TCP reverse shell
    $bash_tcp       = "/dev/tcp/"                   ascii
    $bash_rev       = "bash -i >&"                  ascii nocase

    // Netcat reverse shell
    $nc_e           = "nc -e /bin/"                 ascii nocase
    $nc_c           = "nc -c /bin/"                 ascii nocase
    $ncat_e         = "ncat -e /bin/"               ascii nocase

    // Python reverse shell
    $py_socket      = "import socket,subprocess"    ascii
    $py_pty         = "import pty;pty.spawn"        ascii

    // Perl reverse shell
    $perl_rev       = "perl -e 'use Socket"        ascii

    // Common reverse shell via curl/wget pipe to bash
    $curl_bash      = "curl http"                   ascii
    $wget_bash      = "wget -O- http"               ascii
    $bash_pipe      = "|bash"                       ascii

condition:
    filesize < 1MB and
    (
        ($bash_tcp and $bash_rev)
        or ($nc_e or $nc_c or $ncat_e)
        or ($py_socket and $py_pty)
        or $perl_rev
        or ($curl_bash and $bash_pipe)
        or ($wget_bash and $bash_pipe)
    )

}

rule CVE_2026_23918_ExploitTool_Artifacts { meta: description = "CVE-2026-23918 exploit tool artifacts — for scanning attacker staging hosts or memory dumps" author = "Detection Engineering" reference = "https://hadrian.io/blog/cve-2026-23918-apache-http-server-double-free-rce-in-http-2-implementation" cve = "CVE-2026-23918" date = "2026-05-08" severity = "High" note = "Matches known PoC tool strings — not expected in production Apache environments"

root@kitploit:~
strings:
    // h2_mplx.c specific identifier from public PoC analysis
    $mplx_ref       = "h2_mplx_c1_client_rst"      ascii
    $spurge_ref     = "c1_purge_streams"            ascii
    $stream_ref     = "h2_stream_destroy"           ascii

    // CVE reference strings that appear in PoC tools
    $cve_str        = "CVE-2026-23918"              ascii
    $version_target = "Apache/2.4.66"               ascii

    // HTTP/2 HEADERS + RST_STREAM frame bytes (common in PoC HTTP/2 libraries)
    // HTTP/2 HEADERS frame header: type=0x01
    $h2_headers_frame  = { 00 00 ?? 01 }
    // HTTP/2 RST_STREAM frame header: type=0x03 with payload=4
    $h2_rst_frame      = { 00 00 04 03 00 }

    // Python h2 library usage (hyper-h2) typical in PoC tools
    $hyper_h2       = "import h2"                   ascii
    $h2_connection  = "H2Connection"                ascii

condition:
    (
        ($mplx_ref or $spurge_ref or $stream_ref)
        or
        ($cve_str and $version_target)
        or
        ($hyper_h2 and $h2_connection and $h2_rst_frame)
    )

}

root@kitploit:~
---

## MISP 이벤트 템플릿

`misp_cve_2026_23918.json`으로 저장한 후 MISP → Events → Import를 통해 가져오십시오.

> 가져오기 전에 플레이스홀더 UUID를 새로 생성된 UUID4로 바꾸십시오.```json
{
    "Event": {
        "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "info": "CVE-2026-23918 Apache mod_http2 Double-Free — Remote DoS and possible RCE",
        "threat_level_id": "2",
        "analysis": "2",
        "date": "2026-05-04",
        "Attribute": [
            {
                "type": "vulnerability",
                "category": "External analysis",
                "to_ids": false,
                "uuid": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
                "comment": "CVE identifier",
                "value": "CVE-2026-23918"
            },
            {
                "type": "text",
                "category": "Other",
                "to_ids": false,
                "uuid": "c3d4e5f6-a7b8-9012-cdef-012345678902",
                "comment": "Vulnerability description",
                "value": "Double-free in Apache HTTP Server 2.4.66 mod_http2 h2_mplx.c stream cleanup path. Triggered by HTTP/2 HEADERS frame immediately followed by RST_STREAM with non-zero error code before stream registration. Results in DoS (confirmed in-wild) or RCE (lab-demonstrated) in multi-threaded MPM configurations."
            },
            {
                "type": "text",
                "category": "Other",
                "to_ids": false,
                "uuid": "d4e5f6a7-b8c9-0123-defa-123456789003",
                "comment": "Affected component",
                "value": "Apache HTTP Server 2.4.66, mod_http2 module, h2_mplx.c — multi-threaded MPM only (event, worker). MPM prefork is NOT affected."
            },
            {
                "type": "text",
                "category": "Other",
                "to_ids": false,
                "uuid": "e5f6a7b8-c9d0-1234-efab-234567890104",
                "comment": "RCE precondition",
                "value": "RCE requires APR mmap allocator (default on Debian/Ubuntu and official Apache Docker images). Scoreboard at fixed address bypasses ASLR for practical exploitation."
            },
            {
                "type": "text",
                "category": "Other",
                "to_ids": false,
                "uuid": "f6a7b8c9-d0e1-2345-fabc-345678901205",
                "comment": "Fix commit — r1930444",
                "value": "https://svn.apache.org/viewvc?view=revision&revision=1930444"
            },
            {
                "type": "text",
                "category": "Other",
                "to_ids": false,
                "uuid": "a7b8c9d0-e1f2-3456-abcd-456789012306",
                "comment": "Fix commit — r1930796",
                "value": "https://svn.apache.org/viewvc?view=revision&revision=1930796"
            },
            {
                "type": "text",
                "category": "Other",
                "to_ids": true,
                "uuid": "b8c9d0e1-f2a3-4567-bcde-567890123407",
                "comment": "IoC: HTTP/2 frame trigger sequence",
                "value": "HTTP/2 HEADERS frame (type=0x01) immediately followed by RST_STREAM (type=0x03) with non-zero error code, same stream ID, before multiplexer stream registration"
            },
            {
                "type": "text",
                "category": "Other",
                "to_ids": true,
                "uuid": "c9d0e1f2-a3b4-5678-cdef-678901234508",
                "comment": "IoC: RST_STREAM frame bytes (raw)",
                "value": "00 00 04 03 00 [stream_id 4 bytes] [non-zero error code 4 bytes]"
            },
            {
                "type": "text",
                "category": "Other",
                "to_ids": true,
                "uuid": "d0e1f2a3-b4c5-6789-defa-789012345609",
                "comment": "IoC: Server response header (vulnerable version)",
                "value": "Server: Apache/2.4.66"
            },
            {
                "type": "text",
                "category": "Other",
                "to_ids": true,
                "uuid": "e1f2a3b4-c5d6-7890-efab-890123456710",
                "comment": "Exploitation status",
                "value": "DoS exploitation confirmed in the wild. RCE demonstrated in lab conditions; widespread weaponization anticipated."
            },
            {
                "type": "text",
                "category": "Other",
                "to_ids": false,
                "uuid": "f2a3b4c5-d6e7-8901-fabc-901234567811",
                "comment": "Immediate mitigation",
                "value": "Disable mod_http2: remove 'Protocols h2 h2c' from Apache config and restart. Or switch to MPM prefork. Definitive fix: upgrade to Apache HTTP Server 2.4.67."
            },
            {
                "type": "url",
                "category": "External analysis",
                "to_ids": false,
                "uuid": "a3b4c5d6-e7f8-9012-abcd-012345678912",
                "comment": "Apache official advisory",
                "value": "https://httpd.apache.org/security/vulnerabilities_24.html"
            },
            {
                "type": "url",
                "category": "External analysis",
                "to_ids": false,
                "uuid": "b4c5d6e7-f8a9-0123-bcde-123456789013",
                "comment": "oss-security disclosure",
                "value": "https://seclists.org/oss-sec/2026/q2/387"
            }
        ],
        "Object": [
            {
                "name": "vulnerability",
                "meta-category": "vulnerability",
                "Attribute": [
                    {
                        "type": "vulnerability",
                        "object_relation": "id",
                        "value": "CVE-2026-23918"
                    },
                    {
                        "type": "cvss-score",
                        "object_relation": "cvss-score",
                        "value": "8.8"
                    },
                    {
                        "type": "text",
                        "object_relation": "summary",
                        "value": "Apache mod_http2 double-free via HTTP/2 early reset — remote DoS and possible RCE"
                    }
                ]
            }
        ]
    }
}

패치 및 수정

업그레이드 경로

버전상태조치
2.4.67패치됨대상 버전
2.4.66취약즉시 업그레이드
2.4.65 및 이전 버전이 특정 버그의 영향을 받지 않음

배포판 업데이트 명령:

업그레이드 후 확인:```bash apache2 -v # or httpd -v

Should show: Apache/2.4.67

root@kitploit:~
### 2.4.67에서 패치된 기타 CVE

2.4.67 릴리스는 5개의 CVE를 해결합니다. CVE-2026-23918과 함께 가장 중요한 두 가지는 다음과 같습니다.

- **CVE-2026-24072** — Windows에서 CGI 스크립트 처리를 통한 권한 상승(Windows 배포에만 영향)
- **CVE-2026-24081** — `mod_rewrite` 표현식 평가로 `.htaccess` 작성자가 httpd 사용자로 임의 파일을 읽을 수 있음(2.4.66 및 이전 버전에 영향, 2026-01-20 보고)
- **CVE-2026-24088** — 악성 AJP 백엔드의 조작된 AJP 메시지를 통해 `mod_proxy_ajp`에서 힙 버퍼 오버플로 발생(2.4.66 및 이전 버전에 영향)

2.4.67로 업그레이드하면 한 번의 작업으로 다섯 가지 모두가 해결됩니다.

---

## 주요 침해 지표(IoC) 참조

| 지표 | 값 | 신뢰도 | 비고 |
|---|---|---|---|
| 영향을 받는 버전 | Server 헤더의 `Apache/2.4.66` | **높음** | 존재 자체가 노출을 나타냄 |
| HTTP/2 프레임 유형 | 0이 아닌 오류 코드가 있는 RST_STREAM (0x03) | 중간 | 합법적인 연결 오류도 동일하게 생성 |
| 프레임 바이트 패턴 | `00 00 04 03 00` (RST_STREAM 헤더) | 중간 | 임계값과 결합 시 높음 |
| RST 플러드 임계값 | 30초 내 동일 출처에서 0이 아닌 오류의 RST_STREAM >10개 | **높음** | 실제 공격에서 사용되는 DoS 도구와 일치 |
| Apache worker의 SIGABRT | `httpd`/`apache2` PID로 전송된 신호 6 | **높음** | 정상 worker는 중단되지 않음 |
| www-data의 셸 실행 | uid 33 또는 48에 의한 bash/sh의 `execve()` | **심각** | RCE를 강력히 시사 |
| Apache 사용자의 아웃바운드 연결 | uid 33 또는 48이 외부 IP에 `connect()` | **심각** | 리버스 셸을 강력히 시사 |
| 웹 루트에 웹 파일 생성 | `/var/www` 아래에 새 `.php`/`.py`/`.sh` 파일 작성 | **높음** | 웹 셸 배포를 나타낼 수 있음 |
| MPM 유형 | `mpm_prefork` | 해당 없음 — **영향 없음** | `apachectl -V \| grep MPM`으로 확인 |
| RCE 선행 조건 | APR mmap 할당자 | 맥락적 | Debian/Ubuntu에서 기본값; RHEL에서는 기본값 아님 |

---

*탐지 패키지는 [httpd.apache.org/security](https://httpd.apache.org/security/)의 Apache HTTP Server 보안 권고를 기준으로 유지 관리됩니다. 이 규칙으로 다루지 않는 익스플로잇 변형 또는 사후 익스플로잇 패턴을 관찰하시면 이슈를 열어 주십시오.*
도구 다운로드
알려진 다른 CVE가 있을 수 있음 — 권고 검토
배포판명령
Ubuntu / Debiansudo apt-get update && sudo apt-get upgrade apache2
RHEL / Rocky / AlmaLinuxsudo dnf update httpd
Amazon Linuxsudo dnf update httpd
SUSE / openSUSEsudo zypper update apache2
Arch Linuxsudo pacman -Syu