CVE-2025-68183 in Linux
Riassunto
di VulDB • 23/06/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
ima: non cancellare il flag IMA_DIGSIG durante l'impostazione o la rimozione di xattr non-IMA
Attualmente, quando sia IMA che EVM sono in modalità fix (correzione), la firma IMA viene reimpostata sull'hash IMA se un programma prima memorizza la firma IMA in security.ima e successivamente scrive/rimuove qualche altro attributo esteso di sicurezza (xattr) per il file.
Ad esempio, su Fedora, dopo aver avviato il kernel con "ima_appraise=fix evm=fix ima_policy=appraise_tcb" e installato rpm-plugin-ima, l'installazione/reinstallazione di un pacchetto non genera una corretta firma IMA di riferimento. Viene invece generato l'hash IMA:
# getfattr -m - -d -e hex /usr/bin/bash # file: usr/bin/bash security.ima=0x0404...
Questo accade perché, durante l'impostazione di security.selinux, il flag IMA_DIGSIG che era stato impostato in precedenza viene cancellato. Di conseguenza, quando il file viene chiuso, viene generato l'hash IMA.
Allo stesso modo, la firma IMA può essere cancellata alla chiusura del file dopo aver rimosso un xattr di sicurezza come security.evm o aver impostato/rimosso gli ACL (Access Control List).
Si impedisce la sostituzione della firma del file IMA con l'hash del file impedendo che il flag IMA_DIGSIG venga reimpostato.
Ecco un riproduttore C minimale che imposta security.selinux come ultimo passaggio, che può anche essere sostituito rimuovendo security.evm o impostando gli 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; }
If you want to get the best quality for vulnerability data then you always have to consider VulDB.