[하루한줄] CVE-2025-32462: sudo에서 -h 옵션을 이용한 권한 상승(EoP) 취약점
URL
Target
- sudo Stable: v1.9.0 ~ v1.9.17
- sudo Legacy: v1.8.8 ~ v1.8.32
Explain
CVE-2025-32462는 sudo의 --host
옵션을 이용한 권한 상승(EoP, Elevation of Privilege) 취약점입니다. sudo에서 --host
옵션이 추가된지 12년만에 발견되었습니다.
해당 취약점은 별도의 exploit이 필요하지 않지만 Host_Alias
나 Host
지시어를 통해 호스트별 권한을 분리해 구성되는 환경에서 악용될 수 있습니다.
--host
옵션은 지정한 호스트에서 command를 실행시키는 옵션으로, 사용자 권한을 보여주는 -l
옵션과 함께 사용될 때만 동작되어야 합니다. 하지만 이를 검증하는 별도의 코드가 없어 다른 명령어나 옵션들과 함께 사용 가능하여 취약점이 발생합니다.
Host_Alias SERVERS = prod.test.local, dev.test.local
Host_Alias PROD = prod.test.local
lowpriv SERVERS, !PROD = NOPASSWD:ALL
lowpriv ci.test.local = NOWPASSWD:ALL
예시로 sudoers에 위와 같이 호스트별 권한에 대해 정의해 놓았다고 가정한다면 lowpriv
사용자는 PROD
에 속한 prod
호스트에서는 모든 command를 자유롭게 실행할 수 없지만 ci
, dev
호스트에서는 패스워드 없이 모든 command를 자유롭게 실행할 수 있습니다.
lowpriv@prod: ~$ sudo -i -h ci.test.local
root@prod ~# id
uid=0(root) gid=0(root) groups=0(root)
하지만 lowpriv
사용자가 prod
호스트에서 -h
옵션을 이용해 ci
를 호스트로 지정해 command를 실행한다면 host로 지정된 ci
의 host 규칙을 참조하기 때문에 prod
호스트에 있더라도 ci
호스트에 있는 것 처럼 command 실행이 가능합니다.
Patched Code
//plugins/sudoers/sudoers.c
/* The user may only specify a host for "sudo -l". */
if (!ISSET(ctx->mode, MODE_LIST|MODE_CHECK)) {
if (strcmp(ctx->runas.host, ctx->user.host) != 0) {
log_warningx(ctx, SLOG_NO_STDERR|SLOG_AUDIT, N_("user not allowed to set remote host for command"));
sudo_warnx("%s",U_("a remote host may only be specified when listing privileges."));
ret = false;
goto done;
}
}
해당 취약점은 현재 sudo v1.9.17.p1 에서 패치 되었으며, 위와 같이 --host
옵션을 사용할 경우 -l
옵션과 사용되는지 검증하도록 추가하였습니다.
Reference
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.