[하루한줄] OMIGOD: Microsoft Azure의 OMI에서 발견된 네 가지 취약점
URL
OMIGOD: Critical Vulnerabilities in OMI Affecting Countless Azure Customers
Target
- OMI (undocumented)
Explain
Microsoft의 클라우드 컴퓨팅 플랫폼 Azure에서 사용되는 오픈 관리 인프라(OMI)의 네 가지 취약점에 대한 세부 정보가 공개되었습니다. OMI는 리눅스 환경에서 사용되는 설정 관리 프로그램으로, 원격 및 로컬 환경에서 가상 머신에 대한 설정 및 통계 자료를 수집합니다. 해당 취약점은 OMIGOD으로 명명되었으며 Azure의 대부분의 서비스에 영향을 주는 것으로 알려졌습니다.
취약점 목록은 다음과 같습니다.
- CVE-2021-38647 – root 권한의 RCE
- CVE-2021-38648 – 로컬 권한 상승
- CVE-2021-38645 – 로컬 권한 상승
- CVE-2021-38649 – 로컬 권한 상승
아래는 위 취약점들 중 CVE-2021-38647의 대한 세부 정보입니다. 해당 취약점은 인증되지 않은 사용자가 root 권한으로 원격 코드 실행을 할 수 있어 치명적인 위험도로 분류되었습니다. OMI는 기본적으로 root 권한으로 실행되며 POST 요청을 통해 원격에서 요청한 명령어를 실행하는 기능이 존재합니다.
static Http_CallbackResult _ReadData(Http_SR_SocketData* handler)
{
....
if(handler->recvHeaders.authorization) { // (1)
Http_CallbackResult authorized;
handler->requestIsBeingProcessed = MI_TRUE;
if (handler->isAuthorised)
Deauthorize(handler);
authorized = IsClientAuthorized(handler);
if (PRT_RETURN_FALSE == authorized)
goto Done;
else if (PRT_CONTINUE == authorized)
return PRT_CONTINUE;
}
else{
if (handler->authFailed) { // (2)
handler->httpErrorCode = HTTP_ERROR_CODE_UNAUTHORIZED;
return PRT_RETURN_FALSE;
}
}
r = Process_Authorized_Message(handler);
Done:
handler->recvPage = 0;
handler->receivedSize = 0;
memset(&handler->recvHeaders, 0, sizeof(handler->recvHeaders));
handler->recvingState = RECV_STATE_HEADER;
return PRT_CONTINUE;
}
유저가 서버에 연결하면 uid
와 gid
가 포함된 구조체를 memset
을 이용해 0으로 초기화하고 인증을 기다립니다. 이후 POST 요청의 Authorization
필드의 암호로 인증이 성공하면 gid
와 uid
를 해당 유저의 권한으로 설정한 뒤 명령어를 실행하는데, 이때 Authorization
헤더가 존재하지 않으면 (1)의recvHeaders.authorization
가 False가 되어 else문을 실행하지만 인증 프로세스를 수행하지 않았기 때문에 (2)에서 handler->authFailed
또한 기본값인 False이므로 인증 성공 시 실행되는 분기로 넘어갑니다. 따라서 Authorization
헤더를 제거한 명령어 실행 요청을 보내면 인증 프로세스를 건너뛰고 memset
에 의해 0으로 초기화된 gid
와 uid
, 즉 root 권한으로 원격 코드 실행이 가능합니다.
해당 취약점 외 3개의 권한 상승 취약점인 CVE-2021-38645/38648/38649 또한 동일하게 OMI의 인증 프로세스의 과정에서 발생하는 권한 상승으로 자세한 정보는 URL에서 확인할 수 있습니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.