Jawaban langsung: CVE-2026-119618 adalah celah race condition di mod_http2, modul HTTP/2 Apache HTTP Server. Red Hat memberi skor CVSS 3.1 9.8: penyerang dari jaringan, tanpa login, bisa menjalankan kode di server. Hari ini, cek versi Apache dan status HTTP/2, pasang paket aman, lalu restart penuh Apache.
Apache merilis httpd 2.4.71 pada 11 November 2026. Versi 2.4.55 sampai 2.4.70 rentan bila HTTP/2 aktif. Rilis yang sama juga menutup CVE-2026-106023 di mod_md dan CVE-2026-109163 di mod_vhost_alias.
Kondisi utama: Menurut halaman CVE Red Hat, server terdampak hanya bila mod_http2 dimuat dan direktif Protocols memuat h2 atau h2c. Red Hat juga menulis bahwa riset publik sudah menunjukkan exploit yang andal pada konfigurasi default dengan mod_http2 aktif.
Batas: Per 13 November 2026, CISA KEV tidak memuat celah ini, dan kami tidak menemukan laporan serangan. Artikel ini tidak memuat isi request, payload, atau urutan serangan.
Kami membaca advisory keamanan Apache httpd 2.4, catatan CVE-2026-119618, halaman CVE Red Hat, pelacak keamanan Debian, USN-9090-1, changelog EasyApache 4 cPanel, dan CISA KEV pada 13 November 2026, pukul 13.30 sampai 14.05 WIB. Skrip di langkah 1, 3, 4, dan 5 kami uji di container podman dengan image resmi httpd, Debian, Ubuntu, dan UBI 9. Kami tidak menguji cPanel EasyApache 4, karena tidak ada image resmi.
Masalah: HTTP/2 aktif di banyak server Apache
Apache HTTP Server menjalankan situs di VPS, server kantor, image Docker, dan shared hosting berbasis cPanel. Admin menyalakan HTTP/2 agar halaman dengan banyak berkas termuat lebih cepat.
Di uji kami pada Debian dan Ubuntu, perintah a2enmod http2 langsung memasang baris Protocols h2 h2c http/1.1. Image resmi httpd dan RHEL 9 tidak memasang baris h2 secara default. Jadi status HTTP/2 berbeda per server, dan Anda harus mengecek setiap server.
Analisa Rama Digital: server dengan port 443 terbuka dan HTTP/2 aktif bisa dijangkau penyerang dari internet sebelum login. Kondisi: versi rentan dan modul dimuat. Batas: advisory tidak menulis port, karena HTTP/2 bisa jalan di port mana pun.

Anthropic OSS Scanner melaporkan celah ini pada 26 Oktober 2026, lalu Google Cloud Vulnerability Research melaporkannya pada 3 November. Red Hat membuka informasi pada 11 November pukul 12.52 UTC, dan catatan CVE terbit pukul 14.54 UTC. Debian, Ubuntu, cPanel, dan image Docker httpd:2.4.71 menyusul pada 12 November.
Cara kerja: race condition di mod_http2
Celah ini bekerja sebelum login, jadi password yang kuat dan MFA tidak menjaga server dari celah ini.
Bagian ini memakai ringkasan resmi. Tujuannya membantu Anda memilih langkah yang tepat, bukan menjelaskan cara menyerang.
Ringkasan dari Apache dan Red Hat
Menurut advisory keamanan Apache httpd 2.4, race condition pada sumber daya bersama di fungsi assign_headers() di mod_http2 bisa berujung pada remote code execution. Jenisnya CWE-362, yaitu eksekusi bersamaan tanpa sinkronisasi yang benar.
halaman CVE Red Hat menulis bahwa akar masalah adalah cacat thread-safety saat mod_http2 menangani permintaan HTTP/2 yang berjalan bersamaan. Akibatnya heap rusak, dan penyerang bisa menjalankan kode.
3 CVE di rilis 2.4.71
Rilis 2.4.71 memuat 3 CVE. Paket aman di tabel versi menutup CVE-2026-119618. Cek changelog distro Anda untuk 2 CVE lain.
| CVE | Jenis celah | Skor atau label | Rentan | Akibat |
|---|---|---|---|---|
| CVE-2026-119618 | Race condition di mod_http2 (CWE-362) | Red Hat CVSS 3.1 9.8, Apache critical | 2.4.55 sampai 2.4.70 | Remote code execution tanpa login bila HTTP/2 aktif |
| CVE-2026-106023 | NULL pointer dereference di mod_md | Apache important | 2.4.30 sampai 2.4.70 | Child process Apache crash |
| CVE-2026-109163 | Tulis lewat batas 1 byte di stack, mod_vhost_alias | Apache low | 2.4.69 sampai 2.4.70 | Menimpa 1 byte di stack |

Skor 9.8 berasal dari Red Hat. Apache memberi label critical. Vektor AV:N/AC:L/PR:N/UI:N berarti serangan lewat jaringan, mudah, tanpa hak akses, dan tanpa interaksi user.
Status eksploitasi per 13 November 2026
halaman CVE Red Hat menulis bahwa riset publik menunjukkan exploit yang andal pada server dengan konfigurasi default dan mod_http2 aktif. CISA KEV tidak memuat CVE-2026-119618, dan kami tidak menemukan laporan serangan di internet.
Analisa Rama Digital: riset exploit yang publik memperpendek waktu sampai serangan massal. Kondisi: server terbuka ke internet, HTTP/2 aktif, dan patch belum terpasang. Batas: kami tidak membaca dan tidak menguji exploit itu.
Siapa yang paling berisiko
Server publik dengan HTTP/2 aktif dan paket lama paling berisiko.
Tabel ini merangkum halaman CVE Red Hat, dokumentasi direktif Protocols, dan analisa kami.
| Kondisi server | Risiko | Alasan |
|---|---|---|
| HTTP/2 aktif (Protocols h2 atau h2c) di server yang terbuka ke internet | Tinggi | Ini jalur celah menurut Red Hat |
| Apache 2.4.55 sampai 2.4.70 dari source atau image Docker | Tinggi | Update distro tidak mengganti Apache ini |
| IP asal server bisa dibuka langsung, walau situs di balik CDN | Tinggi | Analisa Rama Digital: penyerang bisa melewati CDN |
| Shared hosting atau reseller cPanel | Periksa | Provider memegang patch dan jadwal restart |
| Update keamanan otomatis mati | Periksa | Server tetap di paket lama |
| Hanya HTTP/1.1, modul http2 tidak dimuat, atau RHEL 8 | Rendah | Jalur HTTP/2 tidak ada. Tetap update untuk CVE lain. |

