CVE-2024-57877

arm64: ptrace: fix partial SETREGSET for NT_ARM_POE

Medium · published January 11, 2025

CVSS v3.1
6.1
EPSS
0%
Percentile
7.4
In the wild
Unconfirmed
What it is

In the Linux kernel, the following vulnerability has been resolved:

arm64: ptrace: fix partial SETREGSET for NT_ARM_POE

Currently poe_set() doesn't initialize the temporary 'ctrl' variable,

and a SETREGSET call with a length of zero will leave this

uninitialized. Consequently an arbitrary value will be written back to

target->thread.por_el0, potentially leaking up to 64 bits of memory from

the kernel stack. The read is limited to a specific slot on the stack,

and the issue does not provide a write mechanism.

Fix this by initializing the temporary value before copying the regset

from userspace, as for other regsets (e.g. NT_PRSTATUS, NT_PRFPREG,

NT_ARM_SYSTEM_CALL). In the case of a zero-length write, the existing

contents of POR_EL1 will be retained.

Before this patch:

| # ./poe-test

| Attempting to write NT_ARM_POE::por_el0 = 0x900d900d900d900d

| SETREGSET(nt=0x40f, len=8) wrote 8 bytes

|

| Attempting to read NT_ARM_POE::por_el0

| GETREGSET(nt=0x40f, len=8) read 8 bytes

| Read NT_ARM_POE::por_el0 = 0x900d900d900d900d

|

| Attempting to write NT_ARM_POE (zero length)

| SETREGSET(nt=0x40f, len=0) wrote 0 bytes

|

| Attempting to read NT_ARM_POE::por_el0

| GETREGSET(nt=0x40f, len=8) read 8 bytes

| Read NT_ARM_POE::por_el0 = 0xffff8000839c3d50

After this patch:

| # ./poe-test

| Attempting to write NT_ARM_POE::por_el0 = 0x900d900d900d900d

| SETREGSET(nt=0x40f, len=8) wrote 8 bytes

|

| Attempting to read NT_ARM_POE::por_el0

| GETREGSET(nt=0x40f, len=8) read 8 bytes

| Read NT_ARM_POE::por_el0 = 0x900d900d900d900d

|

| Attempting to write NT_ARM_POE (zero length)

| SETREGSET(nt=0x40f, len=0) wrote 0 bytes

|

| Attempting to read NT_ARM_POE::por_el0

| GETREGSET(nt=0x40f, len=8) read 8 bytes

| Read NT_ARM_POE::por_el0 = 0x900d900d900d900d

The record
Technical detail
CVSS v3.1
6.1 · MEDIUM
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:H
CVSS v4.0
Not supplied
EPSS
0.00182 · 7.4th percentile
Published
2025-01-11T14:49Z
EPSS history
Timeline
  • 11 JAN 14:49Z
    arm64: ptrace: fix partial SETREGSET for NT_ARM_POE
    cvelistv5