FortiBleed — FortiGate Leaked-Credential & Config Intrusion HuntPack

CVE-2026-24858 · FortiCloud SSO SAML authentication bypass · ~75,000 FortiGate appliances with leaked admin/SSL-VPN credentials & config exports (mid-June 2026)
Threat
FortiBleed · CVE-2026-24858
Severity
EXPLOITED ITW
Type
Edge VPN · Credential / Config Exfil
Access Vector
Leaked admin + SSL-VPN creds / config
Version
v0.1 · 2026-06-21
Author
HuntPack
Confidence
High (behavioral) · No atomic IOCs
01

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.

02

Source Review & Web Hunter Notes

TierSourceKey FindingCarry Fwd
1Fortinet 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
1CISA 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
2Hudson 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
2panelica.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
2Arctic Wolf bulletin (CVE-2026-24858)Persistence via local admin accounts + config exfiltration + malicious config changes; mitigation disable SSO; monitor syslog.yes
1Fortinet Doc Library — FortiOS Log Message ReferenceAuthoritative log-field definitions: logid 0100032001 Admin login successful; 0100044547 Object attribute configured / 0100044546 Attribute configured (cfgpath, action, cfgobj); 0101039947 SSL-VPN tunnel-up.yes
1SigmaHQ — "FortiGate New Administrator Account Created"Detection selection: action='Add' + cfgpath='system.admin' → T1136.001. Corroborates the persistence signature.yes
2Rapid7 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)
2VulnCheck — Network Edge Device Report 2026Edge 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.

03

Hunt Brief & Attack Chain

Hunt hypotheses (ordered by fidelity)

  1. H1 (high): An attacker created a new FortiGate admin account for persistence — visible as logid 0100044547 action=Add cfgpath=system.admin (and system.sso-forticloud-admin) in FortiGate event logs forwarded to NG-SIEM.
  2. 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.
  3. H2b (medium): SSL-VPN / firewall config was altered post-access — edits to cfgpath=vpn.ssl.settings or firewall.policy (VPN enabled, new port-forward, logging disabled).
  4. 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.
  5. H4 (high): After VPN access, an internal endpoint runs credential-access tooling (LSASS access / Mimikatz-class behavior) sourced from the VPN client IP pool.
  6. 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.
  7. 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.
  8. 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

#StepTelemetryHunt Angle
1Acquire valid creds (FortiBleed dataset) / SSO bypass (CVE-2026-24858)FortiGate event log; FortiCloud SSO logsAdmin login from new ASN/geo; SSO admin login anomalies
2Authenticate to FortiGate admin or SSL-VPNlogid 0100032001 (admin), 0101039947 (SSL-VPN tunnel-up)Off-hours / impossible-travel / VPS-range logins (H3)
3Establish persistence — create admin accountlogid 0100044547 action=Add cfgpath=system.adminNew-admin-account hunt (H1) — highest fidelity
4Exfiltrate device config (blueprint)Config-download event ("System config file has been downloaded …")Config export hunt (H2)
5Modify VPN / firewall configlogid 0100044546/0100044547 cfgpath=vpn.ssl.settings|firewall.policyVPN-enable / policy / logging-disable hunt (H2b)
6Pivot to internal network via VPNFalcon NetworkConnectIP4, UserLogonVPN-pool source → internal RDP/SMB (H6)
7Credential access & discovery on internal hostsFalcon ProcessRollup2, LSASS accessMimikatz-class / scanner execution (H4, H5)
8Lateral movement / objectiveFalcon UserLogon (Type 3/10), NetworkConnectIP4Credential reuse fan-out (H7)
04

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.

TypeValue / SignatureConfidenceActionContext / Source
Log signaturelogid="0100044547" action="Add" cfgpath="system.admin"highhuntNew FortiGate admin account = persistence. Fortinet Log Ref + SigmaHQ.
Log signaturecfgpath="system.sso-forticloud-admin" add/edithighhuntSSO-admin object change tied to the bypass. Rapid7 (related campaign) TTP.
Log signature"System config file has been downloaded by user … via GUI/API"highhuntConfig export / blueprint exfiltration. Fortinet event log.
Log signaturelogid="0100044546/47" cfgpath="vpn.ssl.settings" / "firewall.policy"mediumhuntPost-access VPN/policy tampering. Fortinet Log Ref + Rapid7 TTP.
BehaviorAdmin/VPN login (0100032001 / 0101039947) from hosting/VPS/residential-proxy ASN, off-hours, or impossible-travelmediumhuntValid-cred abuse looks like normal auth. Arctic Wolf / reconshield behavioral list.
BehaviorVPN-sourced internal host → LSASS access / Mimikatz-class credential dumpingmediumhuntPost-access credential theft. Rapid7 TTP (tooling, not hash).
BehaviorVPN-sourced host → network/port scanner execution + RDP/SMB fan-outmediumhuntDiscovery + 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.

