🇰🇷 한글 설명
Linux 커널의 SMB 클라이언트에서 특정 범위의 데이터를 0으로 만드는 과정 중, 해당 범위에 포함된 수정된 데이터(dirty data)를 조건 없이 플러시하지 않아 발생하는 취약점입니다. 이로 인해 데이터가 삭제된 자리에 오래된 데이터가 다시 기록되어 잘못된 데이터가 읽힐 수 있습니다.
💡 쉬운 설명
파일의 특정 부분을 지우려고 할 때, 아직 저장되지 않은 데이터가 남아 있으면 지워진 자리에 옛날 데이터가 다시 나타나는 현상입니다. 이로 인해 사용자는 실제로는 지워진 데이터 대신 잘못된 정보를 읽게 될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
smb: client: flush dirty data before zeroing a range
smb3_zero_range() emulates FALLOC_FL_ZERO_RANGE by invalidating the
page cache over the target range with truncate_pagecache_range() and
then issuing FSCTL_SET_ZERO_DATA to the server.
Dirty data was only flushed conditionally, when the range reached or
extended EOF. For a purely interior zero range that does not reach
EOF, no flush happened, so a dirty folio overlapping the range could
be written back to the server after the FSCTL and refill the range
that was just zeroed with stale data.
Fix this by unconditionally flushing and waiting for dirty data in the
range before invalidating the page cache and issuing
FSCTL_SET_ZERO_DATA, exactly as was done for smb3_punch_hole() in
commit d7d2adcd022b ("smb/client: flush dirty data before punching a
hole"); the two paths are structurally identical here.
This is observed as generic/363 randomly reading stale data where a
zeroed range is expected against Windows Server.
📍 영향받는 시스템
Linux kernel (SMB client module 사용 시스템)
⚔️ 공격 벡터
로컬 또는 네트워크를 통해 SMB3 프로토콜을 사용하는 Windows 서버와 통신하는 Linux 클라이언트 환경
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 커널 패치 버전 이후인지 확인하십시오.