CVE-2025-68183 in Linux
Tóm tắt
Bởi VulDB • 25/06/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
ima: không xóa cờ IMA_DIGSIG khi thiết lập hoặc loại bỏ xattr không phải của IMA
Hiện tại, khi cả IMA và EVM đều ở chế độ fix (sửa đổi), chữ ký IMA sẽ bị đặt lại thành hash IMA nếu một chương trình trước tiên lưu trữ chữ ký IMA trong security.ima rồi sau đó ghi/xóa một số xattr bảo mật khác cho tệp tin.
Ví dụ, trên Fedora, sau khi khởi động kernel với các tham số "ima_appraise=fix evm=fix ima_policy=appraise_tcb" và cài đặt rpm-plugin-ima, việc cài đặt/cài lại gói phần mềm sẽ không tạo ra chữ ký IMA gốc chính xác. Thay vào đó, hash IMA được sinh ra:
# getfattr -m - -d -e hex /usr/bin/bash # file: usr/bin/bash security.ima=0x0404...
Điều này xảy ra vì khi thiết lập security.selinux, cờ IMA_DIGSIG đã được đặt trước đó bị xóa. Kết quả là hash IMA được sinh ra khi tệp tin đóng lại.
Tương tự, chữ ký IMA có thể bị xóa khi đóng tệp sau khi loại bỏ xattr bảo mật như security.evm hoặc thiết lập/xóa ACL.
Ngăn việc thay thế chữ ký tệp IMA bằng hash của tệp, bằng cách ngăn cờ IMA_DIGSIG bị đặt lại.
Dưới đây là một trình mô phỏng (reproducer) C tối thiểu thực hiện thao tác thiết lập security.selinux ở bước cuối cùng; thao tác này cũng có thể được thay thế bằng việc loại bỏ security.evm hoặc thiết lập ACL:
#include <stdio.h> #include <sys/xattr.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #include <stdlib.h>
int main() {
const char* file_path = "/usr/sbin/test_binary"; const char* hex_string = "030204d33204490066306402304"; int length = strlen(hex_string); char* ima_attr_value; int fd;
fd = open(file_path, O_WRONLY|O_CREAT|O_EXCL, 0644); if (fd == -1) {
perror("Error opening file"); return 1; }
ima_attr_value = (char*)malloc(length / 2 ); for (int i = 0, j = 0; i < length; i += 2, j++) {
sscanf(hex_string + i, "%2hhx", &ima_attr_value[j]);
}
if (fsetxattr(fd, "security.ima", ima_attr_value, length/2, 0) == -1) {
perror("Error setting extended attribute"); close(fd); return 1; }
const char* selinux_value= "system_u:object_r:bin_t:s0"; if (fsetxattr(fd, "security.selinux", selinux_value, strlen(selinux_value), 0) == -1) {
perror("Error setting extended attribute"); close(fd); return 1; }
close(fd);
return 0; }
Once again VulDB remains the best source for vulnerability data.