05

Affected Surface & Telemetry Matrix

SurfaceRequired TelemetryPriorityGap Risk
FortiGate / FortiOS (admin plane)FortiGate event log → syslog/FortiAnalyzer → NG-SIEM (Falcon LogScale)criticalHigh — many shops don't forward FortiGate event logs to SIEM
FortiGate SSL-VPNVPN event log (logid 0101039947), GeoIP/ASN enrichmenthighMedium — VPN logs often kept but rarely geo-baselined
Internal Windows endpoints/servers (VPN-reachable)Falcon ProcessRollup2, NetworkConnectIP4, UserLogonhighLow where Falcon sensor coverage is complete
Identity (AD / Entra)UserLogon/UserLogonFailed, sign-in logsmediumMedium — VPN→AD correlation needs both feeds
FortiCloud SSOFortiCloud admin login / SSO auditmediumHigh — 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.

06

ATT&CK Mapping

TacticTechniqueObserved BehaviorQuery / Control
Initial AccessT1078 Valid AccountsLogin with leaked admin/SSL-VPN credentialsQ1, Q4 / Rotate creds, MFA
Initial AccessT1190 Exploit Public-Facing AppCVE-2026-24858 FortiCloud SSO bypassPatch 7.4.11/7.6.6; disable SSO
PersistenceT1136.001 Create Account: LocalNew FortiGate admin / SSO-admin accountQ1 / admin-account allowlist + review
Collection / ExfilT1602.002 Network Device Config DumpConfig download/export ("blueprint")Q2 / restrict backup, alert on export
Defense EvasionT1562.001 Impair DefensesLogging disabled, policy/VPN editsQ3 / immutable log forwarding
Credential AccessT1003.001 LSASS MemoryMimikatz-class dumping on internal hostQ5 / Credential Guard, ASR
DiscoveryT1046 Network Service ScanningIP/port scanners from VPN-landing hostQ6 / segment VPN, restrict scanners
Lateral MovementT1021.001/.002 RDP / SMB Admin SharesRDP/SMB fan-out from VPN client poolQ7 / segment, restrict admin protocols
Resource Dev (context)T1110 Brute ForceMass credential validation (~1.1B attempts)FortiGate VPN failed-login hunt (Q4b)
07

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.

08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.

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.

Q1 · FortiGate new admin / SSO-admin account created
CONF HIGHFP LOWCOST LOW

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)
Q2 · FortiGate configuration download / export (blueprint exfil)
CONF HIGHFP MEDCOST LOW

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)
Q3 · FortiGate VPN / firewall / logging config tampering
CONF HIGHFP MEDCOST LOW

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)
Q4 · Anomalous admin / SSL-VPN login (new-ASN, off-hours, rare geo)
CONF MEDFP MEDCOST MED

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)
Q5 · Credential dumping (LSASS access) on a VPN-reachable host
CONF HIGHFP MEDCOST MED

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)
Q6 · Internal discovery scanner from VPN-landing host
CONF MEDFP MEDCOST LOW

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)
Q7 · Lateral RDP/SMB fan-out from a single internal host
CONF MEDFP MEDCOST MED

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)
09

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 NameFromPatternExclusionsAction
CredDump — LSASS Access (Post-VPN)Q5Process command line matching sekurlsa|lsadump|comsvcs…MiniDump|nanodumpSigned Defender/CrowdStrike/Veeam pathsDetect+Block (pilot Monitor)
Discovery — Internal Network ScannerQ6ImageFileName matching scanner family namesApproved inventory/vuln-scan hostsDetect / Monitor
LatMov — RDP/SMB Fan-outQ7Single aid → ≥10 distinct hosts on 3389/445 within windowJump/management/scanner aidsMonitor → 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.

10

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.

Falcon IOC Management CSVfirst-party only
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.
FortiGate log signaturesbehavioral hunt
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
Behavioral signatures (endpoint)post-VPN TTP
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)
Patch / config auditexposure check
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
11

Detection Validation Gates

