Detection rules › Splunk
Linux PF_ALG Registration Outside of Boot Window
The following analytic detects when the AF_ALG kernel crypto socket interface being loaded more than 300 seconds after system boot, which is a primary kernel-level indicator of Copy Fail (CVE-2026-31431) exploitation activity on Debian and Ubuntu family systems. The AF_ALG interface is required by the exploit to access the vulnerable authencesn crypto code path, and on systems where it is not auto-loaded at boot, its on-demand registration by an unprivileged process is a strong indicator of exploitation in progress.
Known false positives
- AF_ALG can be legitimately loaded after boot by on-demand LUKS volume mounts, IPsec VPN clients establishing tunnels, or OpenSSL deployments with the afalg engine enabled, making this signal most reliable on dedicated server infrastructure where these operations are handled at boot time.
MITRE ATT&CK coverage
| Tactic | Techniques |
|---|---|
| Privilege Escalation |
Rule body
name: Linux PF_ALG Registration Outside of Boot Window
id: 8a9684ae-52e6-4a57-aea4-8a9f72942564
version: 2
creation_date: '2026-05-11'
modification_date: '2026-07-17'
author: Raven Tait, Splunk
status: production
type: TTP
description: |-
The following analytic detects when the AF_ALG kernel crypto socket interface being loaded more than 300 seconds after system boot, which is a primary kernel-level indicator of Copy Fail (CVE-2026-31431) exploitation activity on Debian and Ubuntu family systems.
The AF_ALG interface is required by the exploit to access the vulnerable authencesn crypto code path, and on systems where it is not auto-loaded at boot, its on-demand registration by an unprivileged process is a strong indicator of exploitation in progress.
data_source:
- Linux Messages Syslog
search: |
`linux_syslog` "NET: Registered PF_ALG protocol family"
| rex field=_raw "kernel: \[\s*(?<uptime_seconds>[\d\.]+)\]"
| eval uptime_seconds=tonumber(uptime_seconds)
| where uptime_seconds > 300
| eval uptime_readable=tostring(round(uptime_seconds/60,1)) . " minutes after boot"
| rename host as dest
| table _time dest uptime_seconds uptime_readable _raw
| sort -uptime_seconds
| `linux_pf_alg_registration_outside_of_boot_window_filter`
how_to_implement: To successfully implement this search, you need to have relevant kernel logs ingested with the Splunk Add-On for Unix and Linux (https://splunkbase.splunk.com/app/833).
known_false_positives: AF_ALG can be legitimately loaded after boot by on-demand LUKS volume mounts, IPsec VPN clients establishing tunnels, or OpenSSL deployments with the afalg engine enabled, making this signal most reliable on dedicated server infrastructure where these operations are handled at boot time.
references:
- https://xint.io/blog/copy-fail-linux-distributions
- https://github.com/theori-io/copy-fail-CVE-2026-31431
- https://github.com/Neo23x0/auditd/blob/master/audit.rules
finding:
title: AF_ALG instantiated after boot on $dest$ indicating possible privilege escalation.
entity:
field: dest
type: system
score: 50
analytic_story:
- Linux Privilege Escalation
asset_type: Endpoint
mitre_attack_id:
- T1068
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
cve:
- CVE-2026-31431
Stages and Predicates
Stage 1: search
`linux_syslog` "NET: Registered PF_ALG protocol family"
Stage 2: rex
| rex field=_raw "kernel: \[\s*(?<uptime_seconds>[\d\.]+)\]"
Stage 3: eval
| eval uptime_seconds=tonumber(uptime_seconds)
Stage 4: where
| where uptime_seconds > 300
Stage 5: eval
| eval uptime_readable=tostring(round(uptime_seconds/60,1)) . " minutes after boot"
Stage 6: rename
| rename host as dest
Stage 7: table
| table _time dest uptime_seconds uptime_readable _raw
Stage 8: sort
| sort -uptime_seconds
Stage 9: search
| `linux_pf_alg_registration_outside_of_boot_window_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
sourcetype | eq |
| field:"sourcetype" kind:eq value:"linux_messages_syslog" |
uptime_seconds | gt |
| field:"uptime_seconds" kind:gt value:"300" |
Search terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "NET: Registered PF_ALG protocol family" |