Ad

CVE-2025-68183

HIGH CVSS 3.1: 7,8 EPSS 0.15%
Обновлено 30 июля 2026
Fedora
Параметр Значение
CVSS 7,8 (HIGH)
Поставщик Fedora
Публичный эксплойт Нет

В ядре Linux устранена следующая уязвимость: ima: не очищать флаг IMA_DIGSIG при установке или удалении xattr, отличного от IMA. В настоящее время, когда IMA и EVM находятся в режиме исправления, подпись IMA будет быть сброшен до хеша IMA, если программа сначала сохраняет подпись IMA в Security.ima, а затем записывает/удаляет другой файл xattr безопасности для файл. Например, в Fedora после загрузки ядра с параметром «ima_appraise=fix evm=fix ima_policy=appraise_tcb" и установим rpm-plugin-ima, установка/переустановка пакета не будет хорошей ссылкой на IMA подпись создана.

Вместо этого генерируется хэш IMA, # getfattr -m - -d -e hex /usr/bin/bash # файл: usr/bin/bash безопасность.има=0x0404... Это происходит потому, что при настройке security.selinux флаг IMA_DIGSIG то, что было установлено заранее, было очищено. В результате генерируется хеш IMA. когда файл закрыт.

Аналогично, подпись IMA может быть удалена при закрытии файла после удаления. Security xattr, например Security.evm или установка/удаление ACL. Предотвратите замену подписи файла IMA хешем файла, предотвратив флаг IMA_DIGSIG не будет сброшен.

Вот минимальный воспроизводитель C, который устанавливает Security.selinux последним шаг, который также можно заменить удалением Security.evm или установкой ACL, #include <stdio.h> #include <sys/xattr.h> #include <fcntl.h> #include <unistd.h> #include <строка.h> #include <stdlib.h> интервал основной() { const char* file_path = "/usr/sbin/test_binary"; const char* hex_string = "030204d33204490066306402304"; длина int = strlen(hex_string); символ * ima_attr_value; интервал ФД; fd = open(file_path, O_WRONLY|O_CREAT|O_EXCL, 0644); если (фд == -1) { perror("Ошибка открытия файла"); возврат 1; } ima_attr_value = (char*)malloc(длина / 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("Ошибка установки расширенного атрибута"); закрыть (ФД); возврат 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("Ошибка установки расширенного атрибута"); закрыть (ФД); возврат 1; } закрыть (ФД); вернуть 0; }

Показать оригинальное описание (EN)

In the Linux kernel, the following vulnerability has been resolved: ima: don't clear IMA_DIGSIG flag when setting or removing non-IMA xattr Currently when both IMA and EVM are in fix mode, the IMA signature will be reset to IMA hash if a program first stores IMA signature in security.ima and then writes/removes some other security xattr for the file. For example, on Fedora, after booting the kernel with "ima_appraise=fix evm=fix ima_policy=appraise_tcb" and installing rpm-plugin-ima, installing/reinstalling a package will not make good reference IMA signature generated. Instead IMA hash is generated, # getfattr -m - -d -e hex /usr/bin/bash # file: usr/bin/bash security.ima=0x0404... This happens because when setting security.selinux, the IMA_DIGSIG flag that had been set early was cleared. As a result, IMA hash is generated when the file is closed. Similarly, IMA signature can be cleared on file close after removing security xattr like security.evm or setting/removing ACL. Prevent replacing the IMA file signature with a file hash, by preventing the IMA_DIGSIG flag from being reset. Here's a minimal C reproducer which sets security.selinux as the last step which can also replaced by removing security.evm or setting 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; }

Характеристики атаки

Способ атаки
Локальный
Нужен локальный доступ
Сложность
Низкая
Легко эксплуатировать
Нужны права
Низкие
Нужны базовые права
Участие пользователя
Не требуется
Не нужно действие пользователя

Последствия

Конфиденциальность
Высокое
Полная утечка данных
Целостность
Высокое
Полная модификация данных
Доступность
Высокое
Полный отказ в обслуживании

Строка CVSS v3.1

Связанные уязвимости