FortiBleed — FortiGate Leaked-Credential & Config Intrusion HuntPack
Executive Summary
CVE-2026-24858 ("FortiBleed") is a FortiCloud SSO authentication bypass (CWE-288, alternate path/channel; CVSS 9.4) disclosed by Fortinet on 2026-01-27 and added to the CISA KEV catalog the same week. When FortiCloud SSO admin login is enabled, an attacker holding any FortiCloud account with a registered device could authenticate to other tenants' FortiOS / FortiProxy / FortiManager / FortiAnalyzer / FortiWeb devices. Fortinet briefly disabled FortiCloud SSO globally (Jan 26) and re-enabled it with a fix on Jan 27; patched FortiOS builds are 7.4.11 and 7.6.6.
In mid-June 2026 (major disclosure 2026-06-17/18) a dataset of validated administrator and SSL-VPN credentials plus full configuration exports for 73,932 unique FortiGate URLs across 194 countries began circulating in cybercriminal communities. Researchers (Hudson Rock, Kevin Beaumont) estimate ~75,000 distinct devices — roughly half of internet-facing FortiGates on Shodan — with 30,000+ verified-working admin credentials. The presence of internal email addresses and data "only found inside device config exports" points to configuration-level exfiltration, not mere login-screen credential scraping.
The active threat right now is not the CVE itself — it is adversaries logging in with leaked, valid admin/VPN credentials and using stolen configs as a blueprint for follow-on intrusion. Because the credentials are valid, exploitation looks like normal authentication; detection must be behavioral. The highest-value defensive signals live in two places: (1) FortiGate's own event log — admin logins from unexpected ASNs/geographies, new local/SSO admin-account creation, config downloads, and SSL-VPN policy edits; and (2) CrowdStrike endpoint telemetry on the internal hosts an attacker reaches after VPN access — credential-access tooling, internal discovery scanners, and lateral RDP/SMB sourced from VPN client pools.
Defender priority: Treat every internet-facing FortiGate as credential-compromised until proven otherwise. Rotate ALL admin + local VPN credentials and the device config secrets (PSKs, API keys, LDAP/RADIUS binds) — patching alone does NOT invalidate already-leaked credentials. Then hunt FortiGate audit logs for new-admin-account creation (logid 0100044547 action=Add cfgpath=system.admin) and anomalous admin/VPN logins, and pivot to endpoint telemetry for post-VPN lateral movement.
IOC provenance note: No vendor or researcher has published FortiBleed-attributed atomic IOCs (no campaign IPs/domains/hashes tied to the leaked dataset). Atomic indicators circulating in some reporting (e.g. specific source IPs, the openmail.pro domain, mimikatz / Advanced IP Scanner) belong to the related but distinct CVE-2025-59718 FortiCloud-SSO intrusions investigated by Rapid7 — they are not attributable to the FortiBleed dataset and are deliberately excluded from this pack's IOC table. This pack is intentionally behavioral / log-based. Every detection below traces to an official FortiOS log-field definition or a documented TTP; none rely on invented indicators.
Source Review & Web Hunter Notes
| Tier | Source | Key Finding | Carry Fwd |
|---|---|---|---|
| 1 | Fortinet PSIRT / Community (CVE-2026-24858) | FortiCloud SSO admin auth bypass (CWE-288), CVSS 9.4; fixed FortiOS 7.4.11 / 7.6.6; mitigation set admin-forticloud-sso-login disable; SSO disabled globally Jan 26, re-enabled Jan 27 with fix. | yes |
| 1 | CISA KEV / CISA alert (2026-01-28) | Added to KEV; active exploitation; attackers created new local admin accounts on otherwise up-to-date FortiOS; guidance to patch + restrict mgmt. | yes |
| 2 | Hudson Rock / Kevin Beaumont (Jun 2026) | 73,932 unique FortiGate URLs / 194 countries / ~75,000 devices (~50% of internet-facing FortiGates); 30,791+ verified admin creds; config-level exfiltration (internal emails present). | yes |
| 2 | panelica.com / reconshield.in (Jun 2026) | Scale & dataset structure (organised by country/sector/revenue); credential-driven campaign (~1.1B attempts, GPU/Hashtopolis cracking); behavioral detection list only — no atomic IOCs. | partial |
| 2 | Arctic Wolf bulletin (CVE-2026-24858) | Persistence via local admin accounts + config exfiltration + malicious config changes; mitigation disable SSO; monitor syslog. | yes |
| 1 | Fortinet Doc Library — FortiOS Log Message Reference | Authoritative log-field definitions: logid 0100032001 Admin login successful; 0100044547 Object attribute configured / 0100044546 Attribute configured (cfgpath, action, cfgobj); 0101039947 SSL-VPN tunnel-up. | yes |
| 1 | SigmaHQ — "FortiGate New Administrator Account Created" | Detection selection: action='Add' + cfgpath='system.admin' → T1136.001. Corroborates the persistence signature. | yes |
| 2 | Rapid7 IR (CVE-2025-59718 — related campaign) | TTPs only carried forward: SSO/system/local admin creation, vpn.ssl.settings + firewall.policy edits, config download via GUI, malicious-vendor source IPs, post-access mimikatz / IP-scanner tooling. Atomic IOCs NOT carried (different CVE/campaign). | partial (TTP only) |
| 2 | VulnCheck — Network Edge Device Report 2026 | Edge devices over-represented in exploitation; EoL appliances disproportionately targeted. Context only; no FortiBleed specifics. | no |
Carry-forward decision: Build a behavioral pack. Tier-1 Fortinet log-reference fields anchor the native FortiGate hunts; Rapid7 supplies the post-access TTP shape (lateral movement, discovery, credential access) for the CrowdStrike endpoint hunts — but only as behaviors, never as atomic indicators.
Hunt Brief & Attack Chain
Hunt hypotheses (ordered by fidelity)
- H1 (high): An attacker created a new FortiGate admin account for persistence — visible as
logid 0100044547 action=Add cfgpath=system.admin(andsystem.sso-forticloud-admin) in FortiGate event logs forwarded to NG-SIEM. - H2 (high): A FortiGate device config was downloaded/exported by an admin session — "System config file has been downloaded by user … via GUI/API" — indicating exfiltration of the device blueprint.
- H2b (medium): SSL-VPN / firewall config was altered post-access — edits to
cfgpath=vpn.ssl.settingsorfirewall.policy(VPN enabled, new port-forward, logging disabled). - H3 (medium): Admin or SSL-VPN logins originate from anomalous ASNs/geographies — hosting/VPS/residential-proxy ranges, off-hours, or impossible-travel relative to the device's normal admin sources.
- H4 (high): After VPN access, an internal endpoint runs credential-access tooling (LSASS access / Mimikatz-class behavior) sourced from the VPN client IP pool.
- H5 (medium): A VPN-sourced host performs internal discovery — network/port scanners (Advanced IP Scanner, advanced_port_scanner, nbtscan-class) or rapid SMB/RDP fan-out.
- H6 (medium): Lateral movement from the VPN landing host — interactive RDP (T1021.001) or SMB admin-share writes (T1021.002) shortly after a new VPN tunnel comes up.
- H7 (low): Leaked-credential reuse across the estate — the same VPN/local account authenticating to many internal hosts in a short window (credential-stuffing the blueprint).
Attack chain
| # | Step | Telemetry | Hunt Angle |
|---|---|---|---|
| 1 | Acquire valid creds (FortiBleed dataset) / SSO bypass (CVE-2026-24858) | FortiGate event log; FortiCloud SSO logs | Admin login from new ASN/geo; SSO admin login anomalies |
| 2 | Authenticate to FortiGate admin or SSL-VPN | logid 0100032001 (admin), 0101039947 (SSL-VPN tunnel-up) | Off-hours / impossible-travel / VPS-range logins (H3) |
| 3 | Establish persistence — create admin account | logid 0100044547 action=Add cfgpath=system.admin | New-admin-account hunt (H1) — highest fidelity |
| 4 | Exfiltrate device config (blueprint) | Config-download event ("System config file has been downloaded …") | Config export hunt (H2) |
| 5 | Modify VPN / firewall config | logid 0100044546/0100044547 cfgpath=vpn.ssl.settings|firewall.policy | VPN-enable / policy / logging-disable hunt (H2b) |
| 6 | Pivot to internal network via VPN | Falcon NetworkConnectIP4, UserLogon | VPN-pool source → internal RDP/SMB (H6) |
| 7 | Credential access & discovery on internal hosts | Falcon ProcessRollup2, LSASS access | Mimikatz-class / scanner execution (H4, H5) |
| 8 | Lateral movement / objective | Falcon UserLogon (Type 3/10), NetworkConnectIP4 | Credential reuse fan-out (H7) |
Consolidated IOC Table
No atomic IOCs for FortiBleed. No IP, domain, URL, or hash has been publicly attributed to the CVE-2026-24858 leaked-credential dataset by any cited source. Per this pack's provenance rule, nothing is fabricated and no indicators from the unrelated CVE-2025-59718 campaign are imported. The "indicators" below are behavioral / log-based — that is the hunt surface for valid-credential abuse.
| Type | Value / Signature | Confidence | Action | Context / Source |
|---|---|---|---|---|
| Log signature | logid="0100044547" action="Add" cfgpath="system.admin" | high | hunt | New FortiGate admin account = persistence. Fortinet Log Ref + SigmaHQ. |
| Log signature | cfgpath="system.sso-forticloud-admin" add/edit | high | hunt | SSO-admin object change tied to the bypass. Rapid7 (related campaign) TTP. |
| Log signature | "System config file has been downloaded by user … via GUI/API" | high | hunt | Config export / blueprint exfiltration. Fortinet event log. |
| Log signature | logid="0100044546/47" cfgpath="vpn.ssl.settings" / "firewall.policy" | medium | hunt | Post-access VPN/policy tampering. Fortinet Log Ref + Rapid7 TTP. |
| Behavior | Admin/VPN login (0100032001 / 0101039947) from hosting/VPS/residential-proxy ASN, off-hours, or impossible-travel | medium | hunt | Valid-cred abuse looks like normal auth. Arctic Wolf / reconshield behavioral list. |
| Behavior | VPN-sourced internal host → LSASS access / Mimikatz-class credential dumping | medium | hunt | Post-access credential theft. Rapid7 TTP (tooling, not hash). |
| Behavior | VPN-sourced host → network/port scanner execution + RDP/SMB fan-out | medium | hunt | Discovery + lateral movement off the blueprint. Rapid7 TTP. |
If your own IR produces verified FortiBleed infrastructure (e.g. a confirmed exfil destination from your FortiGate logs), add it to the Falcon IOC-Management CSV in §10 with action=detect and a 6-month expiry — but only from first-party evidence, never from third-party recycling.
Affected Surface & Telemetry Matrix
| Surface | Required Telemetry | Priority | Gap Risk |
|---|---|---|---|
| FortiGate / FortiOS (admin plane) | FortiGate event log → syslog/FortiAnalyzer → NG-SIEM (Falcon LogScale) | critical | High — many shops don't forward FortiGate event logs to SIEM |
| FortiGate SSL-VPN | VPN event log (logid 0101039947), GeoIP/ASN enrichment | high | Medium — VPN logs often kept but rarely geo-baselined |
| Internal Windows endpoints/servers (VPN-reachable) | Falcon ProcessRollup2, NetworkConnectIP4, UserLogon | high | Low where Falcon sensor coverage is complete |
| Identity (AD / Entra) | UserLogon/UserLogonFailed, sign-in logs | medium | Medium — VPN→AD correlation needs both feeds |
| FortiCloud SSO | FortiCloud admin login / SSO audit | medium | High — cloud-side logs rarely centralised |
Prerequisite: Sections 8 (FortiGate-log CQL) assume FortiGate event logs are shipped to Falcon Next-Gen SIEM / LogScale. If they are not, start with §7 native FortiAnalyzer/FortiGate hunts and the §12 immediate hardening to enable log forwarding before the CQL hunts will return data.
ATT&CK Mapping
| Tactic | Technique | Observed Behavior | Query / Control |
|---|---|---|---|
| Initial Access | T1078 Valid Accounts | Login with leaked admin/SSL-VPN credentials | Q1, Q4 / Rotate creds, MFA |
| Initial Access | T1190 Exploit Public-Facing App | CVE-2026-24858 FortiCloud SSO bypass | Patch 7.4.11/7.6.6; disable SSO |
| Persistence | T1136.001 Create Account: Local | New FortiGate admin / SSO-admin account | Q1 / admin-account allowlist + review |
| Collection / Exfil | T1602.002 Network Device Config Dump | Config download/export ("blueprint") | Q2 / restrict backup, alert on export |
| Defense Evasion | T1562.001 Impair Defenses | Logging disabled, policy/VPN edits | Q3 / immutable log forwarding |
| Credential Access | T1003.001 LSASS Memory | Mimikatz-class dumping on internal host | Q5 / Credential Guard, ASR |
| Discovery | T1046 Network Service Scanning | IP/port scanners from VPN-landing host | Q6 / segment VPN, restrict scanners |
| Lateral Movement | T1021.001/.002 RDP / SMB Admin Shares | RDP/SMB fan-out from VPN client pool | Q7 / segment, restrict admin protocols |
| Resource Dev (context) | T1110 Brute Force | Mass credential validation (~1.1B attempts) | FortiGate VPN failed-login hunt (Q4b) |
Native Audit-Log Hunts (FortiGate / FortiAnalyzer)
Run these directly on the FortiGate CLI / FortiAnalyzer before (or alongside) shipping logs to Falcon NG-SIEM. Field names are from the Fortinet FortiOS Log Message Reference.
7.1 — New admin / SSO-admin account creation (persistence — top signal)
FortiAnalyzer log filter (Event > System): logid=0100044547 AND action=Add AND cfgpath=system.admin OR cfgpath=system.sso-forticloud-admin FortiGate CLI: execute log filter category event execute log filter field logid 0100044547 execute log display Review every hit: cfgobj (new account name), user (who created it), srcip (where from). Any account you cannot attribute to a change ticket is a compromise indicator.
7.2 — Configuration download / export (blueprint exfiltration)
Search event log message text for: "config file has been downloaded" (GUI / API / backup) Correlate the user + srcip against your known admin sources. A config download from an unfamiliar IP or outside change windows = probable exfiltration of the device blueprint.
7.3 — VPN / firewall config tampering
logid=0100044546 OR logid=0100044547
AND (cfgpath=vpn.ssl.settings OR cfgpath=firewall.policy
OR cfgpath=log.disk.setting OR cfgpath=log.syslogd.setting)
Flag: SSL-VPN newly enabled, new firewall policy / port-forward,
or logging disabled (defense evasion).
7.4 — Anomalous admin & SSL-VPN logins
Admin login: logid=0100032001 (logdesc "Admin login successful")
fields: user, ui, srcip
SSL-VPN up: logid=0101039947 (action=tunnel-up, tunneltype=ssl-*)
fields: user, remip
Hunt: srcip/remip in hosting/VPS/residential-proxy ASNs, off-hours,
or geographies that never administer this device (impossible travel).
FortiGate automation stitch: build an email/alert trigger on logid 0100044547 action=Add cfgpath=system.admin so new-admin creation pages the SOC in real time even before SIEM ingestion.
CrowdStrike LogScale CQL Hunt Queries
Q1–Q4 query FortiGate logs ingested into Falcon Next-Gen SIEM / LogScale (third-party repo); field names follow the FortiOS syslog key=value schema. Q5–Q7 query Falcon EDR endpoint telemetry on internal hosts. Adjust the FortiGate repo/parser field prefix to match your tenant's parser.
Looks for: FortiGate audit event adding a system.admin (or system.sso-forticloud-admin) object — the campaign's primary persistence move. FP: legitimate admin provisioning — exclude known change-window users / source IPs.
// HUNT: FortiGate new administrator account created (persistence) // MITRE: T1136.001 // CONF: high FP: low COST: low | REQUIRES: FortiGate event log in NG-SIEM // FALSE POSITIVES: sanctioned admin provisioning // TUNING: exclude approved provisioning users / mgmt jump-host srcip logid=/^0?100044547$/ | action=/^Add$/i | cfgpath=/system\.(admin|sso-forticloud-admin)/i | user!=/^(svc_change_mgmt|netops_provision)$/i | table([@timestamp, devname, user, srcip, action, cfgpath, cfgobj, cfgattr, msg], limit=200)
Looks for: "config file has been downloaded" event = device blueprint exfiltration. FP: scheduled backup tooling — exclude its service account and management-station source IP.
// HUNT: FortiGate config file downloaded / exported // MITRE: T1602.002 // CONF: high FP: medium COST: low | REQUIRES: FortiGate event log in NG-SIEM // FALSE POSITIVES: scheduled config-backup jobs (FortiManager / cron) // TUNING: exclude backup svc account + mgmt-station srcip msg=/config file has been downloaded/i | user!=/^(svc_backup|fortimanager)$/i | srcip!=/^10\.(10|20)\./ | table([@timestamp, devname, user, srcip, ui, action, msg], limit=200)
Looks for: post-access edits enabling VPN, adding firewall policy/port-forward, or disabling logging (defense evasion). FP: legitimate netops changes — correlate against change tickets and exclude approved users.
// HUNT: FortiGate VPN/firewall/logging config tampering // MITRE: T1562.001, T1602.002 // CONF: high FP: medium COST: low | REQUIRES: FortiGate event log in NG-SIEM // FALSE POSITIVES: sanctioned netops config changes // TUNING: exclude change-window users; join to ticketing if available logid=/^0?10004454[67]$/ | cfgpath=/^(vpn\.ssl\.settings|firewall\.policy|log\.(disk|syslogd)\.setting)/i | user!=/^(netops_change|svc_change_mgmt)$/i | table([@timestamp, devname, user, srcip, action, cfgpath, cfgobj, msg], limit=200)
Looks for: admin (0100032001) or SSL-VPN (0101039947) logins from source IPs that have never administered this device, surfaced as rare-source outliers. FP: travelling admins / new remote workers — baseline per-user source set and exclude corporate egress ranges.
// HUNT: anomalous admin / SSL-VPN login source (valid-cred abuse) // MITRE: T1078 // CONF: medium FP: medium COST: medium | REQUIRES: FortiGate event log in NG-SIEM // FALSE POSITIVES: travelling admins, new remote-worker IPs // TUNING: exclude corporate egress CIDRs; raise rarity threshold per env logid=/^0?10(0032001|1039947)$/ | srcip := if(remip!="", remip, srcip) | srcip!=/^(10\.|172\.(1[6-9]|2\d|3[01])\.|192\.168\.)/ | groupBy([user, srcip], function=count(as=hits)) | timeChart(span=1d, series=srcip, function=count()) | sort([hits], order=asc, limit=200) | table([user, srcip, hits], limit=200)
Looks for: Mimikatz-class behavior — processes touching LSASS / known credential-dump command lines on internal hosts. FP: AV/EDR & backup agents reading LSASS — exclude vendor signed binaries by path.
// HUNT: credential-dumping process on internal host (post-VPN) // MITRE: T1003.001 // CONF: high FP: medium COST: medium | REQUIRES: Falcon EDR ProcessRollup2 // FALSE POSITIVES: signed security/backup agents reading LSASS // TUNING: exclude vendor tool install paths (Program Files\<Vendor>) #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | CommandLine=/(sekurlsa|logonpasswords|lsadump|procdump.*lsass|comsvcs.*MiniDump|nanodump)/i | ImageFileName!=/\\Program Files\\(Windows Defender|CrowdStrike|Veeam)\\/i | table([@timestamp, ComputerName, UserName, FileName, CommandLine, ParentBaseFileName, SHA256HashData], limit=200)
Looks for: network/port-scanner tooling (Advanced IP Scanner, advanced_port_scanner, nbtscan, fscan-class) running internally after VPN access. FP: sanctioned IT inventory scans — exclude approved admin hosts / scanner service accounts.
// HUNT: internal discovery scanner execution (post-VPN) // MITRE: T1046 // CONF: medium FP: medium COST: low | REQUIRES: Falcon EDR ProcessRollup2 // FALSE POSITIVES: sanctioned IT asset/vuln scans // TUNING: exclude approved scanner hosts / service accounts #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/(advanced_?ip_?scanner|advanced_?port_?scanner|nbtscan|fscan|netscan|softperfect)/i | UserName!=/^(svc_vulnscan|it_inventory)$/i | table([@timestamp, ComputerName, UserName, FileName, CommandLine, ParentBaseFileName], limit=200)
Looks for: one source host opening RDP (3389) / SMB (445) to many distinct internal hosts in a short window — lateral movement off the stolen blueprint. FP: jump servers, patch/management hosts — exclude known admin/scanning infrastructure.
// HUNT: RDP/SMB fan-out from single host (lateral movement) // MITRE: T1021.001, T1021.002 // CONF: medium FP: medium COST: medium | REQUIRES: Falcon EDR NetworkConnectIP4 // FALSE POSITIVES: jump hosts, patch/mgmt servers, vuln scanners // TUNING: exclude known admin/jump host aids; tune distinct-host threshold #event_simpleName=NetworkConnectIP4 | in(RemotePort, values=[3389, 445]) | aid!=/^(JUMPHOST_AID_1|MGMT_AID_1)$/ | groupBy([aid, ComputerName], function=([count(RemoteAddressIP4, as=hosts, distinct=true), collect([RemotePort])])) | hosts >= 10 | table([ComputerName, hosts, RemotePort], limit=200)
CrowdStrike Custom IOA Recommendations
Promote the high-confidence, low-FP endpoint hunts to Custom IOAs (the FortiGate-log hunts Q1–Q4 belong in NG-SIEM scheduled searches, not endpoint IOAs).
| IOA Name | From | Pattern | Exclusions | Action |
|---|---|---|---|---|
| CredDump — LSASS Access (Post-VPN) | Q5 | Process command line matching sekurlsa|lsadump|comsvcs…MiniDump|nanodump | Signed Defender/CrowdStrike/Veeam paths | Detect+Block (pilot Monitor) |
| Discovery — Internal Network Scanner | Q6 | ImageFileName matching scanner family names | Approved inventory/vuln-scan hosts | Detect / Monitor |
| LatMov — RDP/SMB Fan-out | Q7 | Single aid → ≥10 distinct hosts on 3389/445 within window | Jump/management/scanner aids | Monitor → Detect after baseline |
Pilot every IOA in Monitor on a representative host group for 7–14 days; promote to Detect/Block only after the FP exclusions above are confirmed in your environment.
Machine-Readable IOC Appendix
Behavioral pack — no atomic IOCs published. The CSV below ships with REPLACE_WITH_… placeholders only; populate it solely from first-party evidence (your own FortiGate logs / IR). Do not import third-party IPs/domains/hashes — none are attributed to FortiBleed.
type,value,action,severity,expiration,description,tags ipv4,REPLACE_WITH_CONFIRMED_EXFIL_IP,detect,high,2026-12-21,FortiBleed exfil dest (first-party),campaign:FortiBleed domain,REPLACE_WITH_CONFIRMED_C2,detect,high,2026-12-21,FortiBleed follow-on C2 (first-party),campaign:FortiBleed sha256,REPLACE_WITH_CONFIRMED_TOOL_HASH,detect,critical,2026-12-21,post-access tool (first-party),campaign:FortiBleed # Leave blank unless YOUR logs confirm it. No public FortiBleed IOCs exist.
new_admin logid=0100044547 action=Add cfgpath=system.admin sso_admin cfgpath=system.sso-forticloud-admin config_export msg=~"config file has been downloaded" vpn_tamper logid=0100044546|47 cfgpath=vpn.ssl.settings|firewall.policy log_disable cfgpath=log.disk.setting|log.syslogd.setting action=Edit admin_login logid=0100032001 fields: user,ui,srcip sslvpn_up logid=0101039947 action=tunnel-up fields: user,remip
cred_dump cmdline ~ sekurlsa|lsadump|comsvcs*MiniDump|nanodump (T1003.001) scanner image ~ advanced_ip_scanner|advanced_port_scanner|fscan (T1046) latmov single aid -> >=10 hosts on 3389/445 (T1021) valid_acct VPN login from new ASN/geo, off-hours, impossible-travel (T1078)
Fixed FortiOS: 7.4.11 or 7.6.6 (verify build, not just branch)
Disable bypass: config system global
set admin-forticloud-sso-login disable
end
Rotate (mandatory even if patched):
- all admin passwords + API keys
- all local SSL-VPN user passwords
- IPsec/SSL PSKs, LDAP/RADIUS bind creds in the config
Restrict mgmt: trusthosts on every admin; no mgmt on WAN/SSL-VPN port
Detection Validation Gates
| Gate | Check | Pass Criteria |
|---|---|---|
| Telemetry ready | FortiGate event logs reach Falcon NG-SIEM; logid/cfgpath fields parse | Q1 returns parsed rows on a test admin-add |
| Benign baseline | Identify legit admin-provisioning users, backup svc account, mgmt-station IPs, jump hosts | Exclusion lists in Q1–Q3, Q5–Q7 populated for your env |
| Positive test (FortiGate) | Create a throwaway test admin in a lab FortiGate | Q1 fires; alert routes to SOC |
| Positive test (endpoint) | Run a benign LSASS-read / scanner in an isolated lab host | Q5/Q6 fire; IOA in Monitor logs the event |
| Geo/ASN enrichment | srcip/remip enriched with ASN+country for Q4 | Q4 ranks rare external sources correctly |
| Promotion | IOA FP rate over 7–14 day Monitor pilot | < 1 FP/host/week before Detect/Block |
Hardening — Tiered
- Rotate everything in the config (M1027): all admin + local SSL-VPN passwords, API keys, IPsec/SSL PSKs, LDAP/RADIUS bind creds. Leaked configs already contain these — patching does NOT invalidate them.
- Patch to FortiOS 7.4.11 / 7.6.6 (M1051) and verify the build number, not just the branch.
- Disable the bypass surface (M1042):
config system global / set admin-forticloud-sso-login disableif SSO admin login isn't required. - Restrict the admin plane (M1035): remove HTTPS/SSH admin from WAN and the SSL-VPN port; set
trusthostson every administrator; enforce MFA on all admin + VPN accounts. - Hunt now (M1047): run §7 native hunts for new admin accounts and config downloads on every internet-facing FortiGate.
- Ship FortiGate event logs to NG-SIEM (M1047): forward to FortiAnalyzer/syslog → Falcon LogScale so Q1–Q4 have data; alert on
logid 0100044547 action=Add cfgpath=system.admin. - Segment the VPN landing zone (M1030): place SSL-VPN clients behind firewall policy that blocks lateral RDP/SMB to the broad estate; force through brokered jump hosts.
- Endpoint credential hardening (M1043, M1040): enable Credential Guard / LSASS protection and ASR "Block credential stealing from LSASS" on VPN-reachable Windows hosts.
- Conditional access (M1032): require MFA + device compliance for any session that traverses the VPN to internal apps.
- Move off device-terminated SSL-VPN (M1035): migrate remote access to ZTNA so a leaked appliance credential no longer grants flat network access.
- Immutable/centralised audit (M1029): forward FortiGate logs to write-once storage so attacker log-disabling/clearing is itself detectable and recoverable.
- Config-change governance: alert-and-approve workflow on admin-account and VPN/firewall-policy changes; periodic config-drift baselining against FortiManager.
Deployable Playbooks
13.1 — FortiGate: close the bypass, restrict admin, force MFA (FortiOS CLI)
config system global
set admin-forticloud-sso-login disable
end
config system interface
edit "wan1"
unset allowaccess
next
end
config system admin
edit "admin"
set trusthosts1 10.10.0.0 255.255.0.0
set two-factor fortitoken-cloud
next
end
# Rotate every local SSL-VPN user password:
config vpn ssl web user-bookmark
end
config user local
edit "vpnuser1"
set passwd ENC <NEW_STRONG_SECRET>
next
end
# Verify patched build:
get system status | grep Version # expect v7.4.11 or v7.6.6
13.2 — FortiGate: real-time alert on new-admin creation (automation stitch)
config system automation-trigger
edit "new-admin-created"
set event-type event-log
set logid 44547
next
end
config system automation-action
edit "page-soc"
set action-type email
set email-to "soc@internal-host.example.com"
set email-subject "FortiGate admin object change (logid 44547)"
next
end
config system automation-stitch
edit "alert-new-admin"
set trigger "new-admin-created"
set actions "page-soc"
next
end
13.3 — Windows: block LSASS credential theft on VPN-reachable hosts (PowerShell / ASR)
# ASR: Block credential stealing from LSASS Add-MpPreference -AttackSurfaceReductionRules_Ids ` 9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2 -AttackSurfaceReductionRules_Actions Enabled # Enable LSA protection (RunAsPPL) + Credential Guard via registry New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" ` -Name "RunAsPPL" -Value 1 -PropertyType DWORD -Force # Verify: Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Ids Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name RunAsPPL
Pilot ASR rules in Audit mode first (-AttackSurfaceReductionRules_Actions AuditMode) to catch legitimate LSASS readers (backup/EDR agents) before enforcing.
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Block admin access from WAN; if active intrusion confirmed, take the FortiGate admin plane offline / fail over; Falcon network-contain implicated internal hosts | Network + SOC | FortiGate config diff; Falcon containment log |
| Eradicate | Delete unauthorized admin/SSO-admin accounts (Q1 hits); revert malicious VPN/firewall/logging edits (Q3); rotate ALL creds + PSKs + API keys; reset config from a known-good pre-incident baseline | Network | Removed-account list; config restore record |
| Recover | Patch to 7.4.11/7.6.6; re-enable logging + forwarding; restore SSL-VPN only with rotated creds + MFA; monitor §8 queries for re-entry | Network + SOC | Build version; clean post-recovery hunt |
| Endpoint | For hosts the attacker reached via VPN: scope with Q5–Q7, force AD/Entra password resets for exposed accounts, hunt persistence, reimage on confirmed compromise | SOC + IT | Q5–Q7 results; reset confirmations |
Detection Coverage Map
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1136.001 | New FortiGate admin account | Q1 | n/a (log) | Good |
| T1602.002 | Config download/export | Q2 | n/a (log) | Good |
| T1562.001 | VPN/policy/logging tamper | Q3 | n/a (log) | Good |
| T1078 | Anomalous admin/VPN login | Q4 | n/a (log) | Partial — needs ASN/geo baseline |
| T1003.001 | LSASS credential dumping | Q5 | CredDump IOA | Good |
| T1046 | Internal network scanning | Q6 | Scanner IOA | Partial — tool-name based |
| T1021.001/.002 | RDP/SMB lateral fan-out | Q7 | Fan-out IOA | Partial — threshold tuning |
| T1190 | CVE-2026-24858 SSO bypass exploit | — | — | Gap — appliance-internal; mitigate by patch/disable SSO (§12) |
| FortiCloud SSO admin login | Cloud-side SSO auth anomaly | — | — | Gap — FortiCloud audit rarely ingested (§5) |
Validation: Coverage is strongest on FortiGate audit-log persistence/exfil (Q1–Q3) and endpoint post-access (Q5). Weakest on the cloud SSO authentication step and the in-appliance exploit itself — both are mitigated by control (patch + disable SSO) rather than detected, and are explicitly flagged as gaps. Treat this as a valid-credential abuse hunt, not a malware hunt.
Hunt Summary Ticket
TITLE......: FortiBleed — FortiGate leaked-credential & config intrusion hunt
THREAT.....: CVE-2026-24858 (FortiCloud SSO SAML auth bypass, CVSS 9.4) +
mid-2026 leak of admin/SSL-VPN creds & config for ~75k FortiGates
SEVERITY...: CRITICAL — exploited in the wild; valid-credential abuse
SCOPE......: All internet-facing FortiGate (FortiOS) + VPN-reachable internal hosts
HYPOTHESIS.: Adversary uses leaked valid creds / SSO bypass to log in, create
admin accounts, export config, then pivot internally
QUERIES....: Q1 new-admin (FortiGate log) | Q2 config export | Q3 vpn/policy tamper
Q4 anomalous login | Q5 LSASS dump | Q6 scanner | Q7 RDP/SMB fan-out
DO FIRST...: Q1 (new admin acct) + Q2 (config download) on every edge FortiGate
FINDINGS...: <fill: unauthorized admin accts / config exports / anomalous logins>
GAPS.......: In-appliance exploit (T1190) & FortiCloud SSO auth = mitigate not detect;
NO atomic IOCs published — behavioral pack only
ACTIONS....: Patch 7.4.11/7.6.6 + disable SSO + ROTATE ALL creds/PSKs/API keys
(rotation mandatory even when patched — leaked configs hold secrets)
OWNER......: HuntPack
VERSION....: v0.1 · 2026-06-21
Changelog
table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.References
| Tier | Source | Used For | Accessed |
|---|---|---|---|
| 1 | CISA — CVE-2026-24858 guidance (KEV) | KEV status, exploitation behavior (new admin accounts) | 2026-06-21 |
| 1 | Fortinet — CVE-2026-24858 advisory (FortiCloud SSO bypass) | CVSS 9.4, CWE-288, fixed 7.4.11/7.6.6, SSO-disable mitigation | 2026-06-21 |
| 1 | FortiOS Log Message Reference — 32001 admin login | logid 0100032001 field structure (admin login) | 2026-06-21 |
| 1 | Fortinet — logid 0100044546 vs 0100044547 (config change) | cfgpath/action/cfgobj for admin-add & config edits | 2026-06-21 |
| 1 | SigmaHQ — FortiGate New Administrator Account Created | Corroborates Q1 (action=Add cfgpath=system.admin → T1136.001) | 2026-06-21 |
| 2 | Rapid7 — FortiGate CVE-2025-59718 IR findings (related campaign) | Post-access TTP shape ONLY (atomic IOCs excluded) | 2026-06-21 |
| 2 | panelica.com — FortiBleed | Scale (73,932 URLs / 194 countries / ~75k devices), config-level exfil | 2026-06-21 |
| 2 | reconshield.in — FortiBleed explained | Behavioral detection list; credential-driven nature; mitigation steps | 2026-06-21 |
| 2 | Arctic Wolf — CVE-2026-24858 | Persistence + config exfil TTPs; disable-SSO mitigation; syslog monitoring | 2026-06-21 |
| 2 | VulnCheck — Network Edge Device Report 2026 | Edge-device exploitation context | 2026-06-21 |
Provenance statement: This pack contains zero atomic IOCs. Every detection signature traces to an official Fortinet log-field definition (Tier 1) or a documented TTP (Tier 2). Indicators from the unrelated CVE-2025-59718 campaign were reviewed and deliberately excluded.