CVE-2026-68186 in Linux
요약
\~에 의해 VulDB • 2026. 08. 11.
리눅스 커널에서 다음 취약점이 해결되었습니다:
binfmt_misc: 인터프리터가 열릴 때까지 have_execfd를 한 번만 설정합니다.
load_misc_binary()는 'O'(또는 'C') 플래그를 보는 즉시 bprm->have_execfd를 높입니다(설정합니다). 이는 인터프리터를 열기 훨씬 전에 발생합니다. 해당 open 호출이 실패하면 플래그가 bprm에 계속 설정된 상태로 남습니다. binfmt_misc은 형식 목록의 맨 앞에 있으므로, -ENOEXEC을 반환하는 인터프리터 open 실패는 검색이 나중에 있는 다른 형식으로 넘어가게 합니다. 이는 인터프리터를 스테이지하지 않은 채 일치하는 바이너리를 직접 실행한다는 것을 의미합니다. 따라서 bprm->executable은 NULL인 반면 have_execfd는 디스크립터가 존재한다고 잘못 주장합니다.
결과적으로 begin_new_exec()에서 누락된 executable을 역참조합니다:
would_dump(bprm, bprm->executable);
그리고 NULL 역참조(NULL deref)로 이어집니다. 만약 그렇지 않았다면 동일한 함수 내 이후의 인계(hand-off)도 실패했을 것입니다. FD_ADD(0, bprm->executable)는 NULL 파일을 -ENOMEM으로 거부합니다. 두 지점 모두 되돌릴 수 없는 시점을 지나므로 어떤 경우에도 exec를 롤백할 수 없습니다.
binfmt_misc가 사용자 네임스페이스에서 마운트될 수 있으므로 비특권 사용자에게도 도달 가능합니다. 따라서 사용자는 'O' 항목을 등록하고 해당 인터프리터가 FUSE 마운트에 있는 경우에, FUSE 서버가 -ENOEXEC으로 open을 실패하게 하여 해당 항목과 일치하는 네이티브 ELF 파일을 실행할 수 있습니다.
have_execfd는 설명되는 executable과 함께 설정되지 않는 한 의미가 없습니다. 이는 인터프리터가 열리고 스테이지된 후에야 설정됩니다. 따라서 이제 그곳에서 이를 높이고, 이미 그 시점에 설정되어 있는 execfd_creds 옆에 배치합니다. open 실패 시 이것이 명확하게 초기화된 상태로 남으므로, 대체 형식(fallback format)은 바이너리로부터 자격 증명을 파생시키고 네이티브 exec의 경우와 마찬가지로 AT_EXECFD를 출력하지 않습니다. open 이전에 load_misc_binary()가 수행하는 argv 재작성은 아직 되돌려지지 않았습니다. 이는 바이너리가 argv[0]에서 인터프리터 경로를, argv[1]에서 자체 경로를 보게 된다는 것을 의미하지만, 이는 이 변경보다 이전의 상황이며 exec이 faulting을 멈춘 후에야 관찰 가능해졌습니다.
If you want to get best quality of vulnerability data, you may have to visit VulDB.