Ga naar inhoud

PinTheft (PSA-2026-00022-1) — detectie + mitigatie

PinTheft is een lokale privilege-escalatie-ketting die een double-free in de Linux RDS-module (Reliable Datagram Sockets) combineert met een io_uring fixed-buffer overwrite om elke unprivileged user naar root te tillen. Gepubliceerd als PSA-2026-00022-1 op 2026-05-19; raakt elke huidige Proxmox-kernel en de meeste stock-Linux distributies met de rds-modules gebouwd. Op het moment van schrijven is er nog geen gepatchte kernel in de distro-repos.

Hoe monsys helpt

LaagWat
InventarisAgent stuurt /proc/modules mee per inventory-cyclus naar POST /api/v1/kernel-modules. Schema 103.
DetectiePer-tenant geseede regel kernel_module_suspicious matcht rds, rds_tcp, rds_rdma tegen de geladen set. Hits genereren een detected_events rij met severity critical.
MitigatieOperator-getriggerde, TOTP-gated Emergency Action pintheft_mitigate. Wrapper schrijft /etc/modprobe.d/pintheft.conf (met install <mod> /bin/false + blacklist) en doet rmmod voor alle geladen RDS-modules. Idempotent.

Volgens het human-in-the-loop principe ontlaadt monsys nooit automatisch modules. De detectie vuurt; operator beoordeelt het detection event; operator tekent een EAT via TOTP; agent voert uit.

Waarom dit veilig is als default-regel

Op Ubuntu 24.04 ontkracht de meegeleverde blacklist-rare-network.conf al socket(AF_RDS, ...) auto-loading via alias net-pf-21 off. Een unprivileged aanvaller kan de module daarom NIET via de syscall-truc laden — maar een vijandige cron-job, een buggy installer, of een admin die modprobe rds draait voor onverwante redenen kan het wel. De detectie dekt al die gevallen door /proc/modules te pollen. De mitigatie sluit het install-pad af dat blacklist-rare-network.conf niet behandelt.

Note: voor deze mitigatie hoef je niet te wachten op een gepatchte kernel — RDS wordt niet gebruikt op vrijwel elke Belgische/EU productieserver die we geaudit hebben. Heeft de operator wél RDS nodig voor legitieme redenen (sommige IBM DB2 RAC clusters en een handvol HPC-setups), laat de detectie aan staan en accepteer het alert als geïnformeerde uitzondering.

Detectie-regel config

De seed-rij (per tenant, automatisch ingevoegd op mig 103 apply):

{
"module_names": ["rds", "rds_tcp", "rds_rdma"],
"advisory": "PSA-2026-00022-1",
"description": "rds + io_uring double-free chain → local privilege escalation. Unload and blacklist if unused."
}

Dezelfde rule_kind (kernel_module_suspicious) wordt hergebruikt voor toekomstige kernel-LPE-disclosures — alleen module_names verandert per CVE.

EAT action-vorm

{
"kind": "pintheft_mitigate"
}

Geen parameters: deze actie blacklist altijd rds, rds_tcp, rds_rdma. De wrapper op /usr/local/sbin/monsys-pintheft-mitigate is het enige pad met sudo NOPASSWD; hij schrijft /etc/modprobe.d/pintheft.conf en roept rmmod aan voor elke geladen module. Output (stdout + stderr) wordt opgevangen en teruggestuurd naar de hub als EAT-resultaat voor de audit log.

Verifiëren dat mitigatie werkte

Nadat de EAT geland is:

Terminal window
lsmod | grep -E '^rds|^rds_tcp|^rds_rdma' # leeg verwacht
sudo modprobe -nv rds # zou "install /bin/false" moeten tonen
cat /etc/modprobe.d/pintheft.conf # blacklist+install regels

De volgende agent-inventory cyclus herzendt /proc/modules. Met RDS afwezig vuurt de detectie-regel niet meer, en de eerder open detected_events-rij wordt in-line gededupliceerd (24h venster) tot operator hem ackt in dashboard.

Compliance mapping

ISO 27001 A.8.7 (Bescherming tegen malware) — automatisch geëvalueerd door unacknowledged kernel_module_suspicious events per tenant te tellen. De control-rij is in mig 103 toegevoegd aan compliance_framework_controls.