CVE-2026-55211: surfio Out-of-Bounds Read (CWE-125)
Detects exploitation and exposure of CVE-2026-55211, an out-of-bounds read (CWE-125) in the Python 'surfio' package (Equinor) affecting versions < 0.0.19. surfio parses Irap surface grid files; a maliciously crafted surface file can trigger a read beyond allocated buffer bounds, leading to information disclosure or a denial-of-service crash in Python services that ingest untrusted surface data. With CVSS 9.8 and a public PoC, detection focuses on identifying vulnerable installations, ingestion of untrusted surface files by Python processes importing surfio, and abnormal crashes/segfaults of processes loading the library.
Vulnerability Intelligence
Public PoCAffected Software
- Vendor
- pip
- Product
- surfio
- Versions
- < 0.0.19
Weakness (CWE)
Timeline
- Disclosed
- August 18, 2026
References & Proof of Concept
- PoChttps://github.com/advisories/GHSA-rcr2-hggw-43wm
- https://github.com/equinor/surfio/security/advisories/GHSA-rcr2-hggw-43wm
- https://github.com/equinor/surfio/pull/86
- https://github.com/equinor/surfio/commit/1619750bce28e39c4f378d2fb6d28b72380a12aa
- https://github.com/equinor/surfio/releases/tag/0.0.19
CVSS
What is CVE-2026-55211 CVE-2026-55211: surfio Out-of-Bounds Read (CWE-125)?
CVE-2026-55211: surfio Out-of-Bounds Read (CWE-125) (CVE-2026-55211) maps to the Initial Access and Impact tactics — the adversary is trying to get into your network in MITRE ATT&CK.
This page provides production-ready detection logic for CVE-2026-55211: surfio Out-of-Bounds Read (CWE-125), covering the data sources and telemetry it touches: Microsoft Defender for Endpoint, DeviceProcessEvents, DeviceFileEvents. The queries below are rated critical severity at medium confidence, and ship for 7 SIEM platforms — KQL, SPL, Elastic, QRadar, Sumo, YARA-L, LogScale.
MITRE ATT&CK
- Tactic
- Initial Access Impact
// Detect vulnerable surfio installs and untrusted surface-file ingestion by Python
let vulnFixed = "0.0.19";
union isfuzzy=true
(
DeviceProcessEvents
| where FileName in~ ("python.exe","python3","python3.exe","python")
| where ProcessCommandLine has "surfio" or ProcessCommandLine has_any (".irap",".gri","surface")
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine, InitiatingProcessFileName, EventType="process"
),
(
DeviceFileEvents
| where FolderPath has_any ("site-packages\\surfio","site-packages/surfio","/surfio/")
| where FileName endswith "__init__.py" or FileName endswith ".dist-info"
| project Timestamp, DeviceName, AccountName=InitiatingProcessAccountName, FileName, FolderPath, InitiatingProcessFileName, EventType="install"
)
| order by Timestamp desc Surfaces Python processes referencing surfio or Irap surface files and filesystem evidence of the surfio package being installed, to locate vulnerable hosts and untrusted-file ingestion.
Data Sources
Required Tables
False Positives
- Legitimate geoscience/reservoir-modeling pipelines that routinely parse trusted Irap surface files with surfio
- Internal CI systems installing or upgrading surfio as part of normal dependency management
- Data scientists interactively loading surface files in notebooks on trusted data
Sigma rule & cross-platform mapping
The detection logic for CVE-2026-55211: surfio Out-of-Bounds Read (CWE-125) (CVE-2026-55211) above is provided in a vendor-neutral
form so you can deploy it on any SIEM. The same logic is shipped here as native
KQL (Microsoft Sentinel / Defender), SPL (Splunk), Elastic (Elastic Security (EQL)), QRadar (IBM QRadar (AQL)), Sumo (Sumo Logic CSE), YARA-L (Google Chronicle / SecOps), LogScale (CrowdStrike LogScale (CQL)) queries. In Sigma terms, this detection targets the
following logsource:
logsource:
category: process_creation
product: windows Browse the community-maintained Sigma rules for this technique:
Platform-specific guides for CVE-2026-55211
References (5)
- https://github.com/equinor/surfio/security/advisories/GHSA-rcr2-hggw-43wm
- https://github.com/equinor/surfio/pull/86
- https://github.com/equinor/surfio/commit/1619750bce28e39c4f378d2fb6d28b72380a12aa
- https://github.com/equinor/surfio/releases/tag/0.0.19
- https://github.com/advisories/GHSA-rcr2-hggw-43wm
Testing Methodology
Validate this detection against 3 adversary techniques from Atomic Red Team. Each test below lists the behaviour to exercise and the telemetry you should expect to see. Executable commands and cleanup steps are available with Pro.
- Test 1Inventory vulnerable surfio version
Expected signal: Process execution of python3/pip with 'surfio' on the command line; file creation under site-packages/surfio
- Test 2Simulate untrusted surface-file ingestion
Expected signal: Python process command line referencing 'surfio' and a '.irap' file path
- Test 3Detect surfio import on Windows host
Expected signal: DeviceProcessEvents record for python.exe with 'surfio' in ProcessCommandLine
Response Playbook
Triage
- Confirm whether the host has surfio installed and at what version: run `pip show surfio` (or inspect site-packages). Any version < 0.0.19 is vulnerable to CVE-2026-55211.
- Identify the process/service that imported surfio and determine whether it parses surface files (.irap/.gri) sourced from untrusted or external input.
- Review the specific surface file(s) processed around the alert time — capture file path, origin, and hash; untrusted-origin files parsed by a vulnerable surfio are the exploitation vector.
- Check for process crashes, segmentation faults, or abnormal memory-read behavior of the Python process coinciding with the ingestion event.
Containment
- Upgrade surfio to 0.0.19 or later on all affected hosts (`pip install --upgrade 'surfio>=0.0.19'`), or pin the fixed version in dependency manifests.
- Until patched, quarantine or block ingestion of externally-sourced surface files into services using surfio, and isolate any host actively processing suspect files.
Evidence Collection
- Preserve the suspect surface file(s), the surfio package version metadata (dist-info), and the process command line and environment.
- Collect process memory dumps and stderr/crash logs from the Python process at time of the OOB read for forensic analysis and to distinguish crash vs. information disclosure.
Escalation Criteria
- ! Escalate to IR if a vulnerable surfio parsed an untrusted/external surface file AND the process crashed or exhibited anomalous memory access, indicating active exploitation.
- ! Escalate to the application/asset owner if a public-facing or automated service ingesting untrusted data runs surfio < 0.0.19, given CVSS 9.8 and a public PoC.
Investigation Guide
Forensic Artifacts
- >
The malicious/malformed surface file (.irap/.gri) that was parsed - >
surfio package version and dist-info metadata under site-packages - >
Python process crash logs, core dumps, and stderr traces referencing surfio parsing routines
Tuning Guidance
Baseline the set of hosts and service accounts that legitimately run surfio against trusted internal surface data, and exclude those command lines/paths. Focus alerting on surfio invocations that parse files from untrusted origins (uploads, external shares, network sources) or that coincide with process crashes. Once all hosts are confirmed at surfio >= 0.0.19, downgrade the exposure query to periodic inventory rather than real-time alerting.
Hunting Queries
Locate all hosts with a surfio installation so vulnerable versions (< 0.0.19) can be inventoried and prioritized for patching.
DeviceFileEvents | where FolderPath has "surfio" and (FileName endswith ".dist-info" or FileName endswith "__init__.py") | project Timestamp, DeviceName, FolderPath, FileName index=* sourcetype=osquery:results (path="*site-packages/surfio*") | stats values(path) by host Atomic Red Team Tests
Detects presence of a vulnerable surfio installation by querying the installed package version.
Command
pip install 'surfio==0.0.18' 2>/dev/null; python3 -c "import surfio, importlib.metadata as m; print('surfio', m.version('surfio'))" Cleanup
pip uninstall -y surfio Expected Telemetry
Process execution of python3/pip with 'surfio' on the command line; file creation under site-packages/surfio
Expected Detection
KQL/SPL exposure queries flag the surfio reference and the install file events identify the vulnerable version.
Runs a Python snippet that imports surfio and attempts to parse a locally-staged surface file, emulating ingestion of untrusted data.
Command
python3 -c "import surfio; print('surfio loaded'); open('/tmp/test.irap','wb').write(b'\x00'*32)" ; python3 -c "import surfio" ; echo 'parsed /tmp/test.irap (lab)' Cleanup
rm -f /tmp/test.irap Expected Telemetry
Python process command line referencing 'surfio' and a '.irap' file path
Expected Detection
Process-event queries match the python + surfio/.irap command line.
Executes a Python one-liner on Windows importing surfio to validate endpoint process telemetry and detection coverage.
Command
python.exe -c "import surfio; print('surfio', surfio.__file__)" Cleanup
echo no cleanup required Expected Telemetry
DeviceProcessEvents record for python.exe with 'surfio' in ProcessCommandLine
Expected Detection
KQL DeviceProcessEvents branch and CrowdStrike/Chronicle process rules match the surfio reference.