🇰🇷 한글 설명
Linux 커널의 ext4 파일 시스템에서 암호화된 새 파일 생성 시 DAX(Direct Access) 기능이 잘못 활성화되는 취약점이 발견되었습니다. 이로 인해 암호화된 파일에 데이터를 쓸 때 암호화 과정을 우회하여 데이터가 평문으로 저장될 수 있는 문제가 발생합니다.
💡 쉬운 설명
암호화되어야 할 파일이 암호화되지 않은 채로 저장될 수 있는 보안 결함입니다. 파일 시스템 설정 오류로 인해 중요한 데이터가 보호받지 못하고 그대로 노출될 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ext4: don't enable DAX on new encrypted files
Currently, when a new encrypted regular file is created, the call to
ext4_set_inode_flags(inode, init=true) in __ext4_new_inode() is made
before EXT4_INODE_ENCRYPT is set. As a result, it can set S_DAX if the
filesystem is mounted with "-o dax=always".
EXT4_INODE_ENCRYPT then actually gets set a bit later in
__ext4_new_inode(), when it calls fscrypt_set_context() which calls
ext4_set_context(). ext4_set_context() sets EXT4_INODE_ENCRYPT and
calls ext4_set_inode_flags(inode, init=false) to set S_ENCRYPTED too.
This was intended to clear S_DAX as well. However, this was broken by
commit 043546e46dc7 ("fs/ext4: Only change S_DAX on inode load"). This
causes data written to the file to bypass encryption, also causing
xfstests failures such as generic/548 (when "-o dax=always" is used).
Fix this by simplifying the flow by making __ext4_new_inode() set
EXT4_INODE_ENCRYPT earlier. This makes it take effect in
ext4_set_inode_flags(inode, init=true), making S_DAX never be set.
Similarly, make EXT4_STATE_MAY_INLINE_DATA never be set in the first
place on new encrypted inodes. Then it doesn't need to be cleared.
As a result of these simplifications, ext4_set_context() no longer needs
to change inode flags or state when 'handle != NULL'. Remove that too.
📍 영향받는 시스템
DAX 옵션(-o dax=always)이 활성화된 Linux 커널의 ext4 파일 시스템을 사용하는 시스템
⚔️ 공격 벡터
직접적인 공격보다는 시스템 설정 오류를 통해 암호화되지 않은 데이터가 디스크에 기록되는 데이터 유출 위험이 존재함
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 ext4 암호화 및 DAX 처리 로직을 수정해야 함
🔧 검증 코드
현재 사용 중인 커널 버전을 확인하여 해당 취약점이 해결된 패치 버전인지 확인합니다.