GateCheckPass Criteria
Telemetry readyFortiGate event logs reach Falcon NG-SIEM; logid/cfgpath fields parseQ1 returns parsed rows on a test admin-add
Benign baselineIdentify legit admin-provisioning users, backup svc account, mgmt-station IPs, jump hostsExclusion lists in Q1–Q3, Q5–Q7 populated for your env
Positive test (FortiGate)Create a throwaway test admin in a lab FortiGateQ1 fires; alert routes to SOC
Positive test (endpoint)Run a benign LSASS-read / scanner in an isolated lab hostQ5/Q6 fire; IOA in Monitor logs the event
Geo/ASN enrichmentsrcip/remip enriched with ASN+country for Q4Q4 ranks rare external sources correctly
PromotionIOA FP rate over 7–14 day Monitor pilot< 1 FP/host/week before Detect/Block
12

Hardening — Tiered

Immediate (this week — do regardless of patch state)
  • 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 disable if SSO admin login isn't required.
  • Restrict the admin plane (M1035): remove HTTPS/SSH admin from WAN and the SSL-VPN port; set trusthosts on 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.
Near term (1–4 weeks)
  • 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.
Strategic (1–3 months)
  • 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.
13

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.

14

Containment Runbook

PhaseActionsOwnerEvidence
IsolateBlock admin access from WAN; if active intrusion confirmed, take the FortiGate admin plane offline / fail over; Falcon network-contain implicated internal hostsNetwork + SOCFortiGate config diff; Falcon containment log
EradicateDelete 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 baselineNetworkRemoved-account list; config restore record
RecoverPatch to 7.4.11/7.6.6; re-enable logging + forwarding; restore SSL-VPN only with rotated creds + MFA; monitor §8 queries for re-entryNetwork + SOCBuild version; clean post-recovery hunt
EndpointFor hosts the attacker reached via VPN: scope with Q5–Q7, force AD/Entra password resets for exposed accounts, hunt persistence, reimage on confirmed compromiseSOC + ITQ5–Q7 results; reset confirmations
15

Detection Coverage Map

TechniqueBehaviorCQLIOACoverage
T1136.001New FortiGate admin accountQ1n/a (log)Good
T1602.002Config download/exportQ2n/a (log)Good
T1562.001VPN/policy/logging tamperQ3n/a (log)Good
T1078Anomalous admin/VPN loginQ4n/a (log)Partial — needs ASN/geo baseline
T1003.001LSASS credential dumpingQ5CredDump IOAGood
T1046Internal network scanningQ6Scanner IOAPartial — tool-name based
T1021.001/.002RDP/SMB lateral fan-outQ7Fan-out IOAPartial — threshold tuning
T1190CVE-2026-24858 SSO bypass exploitGap — appliance-internal; mitigate by patch/disable SSO (§12)
FortiCloud SSO admin loginCloud-side SSO auth anomalyGap — 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.

16

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
17

Changelog

v0.32026-07-24CQL correctness pass. All 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.
v0.22026-06-29CQL syntax review (crowdstrike-logscale-v3): fixed timechart→timeChart casing (Q4) and regex-on-numeric RemotePort→in() (Q7).
v0.12026-06-21Initial behavioral/log-based HuntPack. 7 CQL hunts (4 FortiGate-log, 3 endpoint), 4 native FortiGate hunts, 3 Custom IOA recs, tiered hardening + playbooks + containment. No atomic IOCs — sourced log signatures only; unrelated CVE-2025-59718 indicators deliberately excluded per IOC-provenance rule.
18

References

TierSourceUsed ForAccessed
1CISA — CVE-2026-24858 guidance (KEV)KEV status, exploitation behavior (new admin accounts)2026-06-21
1Fortinet — CVE-2026-24858 advisory (FortiCloud SSO bypass)CVSS 9.4, CWE-288, fixed 7.4.11/7.6.6, SSO-disable mitigation2026-06-21
1FortiOS Log Message Reference — 32001 admin loginlogid 0100032001 field structure (admin login)2026-06-21
1Fortinet — logid 0100044546 vs 0100044547 (config change)cfgpath/action/cfgobj for admin-add & config edits2026-06-21
1SigmaHQ — FortiGate New Administrator Account CreatedCorroborates Q1 (action=Add cfgpath=system.admin → T1136.001)2026-06-21
2Rapid7 — FortiGate CVE-2025-59718 IR findings (related campaign)Post-access TTP shape ONLY (atomic IOCs excluded)2026-06-21
2panelica.com — FortiBleedScale (73,932 URLs / 194 countries / ~75k devices), config-level exfil2026-06-21
2reconshield.in — FortiBleed explainedBehavioral detection list; credential-driven nature; mitigation steps2026-06-21
2Arctic Wolf — CVE-2026-24858Persistence + config exfil TTPs; disable-SSO mitigation; syslog monitoring2026-06-21
2VulnCheck — Network Edge Device Report 2026Edge-device exploitation context2026-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.