Pola yang sama muncul di celah SSL VPN SonicWall CVE-2026-19868: layanan yang terbuka ke internet menjadi target pertama. Untuk produk Apache lain, baca juga celah Apache OFBiz CVE-2026-83542.
Catatan untuk MPM prefork
Menurut panduan HTTP/2 Apache, HTTP/2 didukung di semua MPM bawaan httpd, dengan batas berat di prefork. Di uji kami, httpd 2.4.70 dengan prefork dan Protocols h2 h2c http/1.1 menjawab curl dengan HTTP/1.1.
Analisa Rama Digital: jangan anggap prefork aman. Skrip di langkah 1 tetap menulis RENTAN bila modul dimuat dan Protocols memuat h2 atau h2c, jadi pasang patch.
Versi rentan dan versi aman
Cocokkan sumber paket Apache Anda dengan tabel ini. Paket distro memakai nomor versi lama, jadi bandingkan nomor paket lengkap.
| Sumber paket | Rentan per 13 November 2026 | Versi aman |
|---|---|---|
| Apache dari source, image Docker httpd | 2.4.55 sampai 2.4.70 | 2.4.71 atau image httpd:2.4.71 |
| Debian 13 trixie | Lebih lama dari 2.4.71-1~deb13u1 | 2.4.71-1~deb13u1 (DSA-6620-1) |
| Debian 12 bookworm | Lebih lama dari 2.4.71-1~deb12u1 | 2.4.71-1~deb12u1 (DLA-4902-1) |
| Ubuntu 26.10 | Lebih lama dari 2.4.68-1ubuntu6.2 | 2.4.68-1ubuntu6.2 (USN-9090-1) |
| Ubuntu 26.04 | Lebih lama dari 2.4.66-2ubuntu2.8 | 2.4.66-2ubuntu2.8 (USN-9090-1) |
| Ubuntu 24.04 | Lebih lama dari 2.4.58-1ubuntu8.19 | 2.4.58-1ubuntu8.19 (USN-9090-1) |
| Ubuntu 22.04 | Lebih lama dari 2.4.52-1ubuntu4.27, terdampak lewat backport | 2.4.52-1ubuntu4.27 (USN-9090-1) |
| Ubuntu 20.04 | Lebih lama dari 2.4.41-4ubuntu3.23+esm11 | 2.4.41-4ubuntu3.23+esm11, hanya lewat Ubuntu Pro |
| RHEL 10 | mod_http2 lebih lama dari versi aman | mod_http2-2.0.29-5.el10_3.1 (RHSA-2026:98978) |
| RHEL 9 | mod_http2 lebih lama dari versi aman | mod_http2-2.0.26-7.el9_9.1 (RHSA-2026:98981) |
| RHEL 8 dan lebih lama | Tidak terdampak menurut Red Hat | Tetap pasang update untuk CVE lain |
| cPanel EasyApache 4 | ea-apache24 2.4.70 | ea-apache24 2.4.71 (EA4 25.96) |
| mod_h2 mandiri dari GitHub | 2.0.8 sampai 2.0.42 | Rilis mod_h2 yang menyebut CVE-2026-119618 |

