Skip to content

Commit b95912e

Browse files
committed
feat: enforce proc_mem.force_override=never by default
Note: this is Talos 1.13 only, and will only be enabled once we get to release v1.13.0-alpha.0. See siderolabs/pkgs#1412 (comment) for more details. Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
1 parent 681f3e8 commit b95912e

File tree

4 files changed

+58
-0
lines changed

4 files changed

+58
-0
lines changed

hack/release.toml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,14 @@ document.
3333
3434
These virtiofs external volumes are not supported when SELinux is running
3535
in enforcing mode.
36+
"""
37+
38+
[notes.procpidmem]
39+
title = "/proc/PID/mem Access Hardening"
40+
description = """\
41+
A new kernel parameter `proc_mem.force_override=never` has been introduced by default to enhance system security
42+
by preventing unwanted writes to protected process memory via `/proc/PID/mem`.
43+
If the kernel parameter is removed, default behavior is restored, allowing access only if the process is traced.
3644
"""
3745

3846
[make_deps]

pkg/machinery/imager/quirks/quirks.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,3 +310,15 @@ func (q Quirks) ISOSupportsSettingBootloader() bool {
310310

311311
return q.v.GTE(minTalosVersionISOSupportsSettingBootloader)
312312
}
313+
314+
var minTalosVersionProcMemOverrideNever = semver.MustParse("1.13.0")
315+
316+
// ProcMemOverrideNever returns true if the Talos version should enforce 'proc_mem.force_override=never'.
317+
func (q Quirks) ProcMemOverrideNever() bool {
318+
// if the version doesn't parse, we assume it's latest Talos
319+
if q.v == nil {
320+
return true
321+
}
322+
323+
return q.v.GTE(minTalosVersionProcMemOverrideNever)
324+
}

pkg/machinery/kernel/kernel.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ func DefaultArgs(quirks quirks.Quirks) []string {
5252
result = append(result, constants.KernelParamEnforceModuleSigVerify+"=1") // see https://github.com/siderolabs/talos/issues/11989
5353
}
5454

55+
if quirks.ProcMemOverrideNever() {
56+
result = append(result, "proc_mem.force_override=never")
57+
}
58+
5559
return result
5660
}
5761

pkg/machinery/kernel/kernel_test.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ func TestDefaultKernelArgs(t *testing.T) {
9191
"printk.devkmsg=on",
9292
"selinux=1",
9393
"module.sig_enforce=1",
94+
"proc_mem.force_override=never",
9495
},
9596
},
9697
{
@@ -110,6 +111,39 @@ func TestDefaultKernelArgs(t *testing.T) {
110111
"ima_hash=sha512",
111112
},
112113
},
114+
{
115+
name: "v1.12",
116+
117+
quirks: quirks.New("v1.12.0"),
118+
119+
expected: []string{
120+
"init_on_alloc=1",
121+
"slab_nomerge=",
122+
"pti=on",
123+
"consoleblank=0",
124+
"nvme_core.io_timeout=4294967295",
125+
"printk.devkmsg=on",
126+
"selinux=1",
127+
"module.sig_enforce=1",
128+
},
129+
},
130+
{
131+
name: "v1.13",
132+
133+
quirks: quirks.New("v1.13.0"),
134+
135+
expected: []string{
136+
"init_on_alloc=1",
137+
"slab_nomerge=",
138+
"pti=on",
139+
"consoleblank=0",
140+
"nvme_core.io_timeout=4294967295",
141+
"printk.devkmsg=on",
142+
"selinux=1",
143+
"module.sig_enforce=1",
144+
"proc_mem.force_override=never",
145+
},
146+
},
113147
} {
114148
t.Run(test.name, func(t *testing.T) {
115149
t.Parallel()

0 commit comments

Comments
 (0)