🇰🇷 한글 설명
Linux 커널의 cgroup/cpuset 서브시스템에서 is_in_v2_mode() 함수가 cgroup 파일시스템이 재바인딩되는 중에 오래된(stale) cpuset_cgrp_subsys.root 포인터를 참조할 수 있어 Use-After-Free가 발생할 가능성이 있었습니다. 이를 해결하기 위해 cpuset_v2_mode 플래그를 도입하여 안정적인 시점에만 설정하고 해당 플래그를 읽도록 수정했습니다.
💡 쉬운 설명
리눅스 커널 내부에서 파일 시스템을 다시 연결하는 순간에 이미 사용이 끝난 메모리를 잘못 참조할 수 있는 문제가 있었습니다. 이 수정은 안전한 값만 기록하는 별도의 표시(플래그)를 사용하도록 바꿔 그 위험을 없앱니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
cgroup/cpuset: Don't access cpuset_cgrp_subsys.root in is_in_v2_mode()
After seeing the patch [1] to guard is_in_v2_mode() with RCU, it makes
me realize that is_in_v2_mode() may be called in a context where a new
cgroup filesystem is being rebound with stale cpuset_cgrp_subsys.root
pointer. Avoid this potential UaF situation by adding a new cpuset_v2_mode
flag which is set when the cpuset_v2_mode mount option is used. This
flag is written into only when cpuset_bind() is being called with a
stable cpuset_cgrp_subsys.root value. The is_in_v2_mode() helper is
modified to read the new cpuset_v2_mode flag instead of accessing
cpuset_cgrp_subsys.root directly.
[1] https://lore.kernel.org/lkml/
[email protected]
📍 영향받는 시스템
cpuset 기능을 사용하는 Linux 커널 (수정 커밋 이전 버전, 정확한 영향 버전은 배포판 및 커널 공지 확인 필요)
⚔️ 공격 벡터
로컬 권한을 가진 사용자가 cgroup 파일시스템의 마운트/재바인딩 동작을 반복적으로 유발해 레이스 컨디션을 만드는 방식으로 추정되며, 공개된 익스플로잇 정보는 확인되지 않음
🛡️ 대응 방법
배포판에서 제공하는 해당 수정이 포함된 최신 Linux 커널 버전으로 업데이트 후 재부팅
🔧 검증 코드
출력된 커널 버전을 배포판 보안 공지 또는 upstream 수정 커밋과 비교하여 수정 포함 여부를 확인하며, 버전이 수정 이후이면 해당 취약점은 해결된 것입니다.