CVE-2026-55211 Sumo Logic CSE · Sumo

Detect CVE-2026-55211: surfio Out-of-Bounds Read (CWE-125) in Sumo Logic CSE

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.

MITRE ATT&CK

Tactic
Initial Access Impact

Sumo Detection Query

Sumo Logic CSE (Sumo)
sql
_sourceCategory=*endpoint* OR _sourceCategory=*sysmon*
| where tolowercase(process_name) matches "*python*"
| where tolowercase(command_line) matches /surfio|\.irap|\.gri|surface/
| count by host, user, process_name, command_line
| sort by _count desc
critical severity medium confidence

Sumo Logic search for Python executions referencing surfio or Irap surface files across endpoint telemetry.

Data Sources

SysmonEndpoint process telemetry

Required Tables

endpoint_process_events

False Positives & Tuning

  • Legitimate geoscience pipelines parsing trusted surfaces
  • surfio installs/upgrades in CI
  • Analyst notebook sessions on trusted data

Other platforms for CVE-2026-55211


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.

  1. Test 1Inventory vulnerable surfio version

    Expected signal: Process execution of python3/pip with 'surfio' on the command line; file creation under site-packages/surfio

  2. Test 2Simulate untrusted surface-file ingestion

    Expected signal: Python process command line referencing 'surfio' and a '.irap' file path

  3. Test 3Detect surfio import on Windows host

    Expected signal: DeviceProcessEvents record for python.exe with 'surfio' in ProcessCommandLine


Response Playbook

Triage

  1. 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.
  2. Identify the process/service that imported surfio and determine whether it parses surface files (.irap/.gri) sourced from untrusted or external input.
  3. 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.
  4. Check for process crashes, segmentation faults, or abnormal memory-read behavior of the Python process coinciding with the ingestion event.

Containment

  1. 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.
  2. 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

  1. Preserve the suspect surface file(s), the surfio package version metadata (dist-info), and the process command line and environment.
  2. 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

Related Techniques

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.

Hunting — KQL
kql
DeviceFileEvents | where FolderPath has "surfio" and (FileName endswith ".dist-info" or FileName endswith "__init__.py") | project Timestamp, DeviceName, FolderPath, FileName
Hunting — SPL
spl
index=* sourcetype=osquery:results (path="*site-packages/surfio*") | stats values(path) by host

Atomic Red Team Tests

Test 1 Inventory vulnerable surfio version
linux

Detects presence of a vulnerable surfio installation by querying the installed package version.

Command

bash
pip install 'surfio==0.0.18' 2>/dev/null; python3 -c "import surfio, importlib.metadata as m; print('surfio', m.version('surfio'))"

Cleanup

bash
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.

Test 2 Simulate untrusted surface-file ingestion
linux

Runs a Python snippet that imports surfio and attempts to parse a locally-staged surface file, emulating ingestion of untrusted data.

Command

bash
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

bash
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.

Test 3 Detect surfio import on Windows host
windows

Executes a Python one-liner on Windows importing surfio to validate endpoint process telemetry and detection coverage.

Command

powershell
python.exe -c "import surfio; print('surfio', surfio.__file__)"

Cleanup

powershell
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.

Related Detections