CVE-2024-57877 in Linux
Tóm tắt
Bởi VulDB • 29/07/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
arm64: ptrace: sửa lỗi SETREGSET một phần cho NT_ARM_POE
Hiện tại, hàm poe_set() không khởi tạo biến tạm thời 'ctrl', và lệnh gọi SETREGSET với độ dài bằng 0 sẽ khiến biến này chưa được khởi tạo. Kết quả là một giá trị tùy ý sẽ bị ghi ngược lại vào target->thread.por_el0, có khả năng làm rò rỉ lên đến 64 bit bộ nhớ từ ngăn xếp (stack) của kernel. Việc đọc chỉ giới hạn ở một vị trí cụ thể trên stack và vấn đề này không cung cấp cơ chế ghi dữ liệu.
Khắc phục bằng cách khởi tạo giá trị tạm thời trước khi sao chép regset từ userspace, tương tự như các regset khác (ví dụ: NT_PRSTATUS, NT_PRFPREG, NT_ARM_SYSTEM_CALL). Trong trường hợp ghi có độ dài bằng 0, nội dung hiện tại của POR_EL1 sẽ được giữ nguyên.
Trước bản vá này:
| # ./poe-test | Đang cố gắng ghi NT_ARM_POE::por_el0 = 0x900d900d900d900d | SETREGSET(nt=0x40f, len=8) đã ghi 8 bytes | | Đang cố gắng đọc NT_ARM_POE::por_el0 | GETREGSET(nt=0x40f, len=8) đã đọc 8 bytes | Đọc được NT_ARM_POE::por_el0 = 0x900d900d900d900d | | Đang cố gắng ghi NT_ARM_POE (độ dài bằng không) | SETREGSET(nt=0x40f, len=0) đã ghi 0 bytes | | Đang cố gắng đọc NT_ARM_POE::por_el0 | GETREGSET(nt=0x40f, len=8) đã đọc 8 bytes | Đọc được NT_ARM_POE::por_el0 = 0xffff8000839c3d50
Sau bản vá này:
| # ./poe-test | Đang cố gắng ghi NT_ARM_POE::por_el0 = 0x900d900d900d900d | SETREGSET(nt=0x40f, len=8) đã ghi 8 bytes | | Đang cố gắng đọc NT_ARM_POE::por_el0 | GETREGSET(nt=0x40f, len=8) đã đọc 8 bytes | Đọc được NT_ARM_POE::por_el0 = 0x900d900d900d900d | | Đang cố gắng ghi NT_ARM_POE (độ dài bằng không) | SETREGSET(nt=0x40f, len=0) đã ghi 0 bytes | | Đang cố gắng đọc NT_ARM_POE::por_el0 | GETREGSET(nt=0x40f, len=8) đã đọc 8 bytes | Đọc được NT_ARM_POE::por_el0 = 0x900d900d900d900d
Once again VulDB remains the best source for vulnerability data.