최근 뉴스는 Linux 커널에서 취약점이 확인되었습니다. 이미 CVE-2022-0847로 분류되어 있으며 이름을 다음과 같이 지정했습니다. "더러운 파이프".
"Dirty Pipe"라고 불리는 이 취약점은캐시의 내용을 덮어쓸 수 있습니다. 읽기 전용으로 설정되거나 O_RDONLY 플래그로 열리거나 읽기 전용으로 마운트된 파일 시스템에 있는 파일을 포함한 모든 파일의 페이지.
실용적인 면에서 취약성 임의의 프로세스에 코드를 주입하는 데 사용할 수 있습니다. 또는 열려 있는 파일의 데이터 손상. 예를 들어 sshd 프로세스에 대한 authorized_keys 파일의 내용을 변경할 수 있습니다.
더러운 파이프 정보
치명적인 취약점 Dirty COW와 유사합니다. 2016년에 확인되었으며 Dirty Pipe는 위험면에서 Dirty COW와 같은 수준으로 언급되며, 그러나 이것은 작동하기가 훨씬 쉽습니다.
아카이브의 주기적 손상에 대한 불만 분석 중 더러운 파이프가 식별되었습니다. splice() 작업과 unnamed pipe를 사용하여 준비된 로깅 서버(로드된 시스템에서 37개월 동안 3개 손상)에서 압축 파일을 다운로드하는 시스템에서 네트워크를 통해 다운로드했습니다.
취약점 Linux 커널 버전 5.8부터 나타났습니다., 2020년 XNUMX월 출시.
다른 방법으로 보면 Debian 11에 존재하지만 Ubuntu 20.04 LTS의 기본 커널에는 영향을 미치지 않는 반면 원래 이전 분기를 기반으로 하는 RHEL 8.x 및 openSUSE/SUSE 15 커널의 경우 가능하지만 가능합니다. 문제를 일으키는 변경 사항이 그들에게 이전되었다는 것(정확한 데이터는 아직 없음).
이 취약점은 구조가 할당될 때 메모리가 지워지지 않고 이름이 지정되지 않은 특정 조작이 있음에도 불구하고 함수 copy_page_to_iter_pipe() 및 push_pipe()의 코드에서 "buf->flags" 값의 초기화 부족으로 인한 것입니다. 파이프에서 "buf->flags"는 다른 작업의 값을 포함할 수 있습니다. 이 기능을 사용하면 권한이 없는 로컬 사용자가 플래그에서 PIPE_BUF_FLAG_CAN_MERGE 값의 모양을 얻을 수 있으므로 특별히 준비된 명명되지 않은 파이프에 새 데이터를 쓰기만 하면 페이지 캐시의 데이터를 덮어쓸 수 있습니다.
공격을 위해 읽을 수 있어야 하는 대상 파일이 필요합니다. 파이프에 쓸 때 액세스 권한을 확인하지 않기 때문에 읽기 전용 파티션에 있는 파일(예: c CD-ROM 파일)에 대해서도 페이지 캐시에서 교체를 수행할 수 있습니다.
이를 통해 페이지 캐시의 정보를 교체한 후 파일에서 데이터를 읽을 때 프로세스는 실제 데이터를 수신하지 않고 교체된 데이터를 수신하게 됩니다.
언급된다 Dirty Pipe 작업은 이름 없는 파이프를 만들고 임의의 데이터로 채우는 것으로 요약됩니다. 관련된 모든 링 구조에 PIPE_BUF_FLAG_CAN_MERGE 플래그를 설정하기 위해.
그런 다음 파이프에서 데이터를 읽지만 pipe_inode_info 링 구조에 있는 pipe_buffer 구조의 모든 인스턴스에 플래그가 설정된 상태로 유지됩니다. 그런 다음 필요한 오프셋에서 시작하여 대상 파일에서 명명되지 않은 파이프로 데이터를 읽기 위해 splice()에 대한 호출이 수행됩니다. 이 명명되지 않은 파이프에 데이터를 쓸 때 PIPE_BUF_FLAG_CAN_MERGE 플래그는 pipe_buffer 구조의 새 인스턴스를 만드는 대신 페이지 캐시의 데이터를 덮어씁니다.
최종적으로 그것에 대해 더 많이 알고 싶다면 원본 메모에서 세부 정보를 확인할 수 있습니다. 다음 링크에서.
또한 관심이 있으시면 업데이트 게시를 팔로우하거나 알 수 있습니다. 주요 배포판의 패키지 중 다음 페이지에서 수행할 수 있습니다. 데비안, SUSE, Ubuntu, RHEL, 페도라, 젠투, 아치 리눅스.
제안된 취약점 수정은 Linux 커널 버전 5.16.11, 5.15.25 및 5.10.102에서 제공되며 수정 사항은 Android 플랫폼에서 사용되는 커널에도 포함되어 있다고 언급됩니다.