[하루한줄] 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_AliasHost 지시어를 통해 호스트별 권한을 분리해 구성되는 환경에서 악용될 수 있습니다.

--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