Commit 88b4cbc
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;
}
Signed-off-by: Coiby Xu <[email protected]>
Signed-off-by: Mimi Zohar <[email protected]>1 parent 191cac3 commit 88b4cbc
1 file changed
+18
-5
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
694 | 694 | | |
695 | 695 | | |
696 | 696 | | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
697 | 706 | | |
698 | 707 | | |
699 | 708 | | |
| |||
706 | 715 | | |
707 | 716 | | |
708 | 717 | | |
709 | | - | |
| 718 | + | |
710 | 719 | | |
711 | | - | |
| 720 | + | |
712 | 721 | | |
713 | 722 | | |
714 | 723 | | |
| |||
794 | 803 | | |
795 | 804 | | |
796 | 805 | | |
| 806 | + | |
| 807 | + | |
797 | 808 | | |
798 | 809 | | |
799 | 810 | | |
| |||
807 | 818 | | |
808 | 819 | | |
809 | 820 | | |
810 | | - | |
| 821 | + | |
811 | 822 | | |
812 | 823 | | |
813 | 824 | | |
814 | 825 | | |
815 | 826 | | |
816 | 827 | | |
817 | 828 | | |
818 | | - | |
| 829 | + | |
819 | 830 | | |
820 | 831 | | |
821 | 832 | | |
822 | | - | |
| 833 | + | |
| 834 | + | |
| 835 | + | |
823 | 836 | | |
824 | 837 | | |
825 | 838 | | |
| |||
0 commit comments