Data tabel berasal dari advisory keamanan Apache httpd 2.4, pelacak keamanan Debian, USN-9090-1, halaman CVE Red Hat, dan changelog EasyApache 4 cPanel. Untuk stream RHEL EUS, ikuti RHSA per stream di halaman CVE Red Hat.
Catatan Ubuntu 22.04 dan 20.04: Nomor upstream 2.4.52 dan 2.4.41 ada di bawah 2.4.55. Tetapi USN-9090-1 menulis bahwa kedua rilis terdampak, karena paketnya memuat backport mod_http2. Ubuntu 20.04 mendapat paket aman hanya lewat Ubuntu Pro.
Catatan image Docker: Menurut image resmi httpd di Docker Hub, tag 2.4.71 dan 2.4.71-alpine terbit pada 12 November 2026. Tulis tag versi yang tepat di compose. Container yang berjalan tetap memakai image lama sampai Anda membuatnya ulang.
Prasyarat sebelum mulai
- Akses sudo atau root ke setiap server Apache, termasuk server staging dan server cadangan.
- Daftar server yang menjalankan Apache, termasuk container Docker dan reverse proxy.
- Jendela maintenance. Restart Apache memutus koneksi yang sedang berjalan selama beberapa detik.
- Backup konfigurasi Apache dan backup data situs yang terbaru.
- Untuk shared hosting: kontak support provider dan nomor tiket Anda.
Langkah 1: Cek versi Apache dan status HTTP/2
Server terdampak bila versi atau paketnya rentan dan HTTP/2 aktif. Jalankan cek manual ini di setiap server:
# Versi Apache
apache2 -v # Debian dan Ubuntu
httpd -v # RHEL, AlmaLinux, Rocky, dan image Docker httpd
# Modul HTTP/2 dimuat atau tidak
apachectl -M 2>/dev/null | grep http2
# Semua baris Protocols. Opsi -R ikut membaca symlink di mods-enabled dan sites-enabled.
sudo grep -Rn "^\s*Protocols" /etc/apache2 /etc/httpd /usr/local/apache2/conf 2>/dev/null
# Versi paket distro
dpkg-query -W apache2-bin # Debian dan Ubuntu
rpm -q mod_http2 # RHEL 9 dan 10
Menurut dokumentasi mod_http2, Anda harus menyalakan HTTP/2 lewat direktif Protocols. Nilai h2 berarti HTTP/2 lewat TLS, dan h2c berarti HTTP/2 lewat TCP biasa.
Untuk banyak server, simpan skrip ini sebagai cek-versi-apache.sh. Skrip membaca versi Apache, changelog paket, modul, baris Protocols, dan waktu mulai proses. Skrip hanya membaca dan tidak mengubah konfigurasi.
#!/usr/bin/env bash
# Cek Apache HTTP Server terhadap CVE-2026-119618 (mod_http2, advisory Apache 11 November 2026).
# Rentan: Apache 2.4.55 sampai 2.4.70 dengan HTTP/2 aktif. Aman: Apache 2.4.71, atau paket distro yang memuat patch.
# Ubuntu 20.04 dan 22.04 juga terdampak menurut USN-9090-1, karena paketnya memuat backport.
# Pakai di server: sudo bash cek-versi-apache.sh
# Banyak server: for h in web-01 web-02; do ssh "$h" 'sudo bash -s' < cek-versi-apache.sh; done
# Skrip hanya membaca. Skrip tidak mengubah konfigurasi dan tidak me-restart Apache.
# Kode keluar: 0 aman atau tidak terdampak, 2 perlu tindakan, 1 Apache tidak ditemukan.
set -u
CVE=CVE-2026-119618
PATH="$PATH:/usr/sbin:/sbin:/usr/local/apache2/bin:/usr/local/apache/bin"
# Buang karakter kontrol dan batasi panjang, agar isi berkas tidak bisa mengubah tampilan terminal.
bersih() { tr -cd '[:print:]\n' | cut -c1-"${1:-90}"; }
baris() { printf '%-14s%s\n' "$1" "$2"; }
lebih_rendah() { [ "$1" != "$2" ] && [ "$(printf '%s\n%s\n' "$1" "$2" | sort -V | head -n 1)" = "$1" ]; }
# Versi upstream: lama (di bawah 2.4.55), rentan (2.4.55 sampai 2.4.70), atau aman (2.4.71 ke atas).
kelas_upstream() { if lebih_rendah "$1" 2.4.55; then echo lama; elif lebih_rendah "$1" 2.4.71; then echo rentan; else echo aman; fi; }
deb_versi() { [ "$(dpkg-query -W -f='${db:Status-Abbrev}' "$1" 2>/dev/null)" = "ii " ] && dpkg-query -W -f='${Version}' "$1"; }
rpm_lebih_rendah() { [ "$(rpm --eval "%{lua: print(rpm.vercmp('$1', '$2'))}" 2>/dev/null)" = "-1" ]; }
# Waktu mulai proses dalam detik epoch, dari /proc/PID/stat (kolom 22) dan btime di /proc/stat.
mulai_proses() {
local s t b hz
s=$(sed 's/^.*) //' "/proc/$1/stat" 2>/dev/null) || return 1
t=$(printf '%s' "$s" | awk '{print $20}'); b=$(awk '/^btime/ {print $2}' /proc/stat)
hz=$(getconf CLK_TCK 2>/dev/null || echo 100)
echo $(( b + t / hz ))
}
CTL=""
if command -v apache2ctl >/dev/null 2>&1; then CTL=apache2ctl
else for b in httpd apache2; do command -v "$b" >/dev/null 2>&1 && { CTL=$b; break; }; done; fi
if [ -z "$CTL" ]; then echo "Apache tidak ditemukan di server ini."; exit 1; fi
VER=$("$CTL" -v 2>/dev/null | sed -n 's|.*Apache/\([0-9][0-9.]*\).*|\1|p' | head -n 1)
if [ -z "$VER" ]; then echo "Versi Apache tidak terbaca dari $CTL -v."; exit 1; fi
MPM=$("$CTL" -V 2>/dev/null | sed -n 's/^Server MPM: *//p' | head -n 1 | tr -cd '[:alnum:]_')
# 1. Versi dan paket. Distro memasang patch tanpa mengganti nomor versi, jadi changelog paket dibaca lebih dulu.
KELAS=""; PAKET="tidak ada, build dari source atau image Docker"; BUKTI="versi Apache $VER"
PATCH="naik ke Apache 2.4.71, atau image httpd:2.4.71"
if command -v dpkg-query >/dev/null 2>&1 && PV=$(deb_versi apache2-bin) && [ -n "$PV" ]; then
PAKET="apache2-bin $PV"; PATCH="sudo apt update && sudo apt install --only-upgrade apache2"
if zcat /usr/share/doc/apache2-bin/changelog.Debian.gz /usr/share/doc/apache2/changelog.Debian.gz 2>/dev/null | grep -q "$CVE"; then
KELAS=aman; BUKTI="changelog paket menyebut $CVE"
else
UP=$(printf '%s' "$PV" | sed -E 's/^[0-9]+://; s/-[^-]*$//; s/[~+].*$//')
KELAS=$(kelas_upstream "$UP"); BUKTI="versi upstream $UP"
# Versi perbaikan Ubuntu dari USN-9090-1, untuk server yang tidak menyimpan changelog.
case "$PV" in
2.4.41-4ubuntu3*) FIX=2.4.41-4ubuntu3.23+esm11 ;;
2.4.52-1ubuntu4*) FIX=2.4.52-1ubuntu4.27 ;;
2.4.58-1ubuntu8*) FIX=2.4.58-1ubuntu8.19 ;;
2.4.66-2ubuntu2*) FIX=2.4.66-2ubuntu2.8 ;;
2.4.68-1ubuntu6*) FIX=2.4.68-1ubuntu6.2 ;;
*) FIX="" ;;
esac
# Ubuntu 20.04 dan 22.04 memuat backport mod_http2, jadi tabel USN berlaku walau versi upstream di bawah 2.4.55.
if [ -n "$FIX" ]; then
if dpkg --compare-versions "$PV" ge "$FIX"; then KELAS=aman; BUKTI="versi paket sama dengan atau di atas perbaikan $FIX"
else KELAS=rentan; BUKTI="versi paket di bawah perbaikan $FIX (USN-9090-1)"; fi
case "$FIX" in *esm*) PATCH="aktifkan Ubuntu Pro, lalu sudo apt update && sudo apt install --only-upgrade apache2" ;; esac
fi
fi
elif command -v rpm >/dev/null 2>&1 && rpm -q ea-apache24 >/dev/null 2>&1; then
PV=$(rpm -q --qf '%{VERSION}-%{RELEASE}' ea-apache24); PAKET="ea-apache24 $PV (cPanel EasyApache 4)"
KELAS=$(kelas_upstream "${PV%%-*}"); BUKTI="versi upstream ${PV%%-*}"; PATCH="update EasyApache 4 sampai ea-apache24 2.4.71"
elif command -v rpm >/dev/null 2>&1 && rpm -q httpd >/dev/null 2>&1; then
PATCH="sudo dnf update mod_http2"
if PV=$(rpm -q --qf '%{VERSION}-%{RELEASE}' mod_http2 2>/dev/null); then
PAKET="mod_http2 $PV"
if rpm -q --changelog mod_http2 2>/dev/null | grep -q "$CVE"; then KELAS=aman; BUKTI="changelog paket menyebut $CVE"
else
case "$PV" in
1.*) FIX=lama ;;
*.el10_3*|*.el10) FIX=2.0.29-5.el10_3.1 ;;
*.el9_9*|*.el9) FIX=2.0.26-7.el9_9.1 ;;
*) FIX="" ;;
esac
if [ "$FIX" = lama ]; then KELAS=lama; BUKTI="mod_http2 1.x, di bawah 2.0.8"
elif [ -z "$FIX" ]; then KELAS=tidak_pasti; BUKTI="versi paket tidak ada di tabel skrip"
elif rpm_lebih_rendah "$PV" "$FIX"; then KELAS=rentan; BUKTI="versi paket di bawah perbaikan $FIX"
else KELAS=aman; BUKTI="versi paket sama dengan atau di atas perbaikan $FIX"; fi
fi
else
PAKET="httpd $(rpm -q --qf '%{VERSION}-%{RELEASE}' httpd)"; KELAS=tanpa_modul; BUKTI="paket mod_http2 tidak terpasang"
fi
fi
[ -z "$KELAS" ] && KELAS=$(kelas_upstream "$VER")
# 2. HTTP/2 aktif bila modul http2 dimuat dan Protocols memuat h2 atau h2c. MPM prefork tetap melayani HTTP/2 (dokumentasi HTTP/2 Apache).
FILES=$("$CTL" -t -D DUMP_INCLUDES 2>/dev/null | sed -n 's/^ *([0-9*]*) \(\/.*\)$/\1/p')
[ -z "$FILES" ] && FILES=$(find /etc/apache2 /etc/httpd /usr/local/apache2/conf -name '*.conf' 2>/dev/null)
if "$CTL" -M 2>/dev/null | grep -qE '^ *http2_module '; then MOD=dimuat; else MOD="tidak dimuat"; fi
n=0; H2BARIS=""
while IFS= read -r f; do
[ -r "$f" ] || continue
while IFS= read -r l; do
printf '%s' "${l#*:}" | grep -qwE 'h2|h2c' || continue
n=$((n + 1))
(( n <= 3 )) && H2BARIS+="$(printf '%s:%s %s' "$f" "${l%%:*}" "$(printf '%s' "${l#*:}" | sed 's/^[[:space:]]*//')" | bersih 92)"$'\n'
done < <(grep -nE '^[[:space:]]*Protocols[[:space:]]' "$f" 2>/dev/null)
done <<< "$FILES"
if [ "$MOD" = dimuat ] && (( n > 0 )); then H2=aktif; else H2=mati; fi
# 3. Proses yang berjalan harus lebih baru dari berkas mod_http2. Bila tidak, patch belum dipakai.
RUN=$("$CTL" -t -D DUMP_RUN_CFG 2>/dev/null)
PIDF=$(printf '%s\n' "$RUN" | sed -n 's/^PidFile: "\(.*\)"$/\1/p' | head -n 1)
SR=$(printf '%s\n' "$RUN" | sed -n 's/^ServerRoot: "\(.*\)"$/\1/p' | head -n 1)
MODF=$(printf '%s\n' "$FILES" | xargs -d '\n' grep -hE '^[[:space:]]*LoadModule[[:space:]]+http2_module[[:space:]]' 2>/dev/null \
| awk '{print $3}' | tr -d '"' | head -n 1)
case "$MODF" in /*|"") ;; *) MODF="$SR/$MODF" ;; esac
PID=$( { tr -cd '0-9' < "$PIDF"; } 2>/dev/null )
RESTART=0; PROSES="Apache tidak berjalan, atau berkas PID tidak terbaca"
if [ -n "$PID" ] && [ -r "/proc/$PID/stat" ]; then
MULAI=$(mulai_proses "$PID"); PROSES="jalan sejak $(date -d "@$MULAI" '+%F %H:%M')"
if [ -f "$MODF" ] && [ "$(stat -c %Y "$MODF")" -gt "$MULAI" ]; then RESTART=1; fi
fi
echo "$CVE Apache mod_http2 (rentan: 2.4.55 sampai 2.4.70 dengan HTTP/2 aktif)"
baris "Server" "$(uname -n | bersih 40)"
baris "Apache" "$VER, MPM ${MPM:-tidak terbaca}"
baris "Paket" "$PAKET"
baris "Bukti" "$BUKTI"
baris "Modul HTTP/2" "$MOD"
baris "Protocols h2" "$n baris"
[ -n "$H2BARIS" ] && printf '%s' "$H2BARIS" | sed 's/^/ /'
baris "Proses" "$PROSES"
(( RESTART == 1 )) && baris "" "PERIKSA: berkas mod_http2 lebih baru dari proses yang berjalan."
kode=0
case "$KELAS" in
aman)
if (( RESTART == 1 )); then ST="PATCH ADA DI DISK, PROSES LAMA"; LG="restart penuh Apache agar modul baru dipakai."; kode=2
else ST="AMAN untuk $CVE"; LG="tidak perlu patch untuk CVE ini."; fi ;;
lama) ST="TIDAK TERDAMPAK $CVE"; LG="versi ini di bawah 2.4.55. Tetap pasang update distro untuk CVE lain." ;;
tanpa_modul) ST="TIDAK TERDAMPAK $CVE"; LG="mod_http2 tidak terpasang. Pasang hanya versi yang sudah dipatch." ;;
tidak_pasti) ST="TIDAK PASTI"; LG="cocokkan versi paket dengan errata vendor Anda."; kode=2 ;;
*)
kode=2
if [ "$H2" = aktif ]; then ST="RENTAN, HTTP/2 AKTIF"; LG="pasang patch hari ini. Sambil menunggu, matikan HTTP/2 (Langkah 3)."
else ST="RENTAN, HTTP/2 MATI"; LG="risiko turun. Tetap pasang patch, karena 1 baris Protocols menyalakan HTTP/2 lagi."; fi ;;
esac
baris "STATUS" "$ST"
baris "Langkah" "$LG"
(( kode == 2 )) && [ "$KELAS" != aman ] && baris "Patch" "$PATCH"
exit "$kode"
# 1 server: simpan skrip, lalu jalankan dengan sudo
sudo bash cek-versi-apache.sh
echo $? # 0 aman atau tidak terdampak, 2 perlu tindakan, 1 Apache tidak ditemukan
# Banyak server lewat SSH
for h in web-01 web-02; do ssh "$h" 'sudo bash -s' < cek-versi-apache.sh; done
# Container bernama web, dari image httpd berbasis Debian
docker exec -i web bash -s < cek-versi-apache.sh

Cek hasil: "RENTAN, HTTP/2 AKTIF" berarti pasang patch hari ini dan jalankan langkah 3 sambil menunggu. "RENTAN, HTTP/2 MATI" berarti risiko turun, tetapi tetap pasang patch. "AMAN untuk CVE-2026-119618" berarti paket sudah memuat patch.
"PATCH ADA DI DISK, PROSES LAMA" berarti paket baru sudah terpasang, tetapi Apache belum restart penuh. Jalankan langkah 5. "TIDAK PASTI" berarti skrip tidak menemukan bukti di changelog, jadi tanyakan ke vendor paket Anda.
Langkah 2: Backup konfigurasi, lalu pasang paket aman
Simpan konfigurasi Apache lebih dulu. Backup ini adalah jalan kembali bila update mengubah perilaku server.
# Debian dan Ubuntu
sudo tar czf apache-konfig-$(date +%F).tgz /etc/apache2
# RHEL, AlmaLinux, dan Rocky
sudo tar czf httpd-konfig-$(date +%F).tgz /etc/httpd
# Catat modul yang aktif sebelum update
apachectl -M > modul-sebelum.txt 2>&1
Lalu pasang paket aman sesuai sumber paket di tabel versi:
# Debian 12, Debian 13, dan Ubuntu 22.04 sampai 26.10
sudo apt update && sudo apt install --only-upgrade apache2
# Ubuntu 20.04: paket aman hanya ada di Ubuntu Pro (ESM)
sudo pro attach TOKEN-ANDA
sudo apt update && sudo apt install --only-upgrade apache2
# RHEL 9 dan 10. AlmaLinux dan Rocky: ikuti errata distro, lalu cek changelog.
sudo dnf upgrade --refresh mod_http2 httpd
rpm -q --changelog mod_http2 | grep -m 1 CVE-2026-119618
# cPanel EasyApache 4 (tidak kami uji)
sudo dnf upgrade 'ea-apache24*'
# Docker: ganti tag image ke httpd:2.4.71 di compose.yaml, lalu buat ulang container
docker pull httpd:2.4.71
docker compose up -d
Build dari source: unduh httpd 2.4.71 dari halaman unduhan Apache, cek tanda tangan atau hash berkas, lalu build dengan opsi configure yang sama. mod_h2 dari GitHub: pasang rilis mod_h2 yang menyebut CVE-2026-119618 di catatan rilisnya.
cPanel: Menurut changelog EasyApache 4 cPanel, EasyApache 4 versi 25.96 tanggal 12 November 2026 menaikkan ea-apache24 ke 2.4.71. Kami tidak menguji cPanel, jadi cek hasilnya dengan langkah 1.

Cek hasil: jalankan lagi cek-versi-apache.sh. Hasil yang benar adalah "AMAN untuk CVE-2026-119618", atau "PATCH ADA DI DISK, PROSES LAMA" bila Apache belum restart penuh.
Langkah 3: Matikan HTTP/2 sementara
Langkah ini mengurangi risiko sampai patch terpasang. Langkah ini tidak menutup celah.
Analisa Rama Digital: Apache dan Red Hat tidak memberi workaround. Kami menyusun 2 pilihan dari pernyataan Red Hat bahwa server yang hanya melayani HTTP/1.1 tidak terdampak. Batas: 1 baris Protocols lain di virtual host bisa menyalakan HTTP/2 lagi.
3a. Pakai HTTP/1.1 saja
Menurut dokumentasi direktif Protocols, direktif Protocols di virtual host menimpa nilai di level server. Jadi ubah setiap baris yang memuat h2 atau h2c, bukan hanya 1 baris.
# 1. Temukan semua baris Protocols
sudo grep -Rn "^\s*Protocols" /etc/apache2 /etc/httpd /usr/local/apache2/conf 2>/dev/null
# 2. Ubah setiap baris yang memuat h2 atau h2c menjadi: Protocols http/1.1
# Contoh yang kami uji pada image httpd:2.4.70:
sudo sed -i 's|^Protocols h2 h2c http/1.1$|Protocols http/1.1|' /usr/local/apache2/conf/httpd.conf
# 3. Uji konfigurasi. Lanjut hanya bila hasilnya Syntax OK.
sudo apachectl configtest
# 4. Restart Apache. RHEL: sudo systemctl restart httpd
sudo systemctl restart apache2
# 5. Cek dari server
curl -skI --http2 https://127.0.0.1/ | head -n 1

3b. Matikan modul mod_http2
Pilihan ini menutup semua baris Protocols sekaligus. Kami tidak menguji 3b di container, jadi jalankan configtest dulu.
# Debian dan Ubuntu
sudo a2dismod http2
sudo apachectl configtest && sudo systemctl restart apache2
# RHEL 9 dan 10: beri tanda # di depan baris LoadModule http2_module
sudo sed -i 's|^LoadModule http2_module|#LoadModule http2_module|' /etc/httpd/conf.modules.d/10-h2.conf
sudo apachectl configtest && sudo systemctl restart httpd
Bila configtest gagal, misalnya karena modul lain butuh mod_http2, kembalikan perubahan dan pakai 3a.

Cek hasil: curl dengan --http2 menjawab HTTP/1.1, dan skrip menulis "RENTAN, HTTP/2 MATI". Situs tetap jalan di HTTP/1.1. Nyalakan HTTP/2 lagi sesudah langkah 5 memberi AMAN.
Langkah 4: Cari tanda server diambil alih
Patch menutup celah, tetapi tidak membuang webshell, proses, atau cron yang penyerang tinggalkan. Jadi cari jejak itu sesudah patch.
Analisa Rama Digital: Apache belum merilis IOC. Serangan ke mod_http2 bisa membuat child process crash, jadi skrip mencari crash worker di error log, skrip baru di folder web, proses asing milik user web, dan cron milik user web.
Simpan skrip ini sebagai cek-tanda-apache.sh. Skrip hanya membaca berkas. Skrip tidak mengubah, menghapus, atau mengirim apa pun.
#!/usr/bin/env bash
# Cari tanda server Apache diserang lewat CVE-2026-119618 (mod_http2).
# Apache belum merilis IOC. Pemeriksaan ini adalah analisa Rama Digital: worker Apache yang crash,
# skrip baru di folder web, proses asing milik user web, dan jadwal cron milik user web.
# Pakai di server: sudo bash cek-tanda-apache.sh [ERROR-LOG ...]
# HARI=14 rentang hari untuk crash dan berkas baru
# USER_WEB="www-data" user yang menjalankan Apache, bila tebakan skrip salah
# Docker: simpan log lebih dulu (docker logs web 2> error-web.log), lalu beri berkas itu ke skrip.
# Skrip hanya membaca berkas. Skrip tidak mengubah, menghapus, atau mengirim apa pun.
set -u
HARI="${HARI:-14}"; [[ $HARI =~ ^[0-9]+$ ]] || HARI=14
PATH="$PATH:/usr/sbin:/sbin:/usr/local/apache2/bin:/usr/local/apache/bin"
temuan=0
# Buang karakter kontrol dan batasi panjang baris, agar isi berkas tidak bisa mengubah tampilan terminal.
bersih() { tr -cd '[:print:]\n' | cut -c1-"${1:-100}"; }
[ "$(id -u)" -ne 0 ] && echo "Catatan: jalankan dengan sudo agar semua berkas terbaca."
CTL=""; FILES=""
if command -v apache2ctl >/dev/null 2>&1; then CTL=apache2ctl
else for b in httpd apache2; do command -v "$b" >/dev/null 2>&1 && { CTL=$b; break; }; done; fi
[ -n "$CTL" ] && FILES=$("$CTL" -t -D DUMP_INCLUDES 2>/dev/null | sed -n 's/^ *([0-9*]*) \(\/.*\)$/\1/p')
konfig() { [ -n "$FILES" ] && printf '%s\n' "$FILES" | xargs -d '\n' grep -hE "$1" 2>/dev/null; }
echo "== 1. Worker Apache crash di error log ($HARI hari terakhir)"
LOGS=("$@")
if (( ${#LOGS[@]} == 0 )); then
for f in /var/log/apache2/error.log* /var/log/httpd/error_log* /usr/local/apache2/logs/error_log* \
/etc/apache2/logs/error_log* /usr/local/apache/logs/error_log*; do
[ -f "$f" ] && LOGS+=("$f")
done
fi
baca=(); for f in "${LOGS[@]}"; do
if [ -r "$f" ]; then baca+=("$f"); else echo "Berkas $(printf '%s' "$f" | bersih 80) tidak terbaca."; fi
done
if (( ${#baca[@]} == 0 )); then
echo "Error log tidak ditemukan. Beri path error log sebagai argumen."
else
batas=$(date -d "-$HARI days" +%F); n=0; akhir=""; declare -A per=()
while IFS= read -r l; do
t=$(printf '%s' "$l" | sed -nE 's/^\[[A-Za-z]{3} ([A-Za-z]{3}) +([0-9]{1,2}) [0-9:.]+ ([0-9]{4})\].*/\1 \2 \3/p')
[ -z "$t" ] && continue
d=$(date -d "$t" +%F 2>/dev/null) || continue
[[ $d < $batas ]] && continue
per[$d]=$(( ${per[$d]:-0} + 1 )); n=$((n + 1))
akhir="$d $(printf '%s' "$l" | sed -nE 's/^\[[A-Za-z]{3} [A-Za-z]{3} +[0-9]{1,2} ([0-9:]{8}).*/\1/p') ${l##*AH00052: }"
done < <(zcat -f "${baca[@]}" 2>/dev/null | grep -aE 'exit signal (Segmentation fault|Aborted|Bus error)' | bersih 300)
if (( n > 0 )); then
echo "PERIKSA: $n crash worker. Crash bisa punya sebab lain, tetapi lonjakan crash patut diperiksa."
for d in $(printf '%s\n' "${!per[@]}" | sort); do printf ' %s %s crash\n' "$d" "${per[$d]}"; done
echo " Terakhir: $(printf '%s' "$akhir" | cut -c1-96)"
temuan=$((temuan + 1))
else
echo "Tidak ada crash worker di ${#baca[@]} berkas log."
fi
fi
echo "== 2. Skrip baru di folder web ($HARI hari terakhir)"
DIRS=()
while IFS= read -r d; do [ -n "$d" ] && [ -d "$d" ] && DIRS+=("$d"); done < <(
{ konfig '^[[:space:]]*DocumentRoot[[:space:]]' | awk '{print $2}' | tr -d '"' | grep -v '^\$'
printf '%s\n' /var/www /usr/local/apache2/htdocs /home/*/public_html; } | sort -u)
n=0
if (( ${#DIRS[@]} > 0 )); then
while IFS= read -r f; do
echo "PERIKSA: $(date -r "$f" '+%F %H:%M') $(printf '%s' "$f" | bersih 90)"; n=$((n + 1))
done < <(find "${DIRS[@]}" -xdev -type f -mtime -"$HARI" \( -name '*.php' -o -name '*.phtml' -o -name '*.phar' \
-o -name '*.cgi' -o -name '*.pl' -o -name '*.py' -o -name '*.sh' -o -name '*.jsp' -o -name '.htaccess' \) \
2>/dev/null | sort -u | head -n 30)
fi
(( n == 0 )) && echo "Tidak ada (${#DIRS[@]} folder web diperiksa)"
temuan=$((temuan + n))
echo "== 3. Proses milik user web selain Apache dan PHP"
if [ -n "${USER_WEB:-}" ]; then UW=$USER_WEB
else
UW=$(konfig '^[[:space:]]*User[[:space:]]' | awk '{print $2}' | tr -d '"' | head -n 1)
case "$UW" in '${'*)
v=${UW#\$\{}; v=${v%\}}
UW=$(sed -n "s/^export $v=\(.*\)$/\1/p" /etc/apache2/envvars 2>/dev/null | tr -d "\"'" | head -n 1) ;;
esac
[ -z "$UW" ] && UW="www-data apache daemon nobody"
fi
UW=$(printf '%s' "$UW" | tr -cd '[:alnum:] ._-')
uids=" "; for u in $UW; do i=$(id -u "$u" 2>/dev/null) && uids+="$i "; done
echo "User web: $UW"
n=0
for p in /proc/[0-9]*; do
uid=$(awk '/^Uid:/ {print $2; exit}' "$p/status" 2>/dev/null)
[ -n "$uid" ] && [[ $uids == *" $uid "* ]] || continue
c=$(tr -cd '[:print:]' < "$p/comm" 2>/dev/null)
case "$c" in apache2|httpd|php-fpm*|php-cgi*|php[0-9]*|lsphp*|rotatelogs|htcacheclean|suexec) continue ;; esac
a=$(tr '\0' ' ' < "$p/cmdline" 2>/dev/null | bersih 60)
echo "PERIKSA: pid ${p#/proc/} $(getent passwd "$uid" | cut -d: -f1) $c $a"; n=$((n + 1))
done
(( n == 0 )) && echo "Tidak ada"
temuan=$((temuan + n))
echo "== 4. Jadwal cron milik user web"
n=0
for u in $UW; do
for f in "/var/spool/cron/crontabs/$u" "/var/spool/cron/$u"; do
[ -r "$f" ] || continue
while IFS= read -r b; do
[[ $b =~ ^[[:space:]]*($|#) ]] && continue
echo "PERIKSA: $u $(printf '%s' "$b" | bersih 90)"; n=$((n + 1))
done < "$f"
done
done
(( n == 0 )) && echo "Tidak ada"
temuan=$((temuan + n))
if (( temuan > 0 )); then
echo "Hasil: ADA TEMUAN ($temuan). Periksa setiap baris PERIKSA. Baris yang tidak Anda kenal: putus server dari internet."
else
echo "Hasil: tidak ada temuan. Hasil bersih tidak membuktikan server bersih."
fi
Menurut dokumentasi log Apache, error log mencatat masalah saat Apache memproses permintaan. Contoh 3 baris pertama error log dummy yang kami pakai:
[Thu Sep 03 08:14:22.410211 2026] [core:notice] [pid 1:tid 1] AH00052: child pid 77 exit signal Segmentation fault (11)
[Wed Nov 11 22:01:05.118312 2026] [mpm_event:notice] [pid 1:tid 1] AH00489: Apache/2.4.70 (Unix) OpenSSL/3.5.4 configured -- resuming normal operations
[Wed Nov 11 22:01:05.118377 2026] [core:notice] [pid 1:tid 1] AH00094: Command line: 'httpd -D FOREGROUND'
# Server biasa: skrip mencari error log Apache sendiri
sudo bash cek-tanda-apache.sh
# Log di path lain, rentang 30 hari, dan user web RHEL
sudo HARI=30 USER_WEB="apache" bash cek-tanda-apache.sh /var/log/httpd/error_log
# Docker: simpan log container lebih dulu, lalu beri berkas itu ke skrip
docker logs web 2> error-web.log
sudo bash cek-tanda-apache.sh error-web.log

Batas skrip: crash bisa punya sebab lain, misalnya modul PHP yang rusak. Proses PHP-FPM atau CGI yang sah juga bisa tampil sebagai PERIKSA. Cek ini tidak menemukan program yang penyerang taruh di luar folder web dan di luar user web.

Cek hasil: "tidak ada temuan" berarti skrip tidak menemukan tanda. Hasil bersih tidak membuktikan server bersih. "ADA TEMUAN" berarti periksa setiap baris PERIKSA, lalu ikuti urutan ini untuk baris yang tidak Anda kenal:
- Isolasi server dari jaringan. Matikan daya hanya bila perlu, karena data di memori ikut hilang.
- Salin error log, access log, dan daftar proses sebelum Anda mengubah apa pun.
- Jangan hapus berkas asing sebelum log tersimpan.
- Update Apache ke versi aman, lalu restart penuh.
- Ganti secret, APIAPIPintu resmi yang dipakai 2 sistem untuk saling mengirim data, tanpa orang menyalin data secara manual.Buka glosarium key, dan password database yang bisa dibaca user web.
- Pulihkan situs dari backup yang bersih. Pertimbangkan server baru.
Bila data pribadi bocor, UU 27/2022 tentang Pelindungan Data Pribadi mewajibkan pemberitahuan tertulis paling lambat 3 kali 24 jam. Baca juga panduan security, privacy, dan UU PDP untuk perusahaan.
Langkah 5: Restart penuh, lalu cek ulang
Paket baru di disk belum aktif sampai proses induk Apache berganti. Menurut dokumentasi stop dan restart Apache, graceful restart dan restart biasa menjaga proses induk tetap hidup.
Analisa Rama Digital: systemctl restart menghentikan lalu menjalankan Apache, jadi proses induk berganti. Skrip membandingkan waktu berkas mod_http2 dengan waktu mulai proses induk. Batas: graceful restart juga bisa memuat modul baru, tetapi skrip tidak bisa membuktikannya.
# Debian dan Ubuntu
sudo systemctl restart apache2
# RHEL, AlmaLinux, dan Rocky
sudo systemctl restart httpd
# Cek ulang
sudo bash cek-versi-apache.sh

Untuk Docker, langkah 2 sudah membuat container baru dari image httpd:2.4.71, jadi proses induk sudah baru. Untuk panel kontrol, pakai menu restart layanan Apache dari panel itu.
Cek hasil: skrip menulis "AMAN untuk CVE-2026-119618" di setiap server. Sesudah itu, kembalikan baris Protocols dari langkah 3a atau jalankan a2enmod http2 bila Anda ingin HTTP/2 lagi.
Contoh: 1 pagi respons untuk 4 server
Simulasi ini memakai data dummy. Nama server, waktu, dan hasil bukan data pelanggan.
| Waktu (WIB) | Server dummy | Yang dicek | Hasil | Tindakan |
|---|---|---|---|---|
| 08.00 | web-01 (Docker httpd:2.4.70, h2 aktif) | Langkah 1 | RENTAN, HTTP/2 AKTIF | Langkah 3a pagi ini, ganti ke httpd:2.4.71 siang ini |
| 08.20 | web-02 (Ubuntu 22.04, apache2 2.4.52-1ubuntu4.20) | Langkah 1 | RENTAN, HTTP/2 AKTIF | apt install --only-upgrade apache2, lalu langkah 5 |
| 09.00 | web-03 (RHEL 9, sesudah dnf upgrade) | Langkah 1 | PATCH ADA DI DISK, PROSES LAMA | systemctl restart httpd, lalu cek ulang: AMAN |
| 09.30 | web-01 | Langkah 4 | 5 crash worker, cache.php baru di uploads | Isolasi server, simpan log, ikuti urutan respons |
| 10.00 | Situs toko di shared hosting cPanel | Tiket ke provider | ea-apache24 2.4.71 terpasang | Minta bukti tertulis dan jam restart |
Pelajaran dari simulasi: nomor versi Ubuntu 2.4.52 tidak membuktikan server aman. Paket web-02 terdampak lewat backport, dan web-03 baru aman sesudah restart penuh.
Siapa yang memasang patch
Tanggung jawab patch berbeda per cara hosting, jadi tabel ini membantu Anda tahu siapa yang bergerak hari ini.
| Cara hosting | Pemegang patch | Yang Anda kerjakan |
|---|---|---|
| VPS atau server sendiri | Tim IT atau developer Anda | Langkah 1 sampai 5 |
| Image Docker httpd | Tim yang membuat image dan container | Ganti tag ke httpd:2.4.71, lalu langkah 1 dan 4 |
| Shared hosting atau reseller cPanel | Provider hosting | Minta bukti versi ea-apache24 dan jam restart |
| Server dikelola vendor IT atau MSP | Mitra sesuai kontrak | Minta output langkah 1 dan 4 secara tertulis |
Rekomendasi Rama Digital: nyalakan update keamanan otomatis untuk paket distro, dan batasi IP asal server hanya untuk CDN bila situs memakai CDN.
Checklist hari ini
- Buat daftar semua server dan container Apache. Pemilik: tim IT. Bukti: daftar nama server dan sumber paket.
- Cek versi dan HTTP/2 dengan langkah 1. Pemilik: admin server. Bukti: output skrip.
- Matikan HTTP/2 dengan langkah 3 di server yang belum bisa patch hari ini. Pemilik: admin server. Bukti: output curl.
- Backup konfigurasi, lalu pasang paket aman dengan langkah 2. Pemilik: admin server. Bukti: versi paket.
- Restart penuh dengan langkah 5. Pemilik: admin server. Bukti: skrip menulis AMAN.
- Cari tanda dengan langkah 4. Pemilik: admin server. Bukti: output skrip dan salinan error log.
- Minta bukti tertulis dari provider untuk setiap situs di shared hosting.
Tanya jawab
Server saya memakai Ubuntu 22.04 dengan Apache 2.4.52. Apakah terdampak?
Ya. USN-9090-1 menulis bahwa Ubuntu 22.04 terdampak lewat backport mod_http2, walau nomor upstream di bawah 2.4.55. Pasang apache2 2.4.52-1ubuntu4.27 atau lebih baru.
Situs saya di balik CDN. Apakah server saya aman?
Belum tentu. Analisa Rama Digital: bila IP asal server bisa dibuka langsung, penyerang bisa melewati CDN. Batasi akses ke IP asal hanya dari CDN, lalu tetap pasang patch.
Apakah mematikan HTTP/2 membuat situs saya rusak?
Tidak. Situs tetap jalan di HTTP/1.1. Halaman dengan banyak berkas bisa termuat sedikit lebih lambat, jadi nyalakan HTTP/2 lagi sesudah patch.
Apakah reload sudah mengaktifkan patch sesudah update?
Belum tentu. Reload dan graceful restart menjaga proses induk. Pakai systemctl restart, lalu jalankan langkah 1 sampai skrip menulis AMAN.
Saya memakai shared hosting. Apa yang saya kerjakan?
Provider memegang Apache. Kirim tiket, lalu minta versi paket Apache atau ea-apache24 dan jam restart. Untuk cPanel, versi aman adalah ea-apache24 2.4.71.
Apakah exploit untuk celah ini sudah publik?
Red Hat menulis bahwa riset publik menunjukkan exploit yang andal pada konfigurasi default dengan mod_http2 aktif. Per 13 November 2026, CISA KEV tidak memuat celah ini, dan kami tidak menemukan laporan serangan.
Server saya memakai RHEL 8. Apakah saya perlu bertindak?
Menurut Red Hat, RHEL 8 dan lebih lama tidak terdampak CVE-2026-119618. Tetap pasang update keamanan rutin untuk CVE lain.
Apakah patch menghapus akses penyerang?
Tidak. Patch menutup celah, tetapi tidak menghapus webshell, proses, atau cron yang penyerang buat. Jalankan langkah 4, lalu ganti secret yang bisa dibaca user web.
Langkah berikutnya
Batas yang tetap berlaku: langkah 3 tidak menutup celah, dan patch tidak membersihkan server yang sudah diambil alih. Bila server Anda menunjukkan tanda di langkah 4, atau Anda butuh bantuan audit dan pemulihan, pakai Vibe Code Rescue. Untuk 1 kendala yang mendesak hari ini, jadwalkan sesi 30 menit.
Celah lain yang kami bahas: celah SQL injection Craft CMS CVE-2026-123488.
Sumber
- advisory keamanan Apache httpd 2.4: 3 CVE di 2.4.71, label critical, versi rentan, dan pelapor.
- catatan CVE-2026-119618: deskripsi CNA Apache, CWE-362, dan waktu terbit 11 November 2026 14.54 UTC.
- halaman CVE Red Hat: CVSS 3.1 9.8, syarat h2 atau h2c, status exploit, dan RHSA per versi RHEL.
- pelacak keamanan Debian dan USN-9090-1: paket aman Debian dan Ubuntu.
- changelog EasyApache 4 cPanel dan image resmi httpd di Docker Hub: ea-apache24 2.4.71 dan image httpd:2.4.71.
- CISA KEV: tidak memuat CVE-2026-119618 per 13 November 2026.
- dokumentasi mod_http2, dokumentasi direktif Protocols, panduan HTTP/2 Apache, dokumentasi stop dan restart Apache, dan dokumentasi log Apache: HTTP/2, Protocols, MPM, restart, dan log.
- halaman unduhan Apache: unduhan source httpd 2.4.71.
- UU 27/2022 tentang Pelindungan Data Pribadi: kewajiban pemberitahuan kebocoran data pribadi.

